分类: LINUX
2008-12-03 22:37:08
您首先应当知道的是,在 UNIX 中最流行的两种编辑器是 Emacs 和 vi,两者都有超过 30 年的历史。不过,它们都是很难过时的工具。和 UNIX 一样,这些编辑器的基本设计已有几十年之久,但是在最先进的开发中,它们仍然得到了广泛的应用。
Emacs 是历史上最早的开放源代码和免费软件工程之一。它的发明者 Richard Stallman 建立了 GNU 工程及其父组织—自由软件基金会(请参阅参考资料)。甚至在 Stallman 发布 GNU 公共许可(GNU GPL,一种许可条款,如今的大多数开放源代码软件都是在该条款下发布的)之前,他就已经在类似的免费 copyleft 软件许可(被称为 EMACS 公共许可)下发布了 Emacs 的源代码。
Emacs 这个名字已经成为专有名词,但它最初是一个首字母缩写词,代表 Editing MACros;Stallman 最初实现的是用 TECO 语言写成的一组宏。Emacs 现在是用 Emacs Lisp 编写的,后者是一种优雅的高级编程语言。
GNU 工程的简要介绍中称 Emacs 是一种自身配备了相关说明文档的可扩展文本编辑器 (the extensible self-documenting text editor)。Emacs 是可扩展的,这意味着可以在已有功能的基础上添加或构建新功能。之所以有这种可能,是因为它是用 Lisp 编写的,您可以编写新的 Emacs Lisp 例程以添加新功能。您甚至能在 Emacs 会话还在运行时运行这些新功能。它自身配备了相关说明文档,因为每个按键都有相应的即时帮助,即使在键入一个命令时也能显示帮助信息。这样,您可以单击 Help 按钮,弹出各种可能情况的列表。
Emacs 被称为一个编辑环境, 因为它不仅仅是一个普通意义上的、用于纯文本编辑的编辑器。许多管理员和开发人员在各种平台上用它来编译和调试程序、管理电子邮件、在系统中操作文件、运 行 shell 命令,以及完成很多其他工作。人们甚至用它在 Usenet 新闻组中进行交流,还用它来浏览网页。扩展包和内置插件可以处理从 Internet 中继聊天 (Internet Relay Chat, IRC) 和发送消息到网络通信的各种情况。一个流传很久的 UNIX 笑话是这样说的:“如果 Emacs 环境里有一个好的编辑器的话,它就不至于这么糟糕了。”
因为很多任务都可以用 Emacs 来完成,所以它也有自己的词汇表,当您在这一部分中深入了解典型的 Emacs 窗口时,您将学到这些词汇。这一部分还介绍了如何启动和停止 Emacs,以及如何键入各种命令。
要从 shell 中启动 Emacs,键入:
emacs |
如果您在控制台或终端中启动 Emacs,您会看到它打开后充满了整个终端窗口,如图 1 所示。
如果您是在 X 客户端,Emacs 一般会在属于它自己的窗口中打开,如图 2 所示。您还可以指定让它在某个终端窗口打开(如图 1 所示),方法是使用 -nw
选项。乍一看,Emacs 的这两个视图似乎是不同的应用程序,但两者只有表面的差别。它们仅有的真正不同之处在于缺省的颜色、X 客户端显示的图形徽标,以及 X 客户端顶部附近的图标组(包含某些最常用命令的快捷方式)。两者的文本功能和 X 版本是一模一样的。
这个屏幕的有些部分需要现在就解释一下。我们从顶部开始,向下介绍。
在 Emacs 屏幕顶部是一个突出显示的条,上面有一些单词。这被称为菜单栏,您可以在菜单中选择常用的 Emacs 命令。您能用键盘访问这些菜单;在 X 客户端中,您还可以用鼠标展开菜单。
专家们通常会配置他们的 Emacs,使它关闭菜单栏,好在屏幕上留出更大的编辑空间。但是在您学习 Emacs 时,菜单栏是帮您熟悉其丰富功能的好方法。
此外,如果您在 X 中打开了 Emacs,您会看到顶部有一组特殊的图标(请参见图 2);它们是某些最常用的菜单选项的快捷方式。
要用键盘访问菜单栏,请按 F10。现在就试试,看看终端中是如何打开一个新的窗口并显示菜单列表的,如图 3 所示。
您可以使用向上或向下的方向键,在菜单选项中移动,然后按 Enter。如果您选择的项目有一个子菜单,它会显示在屏幕上。您可以用同样的方法在新的子菜单中选择一个项目,直到您选中了要运行的命令为止。
如果您想终止这一过程,可以随时按下 Ctrl-G。这个特殊的键盘输入会使计算机发出一声蜂鸣声,并退出当前正在执行的任何命令。如果没有正在执行的命令,按下这个键盘输入只会使计算机发出蜂鸣声。请现在尝试一下。
您会看到 Emacs 窗口恢复成在您选择菜单之前的样子。
屏幕中央大片的主要区域被称为 Emacs 窗口,它是您进行编辑工作的地方。当您打开一个要编辑的文件时,这里将显示该文件的内容。当文件或文档中的内容显示在 Emacs 窗口中时,它被称为缓冲区。您可以随时在 Emacs 中同时打开多个缓冲区(即使它们不会显示在主窗口中也一样)。在编辑会话中,虽然只有一个缓冲区会显示在窗口中,但您一般仍会打开多个缓冲区。
在 X 客户端中,在窗口的左边会显示一个滚动条。(终端的版本也会出现,但它仅在打开某个缓冲区时显示。)滚动条显示 Emacs 窗口中的文本与缓冲区剩余部分的位置关系与大小关系。
在每个 Emacs 窗口中都有一条横贯底部的高亮条,它被称为模式行, 您可以把它看成是状态栏。它将为您提供有关 Emacs 会话和当前缓冲区(在上面的窗口中显示)的信息,包括您做出的最新修改是否已被保存到磁盘、光标所在行的行号、屏幕底部显示的内容在缓冲区中的位置(用占 总体的百分比表示),以及当前有哪些 Emacs 功能和设置处于活动状态。
在模式行下面和屏幕(或 X 客户端窗口)底部的一片小空间被称为迷您缓冲区 (minibuffer)。这是 Emacs 用来显示与操作相关的消息的地方。当 Emacs 要求您输入某种内容(如某文件的名称)时,将在此处显示。
与 UNIX shell 类似,迷您缓冲区使用制表符作为提示符。按下 Tab 键,可获得一个可能情况的列表。
一个用来调用特定命令的 Emacs 组合键被称为一个键绑定。这些都可以自定义,但 Emacs 也附有缺省的绑定。
一眼看去,为数众多的 Emacs 键绑定似乎很复杂,让人不知所措,不过请务必记住,它们是为了提高您的速度和便于记忆而专门设计的。通常每个绑定都有一个记忆的方法,如 S 键就是用来保存 (save) 的。在您尝试使用它们时,请想想这一点。
总的说来,Emacs 命令可分为两大类:一类要使用 Ctrl 键,而另一类使用 Meta 键。
许多 Emacs 命令是由某个 Ctrl 组合键指定的。.在 Emacs 的符号中,Ctrl 键写成“C-
”,后面则是与第二个按键对应的字符。例如,在 Emacs 符号中,Ctrl-X 组合键写成 C-x
。
要输入一个 Ctrl 组合键,请按住 Ctrl 键,然后按第二个键,然后将两个键同时松开。大多数命令都有一个 Ctrl 组合键,在按下此组合键后要再输入一个单词或第二个 Ctrl 组合键。
例如,可以尝试运行 C-x C-s
命令,将当前的缓冲区保存到磁盘。因为您没有作出更改,所以也无需进行保存,但这个组合键值得一试。现在,请尝试进行以下操作:
这个键盘输入将运行 save-buffer
命令。在迷您缓冲区中,Emacs 会报告“(No changes need to be saved)”。
Emacs 用户在按这些组合键时,在第二个步骤中往往不会松开 Ctrl 键,这样可以省去第三个步骤,加快键入速度。请尝试一下。
Emacs 键盘输入中的第二种主要类型是 Meta 键;在 Emacs 符号中,Meta 按键被表示为 M-
。如果您从未听说过 Meta 键,那是因为目前的大多系统并没有这个键。输入 Meta 组合键,有三种方法:
请尝试输入 M-b
命令,这会把光标向回移动一个单词,有三种操作方法:
您运行的每个 Emacs 命令都是一个函数,由 Emacs Lisp 定义,并有一个函数名。甚至连用向上方向键将光标向上移动一行也是一个函数(previous-line
)。您可以使用 M-x
命令,然后再输入函数名,运行任意一个函数。
请尝试以下操作:
previous-line
并按 Enter。当您这样操作时,光标会向上移动一行。当然,您平常是不会这样运行这个函数的,因为使用向上方向键比这容易多了,不过这是个好例子。函数为数众多,而且由于 Emacs 是可扩展的,您可以编写自己的函数以扩展其功能。
与通过向上方向键运行 previous-line
类似的是,许多函数都分配了快捷键。当您输入这样的一个键或组合键时,将运行相应的函数。您还可以使用 C-p
运行 previous-line
函数。现在,请尝试下面的操作:
作为总结,表 1 列出了您可以在 Emacs 键绑定中使用的主要按键前缀类型。和 Emacs 中的其他东西一样,这些都是可以自定义和重新定义的。
按键前缀 | 描述 |
---|---|
C-c
| 当前编辑模式特有的命令 |
C-x
| 文件和缓冲区命令 |
C-h
| 帮助命令 |
M-x
| 函数名称 |
要退出 Emacs,请键入:
C-x C-c |
这是退出 Emacs 的一般方法。请现在就试着操作一下,然后在 shell 的提示符下键入 emacs
,重新启动 Emacs。