【GNU/Linux实战手记之Emacs篇 下——Emacs是个IDE】
【GNU/Linux实战手记之Emacs篇 下——Emacs是个IDE】
作者:叶魏彬 MSN:fritz_yea@hotmail.com
Copyright(C)Free Software Library,Org(http://yea.xiloo.com)
本文依照GNU Free Document Lience发布,任何人都可以将本文原封不动的复制、转载,但请务必保留此声明。作者不对本文所导致的任何结果负责。
十、定制你的Emacs
其实,有关Emacs的争论一直没有停息过。有人坚持Emacs是个庞大的史前生物,也有人坚持Emacs是神造的万能工具。总之,一切都是围绕着它的复杂性而论。毋庸置疑的,单作为一个文本编辑器而言,Emacs的确是太庞大了(它足有70多兆!)。但是,如果把Emacs视为一个环境(它也的确是一个环境),则它是非常优秀的,70兆的体积也就不算什么了。作为普通用户,我不推荐你去使用Emacs,vi就可以了--但我不并不是在贬低vi,相反,vi同样是令我们尊敬的一个优秀的编辑器--它将复杂性隐藏在了幕后,通过各种命令实现,而这些命令我们也许永远也用不到,所以我们不必去理睬它,它就是一个小巧、简洁和直观的文本编辑器。但是如果你是一个程序员,或是系统管理员,你所关心的就不会是绚丽的界面,而是强大的功能和工作的效率。而这就是Emacs能带给你的。平心而论,Emacs并不比我们平常所惯用的其他编辑器,如UltraEdit、TextPad、EmEditor等难用多少,只是我们在使用Emacs的时候,要从新适应Emacs定义的快捷键罢了。而正是这一点,给许多浅尝辄止的人眼前蒙上了一层纱,他们也就以讹传讹,大肆宣扬起Emacs的“复杂”来。其实,一旦你熟悉了它的快捷键,你就能像用其它软件一样自如。
(如果你只是为了写几个字,你会固执的坚持使用Word吗?如果你要写C/C++程序,你会用Word吗?要是我,我宁可用notepad。当我初次接触电脑的时候,我还是在黑底白字的DOS时代。我曾为Turbo C里的IDE环境惊叹不已。那时的剪贴、粘贴的快捷键是Ctrl-Ins、Shift-Ins,删除一行是Ctrl-y,直到现在我还忍不住想用Ctrl-y来删除一行。其实统一软件快捷键的不是MS,而是WordPerfect,正是因为它的流行,使得之后的软件都纷纷效仿它,以增加亲和力。F1代表“帮助”就是它最先使用的。所以不要再抱怨Emacs的快捷键了。Emacs可以在没有图形显示的终端环境下出色的工作,和它在X下一模一样。UltraEdit可以吗?)
废话少说,言归正传。我们的目的是定制我们的工作环境,使之最适合我们的工作。因此,我们必须首先澄清一些概念。
缓冲区(Buffer)
缓冲区(Buffer)的概念听起来很玄,其实就是一块用来保存我们输入的东西的内存区域,你可以把它理解为文件。在Emacs里,一切都是在内存中进行,直到你按下C-x C-s来保存,你的文件才会被改变。这是一个普遍的文本保存策略,几乎所有的文本编辑器都是这样工作的。
窗口(Frame)
窗口(Frame)不是Window,它是指你所编辑的文本被显示的区域。这一点类似于你在UltraEdit里打开的各个文件所在的小窗口。
模式(mode)
模式(mode)是Emacs里最重要的概念,Emacs的强大功能基本上都是由各种模式提供的。常用的有C/C++模式、shell模式、Perl模式、SGML/HTML模式等等。
基于上面的概念,让我们来逐步研究Emacs的IDE环境
10.1、文件,缓冲区和窗口
首先,我们可以在Emacs里同时编辑多个文件。你随时可以使用C-x C-f来打开(或者创建)文件。但是默认情况是,编辑器自动进入到新的文件窗口中(所有的编辑器都这样)。如果我们希望同时看到两个文件(比如比对两个文件),我们就必须首先对窗口进行分割。使用C-x 2对窗口进行水平分割。分割完毕后你会失望的发现,两个窗口里的内容竟然完全一样(包括你对任一窗口的修改,都会同步显示在另一个窗口中)!是的,我们只是分割了窗口,但是并没有切换缓冲区,因此依旧是显示原来缓冲区的内容。使用C-x o切换到你想去的窗口,然后在缓冲区列表(C-x C-b)里选择目标文件。这样你就可以在同一屏终审视两个文件了。
你也可以用C-x 3垂直分割屏幕,分成左右两个区域。窗口理论上可以无限分割,只要你觉得分那么多的小窗口有意义(试试看,连Emacs都会觉得你这样做很愚蠢),因此你完全可以将屏幕分割成倒“品”字形,只需依次按下C-x 2、C-x 3即可。
窗口和缓冲区的概念是完全不同的,因此我们可以“关闭”窗口,而非“关闭”缓冲区,让它暂时从我们的视线里消失。这相当于图形环境下的“最小化窗口”。使用C-x 0关闭当前窗口,使用C-x 1关闭当前窗口以外的其他窗口。
下面的这个列表很直观的显示了对窗口和缓冲区的键盘操作:
--------------------------------------------------------------------------------------------------------
窗口操作:
功能键 功能
C-x 0 删除当前窗口,对缓冲区无影响。注意这里是数字0。 (最小化当前窗口)
C-x 1 删除当前以外的所有窗口,对缓冲区无影响。 (最小化其他窗口)
C-x 2 水平分割当前窗口。
C-x 3 垂直分割当前窗口。
C-x o 切换窗口(当且仅当有一个以上的窗口存在)。注意这里是字母o。
缓冲区操作:
功能键 功能
C-x C-f 打开(创建)文件,创建一个新的缓冲区。
C-x C-s 保存当前缓冲区到文件。
C-x C-w 保存当前缓冲区到其他文件(文件另存为)。
C-x k 关闭当前缓冲区。
C-x C-b 缓冲区列表。你可以用方向键来选择要切换的缓冲区。
C-x C-c 关闭所有的缓冲区,退出Emacs。
--------------------------------------------------------------------------------------------------------