Emacs 很可能是现存最强大的文本编辑器了。它几乎什么都能做,并且可以通过其基于 lisp 的语言无限扩展。您可以用 Emacs 在网上冲浪,阅读邮件,参加新闻组讨论,冲咖啡等等。在本章中您并不能够学会以上所有功能,不过您可以学会如何打开 Emacs,编辑文件,保存并退出 Emacs。而这对于您今后的学习是个良好的开端。
在学会这些功能后,如果您还想进一步了解 Emacs,您可以读一读 GNU Emacs 教程导论。
emacs [文件1] [文件2 ...]
Emacs 会为命令行中作为参数输入的每一个文件打开一个缓冲区。如果您输入了超过两个文件,那么 Emacs 会自动将窗口切分成两部分,其中一部分显示最后一个文件的内容,而另一部分显示缓冲区列表。如果您在启动 Emacs 的时候没有指定任何文件,那么您将会看到一个称为 *scratch*
的缓冲区。如果您在 X 中,您还能看到能用鼠标操纵的菜单;如果您处于文本模式,您仍然能够通过按下 F10 访问菜单,不过本章将仅限于介绍如何仅使用键盘工作,而不通过任何菜单操作。
让我们操练起来。请先打开两个文件:file1
和 file2
。如果它们原本不存在的话,只要您写入了一些什么之后它们就会被创建。
$ emacs file1 file2
正如您所见,创建了两个缓冲区。同时在屏幕底部还有第三个(您能在其中看到(New file)
)。那是一个小缓冲区。您不能直接访问该缓冲区。只有在交互式输入时,Emacs 才会让您使用该缓冲区。要更换当前缓冲区,请按 Ctrl-X-O。您可以像使用“普通”编辑器那样键入文本,按 Del 或 Backspace 键删除字符。
您可以使用方向键来移动,或者也可以使用以下按键组合:Ctrl-A 用以移动到行首,Ctrl-E 用以移动到行末,Alt-< 或 Ctrl-Home 用以移动到缓冲区开头以及 Alt-> 或 Ctrl-End 用以移动到缓冲区结尾。这样的按键组合有许许多多,甚至对每个方向键也有相对应的按键组合[10]。
当您准备将您的更动保存到磁盘上时,请按 Ctrl-XCtrl-S。如果您想将该缓冲区的内容保存到另一个文件中,请按 Ctrl-XCtrl-W。随后 Emacs 会询问您想要保存该缓冲区内容的文件名。此时,您可以像在 bash 中一样通过按下 Tab 键来补全。
当您编辑完一个文件,并想删除相关联的缓冲区时,请按 Ctrl-XK。随后,Emacs 会询问您想要关闭哪个缓冲区。默认是当前缓冲区。如果您要关闭的不是当前缓冲区,请输入它的名字或按 Tab:Emacs 会打开 *Completions*
缓冲区给出所有可能的选择。按 Enter 键确认您的选择。
您也可以随时在屏幕上恢复同时显示两个缓冲区。只要按下 Ctrl-X2。默认情况下,新创建的缓冲区是当前缓冲区的副本(这就能让您能“同时”编辑大型文件中的不同部分)。请使用上文提到的方法在不同的缓冲区之间移动。
假设您处于这种情况下:图 4.2 “Emacs,复制文本块之前”。
首先,您需要选择您想要复制的文本。本例中,我们想要复制整句话。第一步,标记区域头。假定您的光标已经位于如图 4.2 “Emacs,复制文本块之前”所示位置,这时请依次按下 Ctrl-空格 (Control + 空格键)。Emacs 将在小缓冲区提示 Mark set
。接下来,按下 Ctrl-A 移动到行首。从标记一直到光标当前位置之间的区域已被选中用于复制或剪切,在我们的例子中是一整行文本。然后,可以有两种方式:Alt-W (复制) 或者 Ctrl-W (剪切)。如果您选择复制,Emacs 会先回到标记的位置,让您查看选中的区域。
最后,移动到您想要这段文本结束的地方并按下 Ctrl-Y。其结果是:
实际上,您所作的只是将文本复制到 Emacs 的删除环(kill ring)中。该删除环中包含了自 Emacs 启动以来所有复制或剪切的区域。刚刚复制过的或剪切过的任何区域位于该删除环的顶端。Ctrl-Y 组合键只是“粘贴”了位于顶端的区域。如果您想要访问其中的其他区域,请按 Ctrl-Y 然后按 Alt-Y 直到您得到您想要的文本。
要查找文本,移动到相应的缓冲区并按 Ctrl-S。Emacs 会询问您需要查找的字符串。要在当前缓冲区中继续查找上一个字符串,只要再次按下 Ctrl-S。当 Emacs 抵达缓冲区结尾并且没有找到下一个匹配项时,再次按下 Ctrl-S 可以重新从缓冲区开头找起。按 Enter 键结束查找。