这是关于学习 Emacs 的系列教程中的第 7 部分(请参见参考资料)。本系列文章前面的教程带您了解了关于 Emacs 的基础知识;本篇中级水平的实践教程构建于您在前面教程中所学习的基础知识之上,并向那些已经熟练掌握 Emacs 基本控制方法的读者介绍如何在 Emacs 中使用各种内置的帮助特性来获得相关的帮助。
我们之所以将 Emacs 称为自身配备相关说明内容的编辑器,是因为对于您所进行的每个键盘输入、或者每项操作,该应用程序都提供了相应的帮助。在您使用各种描述键盘输入、命令和函数来阅读和浏览众多文档文件,以及完整的参考手册时,您将了解在 Emacs 编辑器中获得即时帮助的所有最佳方式。
本教程向您介绍了如何使用各种方法从 Emacs 中获得帮助。在完成本教程的学习之后,您将掌握如何获得有关各种键盘输入、命令和函数的描述,并阅读和浏览由这个世界著名的开放源代码编辑器所提供的众多文档资料。
决条件
在开始学习本教程之前,您应该先完成本系列文章中前几部分教程的学习。它们为 Emacs 的学习打下了坚实的基础,并说明了您在本教程中将要使用到的许多 Emacs 概念(请参见参考资料)。
在本系列文章第一个教程(“Emacs 编辑环境,第 1 部分:学习 Emacs 的基础知识”,请参见参考资料)的介绍部分中,描述了用于表示键盘输入的特殊 Emacs 符号,在本教程和整个系列文章中都将使用到这些特殊的符号。
尽管本教程面向所有不同级别的 UNIX 专业技术人员,但如果您至少对 UNIX 文件系统具有基本的了解,那么这将是很有帮助的:
文件
权限
文件系统层次结构
系统要求
本教程需要您在基于 UNIX 的系统中有一个用户帐户,且此系统中安装有最新版本的 Emacs。
Emacs 有几个版本;最原始,也是最流行的是 GNU Emacs,它是由 GNU 工程在线发布的(请参阅参考资料)。
您必须拥有较新版本的 GNU Emacs,即版本 20 或更高版本。版本 20 和 21 是最常见的,您也可以获得版本 22 的开发快照。本教程可与这些版本的 Emacs 中的任何一种配合使用。如果您的系统运行的是较早的版本,您应该进行升级。
为了了解您运行的是什么版本的 Emacs,请使用 GNU 风格的 --version
标志:
$ emacs --version GNU Emacs 22.0.91.1 Copyright (C) 2006 Free Software Foundation, Inc. GNU Emacs comes with ABSOLUTELY NO WARRANTY. You may redistribute copies of Emacs under the terms of the GNU General Public License. For more information about these matters, see the file named COPYING. $ |
您还应该将 GNU Emacs 文档安装到您的系统中。虽然在通常情况下,该编辑器附带了该文档,但有时 Info 手册是单独提供的。与系统管理员联系,以确保您已经安装了它。
2.
获得有关键盘输入的帮助
我们之所以将 Emacs 称为自身配备相关说明内容的编辑器,是因为 Emacs 提供了一个帮助键,以便为每个命令和键盘输入提供相关的文档说明,在您输入任何一个 Emacs 命令时,都可以使用帮助键获得相应的帮助信息。Emacs 的帮助键定义为 C-h
。所有的 Emacs 帮助工具都是以这个前缀开头的。
这个部分将描述一些帮助命令,您可以使用它们以获得关于特定键盘输入的帮助信息。
了解给定键盘输入的功能
Emacs 为您可以在其中键入的每个键盘输入提供了相关的文档说明,并且 Emacs 可以采用一些不同的方式向您说明特定键盘输入的功能。
其中的第一种方式、也是最快的一种方式,是使用 describe-key-briefly
函数,该函数允许您输入一个键盘输入,然后在迷你缓冲区中告诉您该键盘输入所执行的函数的名称。它与 C-h c
进行了绑定。
现在,请启动 Emacs,尝试获得某些键盘输入的帮助信息:
C-h c C-x C-c C-h c C-h l C-h c C-h c |
对于某个特定的键盘输入,您还可以获得一些更详细的信息。describe-key
函数(与 C-h k
进行了绑定),可以提供关于一个按键或者键盘输入的更多信息,并在帮助窗口中打开一个新的帮助缓冲区,并对其用途进行描述。尝试针对一个字母按键运行这个操作:
C-h k k |
正如您在新出现的窗口中所看到的,K 键与 self-insert-command
函数进行了绑定,该函数用于在当前缓冲区中的光标处插入给定的键盘字符(在这个示例中是 k
)。
尝试找出 C-x k
命令所执行的工作:
C-h k C-x k |
列出所有以给定前缀开头的键绑定
当您使用通用的帮助前缀 C-h
作为后缀 的时候,它将具有特殊的含义,当您在某些其他控制字符前缀之后键入 C-h
的时候,您将得到一个新的缓冲区,其中列出了该前缀的所有可用键绑定。
例如在 Emacs 中,C-x
键盘输入就是一个经常使用的前缀。您在本系列文章的第 1 部分教程中已经学习过(请参见参考资料),C-x C-c
组合通常用于退出 Emacs:与 save-buffers-kill-emacs
函数一样,它将所有未保存的缓冲区写入到磁盘,然后退出程序。您还曾学习过,C-x C-f
可以运行 find-file
,它在自己的新缓冲区中打开文件系统中的一个文件。但是还有哪些其他的键盘输入也使用 C-x
前缀呢?
使用下面的操作可以找出这些键盘输入:键入 C-x C-h
以获得所有可能的键盘输入的列表。
当您键入上述内容的时候,将打开一个新的 *Help* 缓冲区,其中列出了所有以 C-x
键盘输入开头的、可能的键盘输入。
在本系列文章前面的教程中,您学习了如何在两个窗口之间进行切换,以及如何调整它们的大小,即键入 C-x o C-x 1
以移动到 *Help* 缓冲区窗口,然后调整它的大小以填充 Emacs 框架,这样一来,您的 Emacs 会话看起来应该与图 1 所示类似。
图 1. 获得关于所有可能的 C-x 键盘输入组合的列表
当您仔细阅读完 *Help* 缓冲区中的内容之后,可以键入 C-k Enter
以将其关闭。
了解您可以使用哪些对应的完整命令
Emacs 帮助键不仅仅只是一个前缀:您甚至可以在键入一个命令的过程中使用它。在您希望了解已经键入的部分可能对应于哪些命令的时候,可以键入 C-h
。
当您执行这项操作时,Emacs 将打开一个新的 *Help* 缓冲区。这个缓冲区中显示了您已经键入的内容,以及以该内容开头的命令。
对于 C-x a
键盘输入,尝试获得所有可能的命令的列表。键入 C-x a C-h
,请注意,这时出现了一个新的 *Help* 缓冲区:
Global Bindings Starting With C-x a: key binding --- ------- C-x a C-a add-mode-abbrev C-x a ' expand-abbrev C-x a + add-mode-abbrev C-x a - inverse-add-global-abbrev C-x a e expand-abbrev C-x a g add-global-abbrev C-x a i Prefix Command C-x a l add-mode-abbrev C-x a n expand-jump-to-next-slot C-x a p expand-jump-to-previous-slot C-x a i g inverse-add-global-abbrev C-x a i l inverse-add-mode-abbrev |
了解您可以键入哪些函数
Emacs 迷你缓冲区提供了命令完成 功能,其工作方式类似于 Bash Shell 和许多其他 UNIX Shell 中的等价功能。
如果您在键入一个函数时忘记了它的全名,那么可以使用完成功能以获得相关的提示。当您输入函数、命令或者文件的名称时,可以按 Tab 键,Emacs 将按照最可能的唯一值将其补充完整。
例如,回忆本系列文章最近的一篇教程,Emacs 可以向您显示最近的月亮盈亏。但是,如果您现在尝试键入 M-x phases-of-the-moon
,它将不会起作用:当您告诉 Emacs 执行这个函数的时候,它将报告没有匹配项。您知道 这个函数是以 phases 开头的。但这个完整的命令是什么呢?
为找出这个问题的答案,可以尝试使用完成功能来运行它:
键入 M-x pha Tab
。
当您执行这项操作时,Emacs 将帮您完成这个命令。正确的函数出现在迷你缓冲区中:
M-x phases-of-moon |
还有任何其他以这个名称开头的函数吗?可以再次按 Tab 以进行观察,并看看迷你缓冲区报告了什么信息:
M-x phases-of-moon [Sole completion] |
如果还有更多以文本 phases-of-moon 开头的选项,那么 Emacs 将向您显示这些内容。
按 Enter 以运行唯一的完成项。
现在,尝试列出所有 可用的函数:键入 M-x Tab
。您可以重复地按 Tab,以便在列表中向下滚动,然后在完成该操作的时候,键入C-g
以销毁完成项列表缓冲区,并取消您的命令。
当存在多个可能的完成项,并且 Emacs 在一个列出所有可能情况的新窗口中显示 *Completions* 缓冲区的时候,您可以在这些完成项中进行滚动,以便采用一些不同的方式选择其中的一项:
使用 鼠标右键
单击一个完成项,以选择该项。
移动到 *Completions* 缓冲区(如通过键入 C-x o
),然后按 Enter,以选择离光标最近的完成项。
使用 *Completions* 缓冲区中各种可能的情况作为提示,并在迷你缓冲区中键入您的选择。
为了进行说明,可以尝试下面的操作:
现在您的 Emacs 会话应该与图 2 中所示类似。
图 2. 使用完成功能对区域运行一项命令
查看您已经键入的内容
您可以查看并记录您在 Emacs 中键入的所有键盘输入的文字流,这对于调试来说是很有价值的。有一些不同的方式可用于完成这项任务。
查看 Lossage
您在 Emacs 中最后键入的 100 个键盘输入称为 Lossage。要查看这些内容,可以运行 view-lossage
函数。它与 C-h l
键盘输入进行了绑定。
当您运行这个命令的时候,它将打开一个新的 *Help* 缓冲区,并在该缓冲区中显示当前键盘的最后 100 个键盘输入。
尝试下面的操作:键入 C-h l
。
如果您已经执行了本教程中的相关示例,那么您的 Emacs 会话应该与图 3 中所示类似。
图 3. 在 Emacs 中查看 Lossage
有一个重要的内容需要说明,Emacs 将存储您所键入的实际字符,而不仅仅只是您所运行的命令的名称。为了说明其中的不同之处,请退出 Emacs,然后再次启动 Emacs,并立即查看 Lossage:键入 M-x view-lossage Enter
。
当您完成这一操作的时候,您应该在新的 *Help* 窗口中看到这个 Lossage:
M-x v i e w - l o s s a g e <return> |
退出 Emacs,然后再次启动它,并查看 Lossage(通过两次使用完成功能,以便完成该命令):键入 M-x view Tab l TabEnter
。
当您进行这项操作时,您所运行的命令和前面一样,但 Lossage 看起来却是不同的:
M-x v i e w <tab> l <tab> <return> |
生成一个详细记录文件
如果您希望查看多于最后 100 个键盘输入的内容,那么您可以首先打开详细记录文件;当您进行这项操作时,Emacs 将详细记录 您键入的所有内容的一个副本,每次向该文件中记录一个键盘输入,直到您退出为止。
要生成一个详细记录文件,可以运行 open-dribble-file
函数。现在,请尝试下面的操作:
要生成一个新的详细记录文件,可以执行下面的操作:键入 M-x open-dribble-file Enter mydribbles Enter
。
在 *scratch* 缓冲区中键入下面这些文本:
Nothing is ever really lost |
查看 Lossage:键入 M-x view-lossage Enter
。
退出 Emacs:键入 C-x C-c
。
在您完成这项操作之后,可以查看一下您的详细记录文件的内容。它应该包含您刚刚键入的所有字符,包括您用于指定 Emacs 命令的控制字符。
Emacs 键盘输入帮助命令汇总
表 1 列出了可用于获得键盘输入帮助的各种 Emacs 命令,给出了它们的函数名(如果适用的话),并描述了它们的用途。
表 1. Emacs 键盘输入帮
键盘输入 | 函数 | 描述 |
---|---|---|
Tab | 如果给出了某个命令的一部分,那么这个命令将执行命令完成功能,显示给定命令的所有可能的输入值。 | |
command prefix 或者keystroke C-h | 这个命令用于描述给定命令前缀 或者键盘输入 的所有可能的命令和函数。 | |
C-h c keystroke | describe-key-briefly | 这个命令将在迷你缓冲区中报告与给定键盘输入 进行了绑定的函数名称。 |
C-h k keystroke | describe-key | 这个命令将打开新的帮助缓冲区窗口,其中描述了与给定键盘输入 进行了绑定的函数。 |
C-h l | view-lossage | 这个命令将打开新的缓冲区,并显示最后键入的 100 个字符。 |
open-dribble-file | 这个命令将打开指定的文件,并将所有键盘输入的副本记录到该文件。 |
3.
获得关于 Emacs 命令和函数的帮助
正如 Emacs 为特定的键盘输入提供了相关帮助一样,您还可以获得关于特定命令和函数的帮助。这部分内容将描述这些命令。
command-apropos
命令可以告诉您哪些 Emacs 命令适合于给定的关键字。您可以通过键入 help 前缀和 C 键,给出这个函数。
当您知道希望完成什么操作(如保存一个文件、或者使用某些字体),但是却不知道该命令的名称、或者甚至不知道哪些命令适合于给定的概念时,就可以使用这个命令。紧跟在这个命令之后,给出一个常规单词、或者一个正则表达式,它将返回一个新的 *Apropos* 缓冲区,其中列出了名称中包含该单词、或者正则表达式的所有命令。
尝试获得与 help 相关的命令列表:键入 C-h a help
,并查看 *Apropos* 缓冲区中出现的内容。当您键入 C-x o C-x 1
以使用该缓冲区填充框架的时候,您的 Emacs 会话看起来应该与图 4 所示类似。
因篇幅问题不能全部显示,请点此查看更多更全内容