Emacs

Emacs 很可能是现存最强大的文本编辑器了。它几乎什么都能做,并且可以通过其基于 lisp 的语言无限扩展。您可以用 Emacs 在网上冲浪,阅读邮件,参加新闻组讨论,冲咖啡等等。在本章中您并不能够学会以上所有功能,不过您可以学会如何打开 Emacs,编辑文件,保存并退出 Emacs。而这对于您今后的学习是个良好的开端。

在学会这些功能后,如果您还想进一步了解 Emacs,您可以读一读 GNU Emacs 教程导论

简单演示

如下启动 Emacs

emacs [文件] [文件...]

Emacs 会为每一个作为参数输入的文件打开一个缓冲区,并最多可以同时显示两个缓冲区。如果您在启动 Emacs 的时候没有指定任何文件,那么您将会看到一个称为 *scratch* 的缓冲区。如果您在 X 中,您还能看到菜单。不过本章将仅限于介绍如何使用键盘工作。

起步

让我们操练起来。请先打开两个文件:file1file2。如果它们原本不存在的话,只要您写入了一些什么之后它们就会被创建。

$ emacs file1 file2

键入上述命令后就会出现以下窗口:

图 4.1. 同时编辑两个文件

同时编辑两个文件

正如您所见,创建了两个缓冲区。同时在屏幕底部还有第三个(您能在其中看到(New file))。那是一个小缓冲区。您不能直接访问该缓冲区。只有在交互式输入时,Emacs 才会让您使用该缓冲区。要更换当前缓冲区,请按 Ctrl+x o。您可以像使用“普通”编辑器那样键入文本,按 DELBackspace 键删除字符。

您可以使用方向键来移动,或者也可以使用以下按键组合:Ctrl+a -- 移动到行首,Ctrl+e -- 移动到行末,Alt+< -- 移动到缓冲区开头以及 Alt+> -- 移动到缓冲区结尾。这样的按键组合有许许多多,甚至对每个方向键也有相对应的按键组合[10]

当您准备将您的更动保存到磁盘上时,请按 Ctrl+x Ctrl+s。如果您想将该缓冲区的内容保存到另一个文件中,请按 Ctrl+x Ctrl+w。随后 Emacs 会询问您想要保存该缓冲区内容的文件名。此时,您可以使用补全

处理缓冲区

如果您想要在屏幕上只显示一个单独的缓冲区,有两种方法:

  • 要隐藏当前缓冲区,请按 Ctrl+x 0

  • 要保留当前缓冲区,请按 Ctrl+x 1

恢复缓冲区也有两个办法:

  • 按下 Ctrl+x b 并输入缓冲区的名称,或者

  • 按下 Ctrl+x Ctrl+b。这时会打开一个叫做 *Buffer List* 的新缓冲区。您可以使用 Ctrl+x o 在其中移动,选中您期望的缓冲区后按 Enter 键,或是在小缓冲区中输入那个缓冲区的名称。当您选定后,*Buffer List* 缓冲区将返回后台。

当您编辑完一个文件,并想删除相关联的缓冲区时,请按 Ctrl+x k。随后,Emacs 会询问您想要关闭哪个缓冲区。默认是当前缓冲区。如果您要关闭的不是当前缓冲区,请输入它的名字或按 TABEmacs 会打开 *Completions* 缓冲区给出所有可能的选择。按 Enter 键确认您的选择。

您也可以随时在屏幕上恢复同时显示两个缓冲区。只要按下 Ctrl+x 2。默认情况下,新创建的缓冲区是当前缓冲区的副本(这就能让您“同时”编辑大型文件的不同部分)。请使用上文提到的方法在不同的缓冲区之间移动。

您可以随时打开其他的文件,只要按下 Ctrl+x Ctrl+fEmacs 会询问您该文件名,而您也可以使用补全。

复制,剪切,粘贴,查找

假设您处于这种情况下:图 4.2 “Emacs,复制文本块之前”

图 4.2. Emacs,复制文本块之前

Emacs,复制文本块之前

首先,您需要选择您想要复制的文本。本例中,我们想要复制整句话。第一步,标记区域头。假定您的光标已经位于如 图 4.2 “Emacs,复制文本块之前”所示,这时请依次按下 Ctrl+ 空格 (Control  + 空格)。Emacs 将在小缓冲区提示 Mark set。接下来,按下 Ctrl+a 移动到行首。从标记一直到光标当前位置之间的区域已被选中用于复制或剪切,在我们的例子中是一整行文本。然后,可以有两种方式:Alt+w (复制) 或者 Ctrl+w (剪切)。如果您选择复制,Emacs 会先回到标记的位置,让您查看选中的区域。

最后,移动到您想要这段文本结束的地方并按下 Ctrl+y。其结果是:

图 4.3. 使用 emacs 复制文本

使用 emacs 复制文本

实际上,您所作的只是将文本复制到 Emacs删除环(kill ring)中。该删除环中包含了自 Emacs 启动以来所有复制或剪切的区域。刚刚复制过的或剪切过的任何区域位于该删除环的顶端。Ctrl+y 组合键只是“粘贴”了位于顶端的区域。如果您想要访问其中的其他区域,请按 Ctrl+y 然后按 Alt+y 直到您得到您想要的文本。

要查找文本,移动到相应的缓冲区并按 Ctrl+sEmacs 会询问您需要查找的字符串。要在当前缓冲区中继续查找上一个字符串,只要再次按下 Ctrl+s。当 Emacs 抵达缓冲区结尾并且没有找到下一个匹配项时,再次按下 Ctrl+s 可以重新从缓冲区开头找起。按 Enter 键结束查找。

要查找并替换,请按 Alt+%Emacs 会询问查找哪个字符串,用什么来替换它,以及在每个匹配点要求确认替换。

按下 Ctrl+x u 将撤消上一步操作。想撤消多少步都可以。

退出 emacs

退出 Emacs 的快捷键是 Ctrl+x Ctrl+c。如果您还未保存您的更改,Emacs 会询问您是否想要保存您的缓冲区。



[10] Emacs 被设计用于各种各样的计算机上,其中的某些可能没有方向键。对于 Vi 更是如此。