当前位置: 代码迷 >> 综合 >> Emacs 编辑环境,第 7 部分: 让 Emacs 帮助您走出困境
  详细解决方案

Emacs 编辑环境,第 7 部分: 让 Emacs 帮助您走出困境

热度:90   发布时间:2023-12-08 03:32:03.0

 

这是关于学习 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* 缓冲区中各种可能的情况作为提示,并在迷你缓冲区中键入您的选择。

为了进行说明,可以尝试下面的操作:

  1. 键入 M-< C-Spacebar M-> 以便将 *scratch* 缓冲区顶部的注释代码选择作为区域。

  2. 键入 C-x mo Tab ,以便打开一个 *Completions* 缓冲区(其中显示了所有以字母 mo 开头的函数)。

  3. 在 morse-region 上单击 鼠标右键 以选择该函数,这个函数可以将区域中的文本转换为摩尔斯码。

  4. 键入 C-x fi Tab ,以便打开一个 *Completions* 缓冲区(其中显示了所有以字母 fi 开头的函数)。

  5. 键入 C-x o C-x o 以运行 other-window 函数两次,先将光标从迷你缓冲区移动到 *scratch* 缓冲区,然后再将其移动到 *Completions* 缓冲区。

  6. 键入 C-n 足够多次,以使光标位于 fill-region 函数上,然后按 Enter 以选择该函数。

现在您的 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 函数。现在,请尝试下面的操作:

  1. 要生成一个新的详细记录文件,可以执行下面的操作:键入 M-x open-dribble-file Enter mydribbles Enter 

  2. 在 *scratch* 缓冲区中键入下面这些文本:

    Nothing is ever really lost
    
  3. 查看 Lossage:键入 M-x view-lossage Enter 

  4. 退出 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 所示类似。


图 4. Emacs 命令 apropos 清单
 

类似地,apropos 函数(没有与任何键进行绑定)不仅仅列出了适合于给定正则表达式的命令和函数,它还列出了一些 Emacs 变量,在本系列文章前面的教程中曾介绍过这个内容。

尝试获得与 help 有关的各种函数、命令和变量的清单:键入 M-x apropos Enter help Enter 

这个函数将打开一个新的 *Apropos* 缓冲区,其中列出了您在前面的示例中看到的所有函数以及一些其他变量。

了解一个函数所完成的工作

当您知道函数名却不知道它的具体功能时,使用 describe-function 帮助命令(与 C-h f 进行了绑定)是很有用的。它将提示您给出 Emacs 函数的名称,并告诉您该函数所完成的工作。

尝试获得 view-lossage 函数的描述:键入 C-h f view-lossage

当您执行这项操作的时候,Emacs 将打开一个新的 *Help* 缓冲区,用以描述 view-lossage 函数。

(在本系列文章前面的教程中,您曾经学习过一个类似的帮助命令:describe-variable 函数,与 C-h v 进行了绑定,用于描述一个给定变量的内容。)

了解一个函数与什么键盘输入进行了绑定

有两个重要的 Emacs 帮助命令与寻找现有的绑定,以及寻找与给定函数进行绑定的键盘输入(如果有的话)相关。

describe-bindings 函数(与 C-h b 进行了绑定),将打开一个 *Help* 缓冲区,并在其中列出当前所有的绑定。如果您希望知道某个特定函数的绑定,可以使用 where-is 函数,它与 C-h w 进行了绑定。它将在迷你缓冲区中说明您可以在键盘上的哪个位置找到给定的函数。

尝试请求 Emacs 说明 end-of-line 函数所在的位置:键入 C-h w end-of-line

Emacs 函数帮助命令汇总

表 2 列出了一些 Emacs 命令,您可以使用它们获得关于特定函数的帮助,该表中给出了它们所绑定的键盘输入(如果适用的话)、函数名,并描述了它们的用途。


表 2. Emacs 函数帮助命令汇总
键盘输入 函数 描述
apropos 对于一个给定的正则表达式,这个命令将给出 apropos 命令和变量的列表。
C-h a regexp command-apropos 对于给定的正则表达式,这个命令将给出 apropos 命令的列表。
C-h b describe-bindings 这个命令将在一个新的帮助缓冲区窗口中描述当前主要模式的所有有效的键绑定。
C-h ffunction describe-function 这个命令将在一个新的帮助缓冲区窗口中描述给定函数 的用途。
C-h vvariable describe-variable 这个命令将在一个新的帮助缓冲区窗口中描述给定变量 的用途。
C-h wfunction where-is 这个命令将描述某个特定函数所绑定到的键盘输入(如果有的话)。

 

 

4.

浏览 Info 手册:内置的文档说明系统

Emacs 附带了大量的文档说明,包括一份完整的用户手册。该手册是在 Info 中进行编写的,Info 是 GNU 工程的基于文本的超文本文档说明系统(它出现于万维网之前)。尽管 GNU Info 系统还有一个同名的、独立的阅读器应用程序(以及许多第三方阅读器应用程序),但您还是可以从 Emacs 内部读取 Info 的文档。

Info 文档采用了层次的树形结构。Info 文档的基本单元是节点,它大体上相当于 Web 站点中的 HTML 页面;每个节点描述了该 Info 文档的一个主题、或者副题。

节点中包含了文档的文本内容;节点还可以包含一些数量的交叉引用,它们是一些超链接,可用于转到所引用的节点。较新版本的 Emacs 使用颜色对交叉引用进行突出显示;但即使处于文本终端中,您也能够识别出这些交叉引用,因为它们始终以文本 *Note:开头,然后给出它们所引用的节点的名称。

节点还可以以一个菜单 结尾,菜单是交叉引用链接的列表,通常包括当前节点下所有副题的节点。菜单以文本 * Menu: 开头,然后在随后的行中列出交叉引用。

每个 Info 文档都有一个 Top 节点,它是该文档树的起点,可以将其视为纸质书籍的目录。Top 节点包含该文档的主菜单,显示了该文档中的所有主要部分。文档通常还有一个 Index 节点,其中包含该文档中的所有节点。

GNU Info 系统将该系统中存储的所有 Info 文档的目录保存于一个特殊的、主 Top 节点中,该节点称为 Directory 节点。当在系统中安装新的 Info 文档(通常在 /usr/share/info 目录中,但是对于不同的 UNIX 实现,这个安装位置是不同的)时,将它们添加到该节点。

除了 Directory 节点之外,各个节点都包含一个 Up 节点,该节点将您带回到当前节点(副题)所属的主题;文档的 Top 节点的 Up 节点就是主 Directory 节点。各个节点还可以包含其他的节点作为它们的 Next 和 Previous 节点,这些节点在文档树中与当前节点处于相同的层次。

图 5 说明了 GNU Info 系统的节点结构,使用示例 Info 文档显示了 Directory 节点的简化视图。


图 5. 示例 GNU Info 文档层次结构
 

启动 Info

info 函数(与 C-h i 进行了绑定)可以启动 Info,并打开主 Directory 节点,该节点包含到所有安装于该系统中的 Info 文档的链接。

通过键入 C-h i 启动 Info。

这个操作将打开一个新的 *info* 缓冲区,其中包含您系统的主 Info Directory 节点。这是该系统中最高层次的 Top 节点。没有任何节点在它之上,它也没有 Next 或者 Previous 节点;所有可用的节点是包含在它的菜单中的那些节点。

选择一个节点

使用光标键向下移动到 Emacs 节点的菜单条目(它以文本 * Emacs: 开头),并按 Enter 以选择它。

当您进行这项操作的时候,Info 将打开 Emacs 手册的 Top 节点,如图 6 中所示。它包含一个 Up 节点(可以返回您刚刚所处的 Directory 节点)和一个 Next 节点(即该手册中的第一个 chapterM)。它还包含一个 Previous 节点,在这个示例中也是一个 Directory 节点。


图 6. 在 Info 中查看 GNU Emacs 手册
 

进入节点并在节点之间进行移动

可以使用一些不同的方式在一个节点中进行移动。使用 PgUp 和 PgDn 键,可以在一个节点中进行滚动,一次一个屏幕。当您使用这些键的时候,您只是在当前的节点中进行滚动,一旦您到达该节点的顶部或者底部,将会停止在该方向上的滚动。

尝试使用 PgDn 在您所处的节点(显示了 Emacs 手册的主菜单)中进行移动。

您还可以使用空格建和退格键,以便在该节点中向前和向后滚动,并自动地在节点之间移动:如果在节点中向前滚动时碰到菜单,您将立即转到该菜单中引用的第一个节点;如果在节点中向后滚动时碰到该节点的顶部,您立即转到该节点的 Previous 节点的顶部。

当您使用这两个键在各个节点之间进行滚动时,您就可以遍历整个信息文档。然而,您无法使用这个方式转到 Directory 节点中的另一个文档。请注意图 5 中所有菜单条目如何形成平行的链接,您可以在其中进行移动,除了 Directory 节点中的菜单条目以外。在这个示例中,假设您正处于 Gizmo 手册 节点:反复地按空格键,这将带您从该节点到达下面的节点:

  • 使用 gizmo

  • 打开它们

  • 关闭它们

  • 替换 gizmo

尝试按空格键多次,以移动到 Next 节点,然后移动通过该节点以及其他几个节点。

您还可以通过分别按 N 和 P,在任何时候移动到 Next 和 Previous 节点。

要想移动到 Up 节点,可以按 U;要想移动到您在当前节点之前访问的最后一个 节点,可以按 L

要沿着菜单中的特定条目、或者在节点中某处给定的交叉引用进行移动,可以将光标移动到其上,并按 Enter。您还可以使用鼠标,在该链接上单击 右键

尝试使用您刚刚学习的命令,在 Emacs 文档说明中进行移动。

搜索一个主题

您可以使用几种技术在 Info 中进行搜索。其中一种方式是,使用 Info-index 命令,它与 I 键进行了绑定,该命令可以搜索文档的 Index 节点以查找给定的文本。

尝试在 Emacs 手册中搜索 Info

  1. 按 I,以运行 Info-index 命令。

  2. 在 Index topic: 提示符处,键入 info Enter 

当您在进行这项操作的时候,Emacs 将显示介绍如何使用 Info 的手册页面。

通过使用 Emacs isearch-forward 函数,您还可以以增量的方式对当前节点进行搜索,这个函数与 C-s 进行了绑定,在本系列文章前面的部分中对其进行了相应的描述。

在当前节点中向前搜索 Info:键入 C-s info 将光标移动到该文本的下一个实例,然后重复地键入 C-s,以便在该节点的所有 Info实例中循环移动。

要在当前节点和所有其他节点中搜索文本,可以使用 Info-search 函数,它与 S 键进行了绑定。它可以移动到 Info 文档中给定文本的下一个实例。

再次尝试搜索 Info

  1. 键入 M->,以移动到该节点的末尾。

  2. 按 S,以运行 Info-search 函数。

  3. 在迷你缓冲区中,键入 info Enter 

当您执行这项操作的时候,Emacs 将移动到文本 Info 的下一个实例,而这个示例出现在该文档的另一个节点中。

离开 Info

可以使用几种不同的方式离开 Info。

要切换到另一个缓冲区,并将 Info 缓冲区移动到缓冲区列表的后台,可以按 Q

现在尝试这项操作,并观察 Emacs 是如何显示另一个缓冲区的;然后键入 C-x b *info* Enter 以移回到 *info* 缓冲区。

要关闭 *info* 缓冲区,可以键入 C-x k(与您对任何缓冲区所做的操作一样)。*info* 将从您的缓冲区列表中删除;要再次查看它,可以键入 C-h i,以便从头开始。

Emacs Info 命令汇总

表 3 列出了在 Info 模式中可用的各种键盘输入命令,并描述了它们的功能。


表 3. Emacs Info 模式命令汇总
键盘输入 函数 描述
H Info-help 这个命令将在一个新的缓冲区中打开 Info 实践教程。
Q Info-exit 这个命令将移动到您最后访问的缓冲区,并将 *info* 缓冲区放置于缓冲区列表的末尾。
Enter 
或者
B2
这个命令将沿着光标处、或者附近的交叉引用进行移动。
N Info-next 这个命令将移动到当前节点的 Next 节点。
P Info-prev 这个命令将移动到当前节点的 Previous 节点。
U Info-up 这个命令将移动到当前节点的 Up 节点。
D Info-directory 这个命令将移动到 Directory 节点。
L Info-last 这个命令将移动到您最后访问的节点。
T Info-top-node 这个命令将移动到当前文档的 Top 节点。
> Info-final-node 这个命令将移动到在当前文档中指向的最后一个节点。
空格 Info-scroll-up 这个命令将在当前节点中向前移动一个屏幕;如果位于节点的末尾,那么将移动到它的 Next 节点。
Backspace Info-scroll-down 这个命令将在当前节点中向后移动一个屏幕;如果位于节点的开头,那么移动到它的 Previous 节点。
B beginning-of-buffer 这个命令将转到当前节点的开头处。
S Info-search 这个命令将在当前 Info 文档中向前搜索给定的正则表达式。
Tab Info-next-reference 这个命令将光标向前移动到第一个交叉引用处。
M-Tab Info-prev-reference 这个命令将光标向后移动到最后一个交叉引用处。

 

 

 

5.

阅读文档说明文件

除了您在 Info 中阅读的那些 GNU Emacs 手册和其他 GNU 手册之外,GNU Emacs 编辑器还附带了一些特殊的内置文档文件,并且只需要进行一个键盘输入就可以在 Emacs 中获得它们。

阅读相关新的内容

通过运行 view-emacs-news 函数,可以在 Emacs 中阅读 Emacs 最新版本的修订日志,该函数与 C-h n 进行了绑定。

现在尝试运行这项操作,以查看您系统中所安装的 Emacs 版本中的最新更改:键入 C-h n

当您键入它的时候,Emacs 将打开一个名为 NEWS 的新缓冲区。请注意模式行中的两个百分号,这表示该缓冲区是只读的。

了解许可证

GNU 通用公共许可证(General Public License,GNU GPL),这个著名的 copyleft 软件许可证开创了通过网络协作的方式开发开放源代码软件的新方法,通过运行 describe-copying 函数(该函数与 C-h C-c 进行了绑定),您可以阅读其中的内容。

您还可以了解有关 Emacs 的担保(没有任何担保内容),在许可证的底部对其进行了描述。使用 describe-no-warranty 函数,可以直接访问到这些细节信息,该函数与 C-h C-w 进行了绑定。

了解有关 GNU 工程的内容

describe-project 函数(与 C-h C-p 进行了绑定),是由 Richard Stallman(Emacs 的主要作者)所撰写的一篇 7,500 字的文章,描述了他建立 GNU 工程的目的。

GNU Manifesto 是一个著名的文档,它于 GNU 工程的早期在 Internet 上进行了发布;它是 GNU Emacs 手册中最开始的节点的其中之一,通过在 *info* 缓冲区中打开 Emacs 手册,您可以阅读该内容,如选择一个节点部分中所述:

  1. 键入 C-h i,以打开一个 *info* 缓冲区。

  2. 使用 C-n 向下移动到 Emacs 手册,并通过在 * Emacs: 菜单条目上按 Enter 来选择它。

  3. 使用 C-n 以向下移动到 * Manifesto:菜单条目,并按 Enter 以选择它。

describe-distribution 函数(与 C-h C-d 进行了绑定),将告诉您如何直接从 GNU 工程获取 Emacs 的最新副本。

打开 FAQ

GNU Emacs FAQ 是一个 Info 文档,其中包含许多关于 Emacs 的安装和使用的常见问题。通过运行 view-emacs-faq 函数(与 C-h F 进行了绑定),您可以在 Emacs 中阅读它的副本。

Common requests 节点是这个文档中很有价值的一个部分,其中包含一个长清单,列出了人们希望 Emacs 所进行的改进和自定义。

尝试查看这个节点:键入 i req Enter ,您的 Emacs 会话看起来应该与图 7 所示类似。


图 7. 在 Info 中查看 GNU Emacs FAQ 的“Common requests”节点。
 

阅读有关一些含糊不清的问题

GNU 工程提供了一个列表,其中列出了人们在运行 Emacs 时常常碰到的、关于实现方面的含糊不清的问题,以及由用户发现的、解决这些问题的解决方案。通过运行 view-emacs-problems 函数可以获得这个列表,该函数与 C-h P 进行了绑定。

Emacs 帮助文件汇总

表 4 列出了 Emacs 附带的一些文档说明文件,给出了用于查看这些文件的函数和键盘输入,并对它们进行了描述。这些文件通常保存于主 Emacs 目录树的 etc 子目录中,在许多 UNIX 系统中,该目录树位于 /usr/share/emacs/VERSION/etc/ 下,这里的VERSION 是所安装的 Emacs 副本的版本编号。这个目录包含许多与各种实用工具相关的文档说明文件。


表 4. Emacs 文档说明文件汇总
键盘输入 函数 文件名 描述
C-h C-d describe-distribution DISTRIB 关于获得 Emacs 软件最新分发版副本的信息
C-h F view-emacs-faq /usr/share/info/emacs-mainversion/efaq.gz Emacs FAQ
C-h C-c describe-copying COPYING GNU 通用公共许可证 (GNU GPL)
C-h C-w describe-no-warranty COPYING GNU 通用公共许可证 (GNU GPL) 的“NO WARRANTY”部分
C-h n view-emacs-news NEWS 关于 Emacs 当前版本的最新更改的信息
C-h P view-emacs-problems PROBLEMS Emacs 问题文件
C-h C-p describe-project THE-GNU-PROJECT Richard Stallman 所写的、关于 GNU 工程的建立的文章
C-h t help-with-tutorial TUTORIAL 学习 Emacs 基础知识的实践教程

 

 

6.

总结

获得关于帮助的帮助

正如在列出所有以给定前缀开头的键绑定部分中一样,您可以使用 C-h Emacs 帮助键作为后缀,以获得关于 C-h 本身的帮助。

尝试下面的操作:键入 C-h C-h

执行这项操作以运行 Emacs help-for-help 函数,该函数将打开一个新的 *Help* 缓冲区,其中包含所有的 Emacs 帮助命令。与在 Info 节点中一样,您可以分别按空格键退格键,以便在该缓冲区中向前和向后进行滚动,或者您可以使用帮助命令的词首大写字母以运行该命令。按 Q,以退出这个帮助菜单。

Emacs 帮助命令汇总

表 5 列出了所有的 Emacs 帮助命令,并描述了它们的功能。


表 5. Emacs 帮助命令汇总
键盘输入 函数 描述
apropos 对于给定的正则表达式,这个命令将给出 apropos 命令和变量的列表。
open-dribble-file 这个命令将打开指定的文件,并将所有键盘输入的副本保存到该文件。
Tab 这个命令将执行命令完成功能(如果给定了某个命令的部分内容),显示给定命令的所有可能的输入值。
command prefix 或者keystroke C-h 对于给定的命令前缀 或者键盘输入,这个命令将描述所有可能命令和函数。
C-h C-c describe-copying 这个命令可用于查看 GNU 通用公共许可证 (GNU GPL)。
C-h C-d describe-distribution 这个命令可用于查看获得 Emacs 软件最新分发版的副本的信息。
C-h C-p describe-project 这个命令可以查看 Richard Stallman 所撰写的关于 GNU 工程建立的文章。
C-h C-w describe-no-warranty 这个命令可用于查看 GNU GPL 的“NO WARRANTY”部分。
C-h a regexp command-apropos 对于给定的正则表达式,这个命令将给出 apropos 命令的列表。
C-h b describe-bindings 这个命令将在一个新的帮助缓冲区窗口中描述当前主要模式的所有有效键绑定。
C-h c keystroke describe-key-briefly 这个命令将在迷你缓冲区中报告与给定键盘输入 进行了绑定的函数的名称。
C-h F view-emacs-faq 这个命令可用于查看 Emacs FAQ Info 文档。
C-h f function describe-function 这个命令将在一个新的帮助缓冲区窗口中描述给定函数 的用途。
C-h k keystroke describe-key 这个命令将打开一个新的帮助缓冲区窗口,其中描述了与给定键盘输入 进行绑定的函数。
C-h l view-lossage 这个命令将打开一个新的缓冲区,并显示最后键入的 100 个字符。
C-h n view-emacs-news 这个命令可用于查看关于 Emacs 当前版本的最新更改的信息。
C-h P view-emacs-problems 这个命令可用于查看 Emacs 问题文件。
C-h t help-with-tutorial 这个命令将打开一个学习 Emacs 基础知识的实践教程。
C-h v variable describe-variable 这个命令将在一个新的帮助缓冲区窗口中描述给定变量 的用途。
C-h w function where-is 这个命令将描述特定的函数所绑定到的键盘输入(如果有的话)。

总结

Emacs 是一个大型的、复杂的应用程序,并且正如您所看到的,它提供了一个内置的帮助系统以进行匹配。您已经了解了如何使用它,让 Emacs 为您提供各种级别的帮助:识别键盘输入、命令和函数;列出了有意义的、可能的和合适的命令列表;提供 Emacs 手册,以便您可以使用内置文档系统对其进行浏览;向您显示了 Emacs 所提供的其他有用的文件。

在完成了本教程的学习之后,您将了解到,在碰到问题时如何获得自动的帮助,所以当该问题再次出现的时候,就可以请求 Emacs 帮助您走出困境。