欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Emacs Tutorial 快速指南

程序员文章站 2022-06-06 21:26:37
...


Emacs 快速指南

Emacs 键盘命令通常包含 CONTROL 键(有时候以 CTRL 或 CTL 来标示)和META 键(有时候用 EDIT 或 ALT 来标示)。为了避免每次都要写出全名,我们约定使用下述缩写:

C - chr 表示当输入字符 chr 时按住 CONTROL 键。

      因此 C-f 就表示:按住 CONTROL 键再输入 f。

A - chr 表示当输入字符 chr 时按住 META(或 EDIT 或 ALT)键。

      如果你的键盘上没有 META 、EDIT 或 ALT 键,用下述方法也等效:

      先按一下 ESC 键然后放开,再输入 <chr>。我们用 <ESC> 来表示ESC 键。

重要提示
退出 Emacs,请用 C-x C-c(两个连续的组合键)。
要退出一个正在运行中的命令,请用 C-g。

以下组合键在翻页浏览时相当有用:

组合键 功能
C-v 向前移动一屏
A-v 向后移动一屏
C-l 光标置于屏幕*

如果你的键盘上有 PageUp 和 PageDn,也可以用这两个键来滚屏。不过使用C-vA-v 的效率要更高一些。


基础操作

基本的光标控制(BASIC CURSOR CONTROL)

整屏的移动很有用,但是如何在文字中精确定位呢?

有几种方式可以选择。用方向键当然可以,不过更有效率的方法是保持双手位于主键盘区,然后使用 C-pC-bC-fC-n这四个命令。它们的功能和方向键是一样的,如下图所示:

                         上一行 C-p

                              :

                              :

        向左移 C-b .... 目前光标位置 .... 向右移 C-f

                              :

                              :

                         下一行 C-n

P 代表 previous(上一行),N 代表 next(下一行),B 代表 backward(回退),而 F 则代表 forward(前进)。这些组合键今后将与你形影不离。如果你嫌一个字符一个字符地挪光标太慢,你还可以一个词一个词地跳。

A-f可以将光标往前移动一个词,而 A-b 则是往后移。
【这里的“词”指英文单词,对中文来说,则是指移动到下一个标点符号。】

想一想为什么重复的 C-a 命令会没有作用,而重复的 A-a 命令则会让光标不断地回退到上一个句子。虽然这个类比规律并不严格,但是很自然。光标停留的位置也可以称作“点位”(point)。或者干脆说,光标指示出了屏幕上 点位 在文本中的位置。

这里对简单的光标移动命令做一个总结,其中也包括了整词和整句的移动:

命令 功能
C-f 向右移动一个字符
C-b 向左移动一个字符
A - f 向右移动一个词【或标点符号】
A - b 向左移动一个词【或标点符号】
C-n 移动到下一行
C-p 移动到上一行
C-a 移动到行首
C-e 移动到行尾
A - a 移动到句首
A - e 移动到句尾

A - < 可以将光标移动到所有文字的最开头;

A - > 可以将光标移动到所有文字的最末尾。

如果你的键盘上有方向键的话,也可以用它们来移动光标。
不过我们有三个理由推荐你学习 C - bC - fC - n 、和 C - p

  • 它们在任何键盘上都能用。

  • 当你熟练使用 Emacs 之后,你会发现用这些组合键比用方向键要快得多,因为你的手不需要离开打字区。

  • 一旦你习惯了使用这些组合键,你也可以很容易地适应其它更高级的光标移动命令。

大部分的 Emacs 命令接受数字参数,并且对于多数命令而言,这些数字参数的作用是指定命令的重复次数

为一个命令指定数字参数(也就是重复次数)的方法是:

  • 先输入 C-u,然后输入数字作为参数,最后再输入命令。

如果你有META (或EDIT 或 ALT)键,那么还有另一种办法:

  • 按住 META 键不放,然后输入数字。不过我们还是建议你用 C - u,因为它在任何终端机上都能用。

这种数字参数也称为前缀参数,意思是说这个参数是先于使用它的命令而输入的。

举例来说, C-u 8 C-f 会向前移动 8 个字符。

C-n 或者 C-p 指定一个数字参数,这样你可以只用一个命令就把光标移动到本行的附近。

虽然大部分命令把数字参数解释为其重复次数,但是也有些命令例外,它们将数字参数另做它用。

比如有些命令(我们目前还没学到)仅仅将前缀参数作为一个标志――只要给出有一个前缀参数,不管其值为何,它都会改变命令的功能。而 C - vA - v 则属于另一种类型的例外。

当给定一个参数时,它们将滚动你指定的“行数”,而不是“屏数”


插入与删除(INSERTING AND DELETING)

插入文字很简单,直接敲键盘就可以了。普通的字符,比如 A、7、* 等等,会随着你的输入而插入。要插入一个换行符,输入 Return(这个键在键盘上有时会被标注成“Enter”)。

你可以用 DEL 来删除光标左边的字符,这个键通常被标注为“Backspace”跟你在 Emacs 之外的用法应该一样,删除最后一个输入的字符。你的键盘上可能有另外一个键,标注着 Delete,但那个不是我们所说的 DEL

现在你已经掌握了最基本的的文本插入和修改功能,其实删除还可以“以词为单位”进行,下面是一个关于“删除”操作的小结:

命令 功能
DEL 删除光标前的一个字符
C-d 删除光标后的一个字符
A - DEL 移除光标前的一个词
A - d 移除光标后的一个词
C-k 移除从光标到“行尾”间的字符
A - k 移除从光标到“句尾”间的字符

【可能你已经注意到了“删除(delete)”和“移除(kill)”的用词区别,后文会有详细说明。】

注意: DEL 和 C-d还有A- DEL 和 A-d是根据前述惯例从 C-f 和 A-f 衍生出来的

(其实DEL不是控制字符,我们先忽略这一点)。

C-kA-k 的关系在某种程度上与 C-eA-e 一样――如果把“一行”和“一句”作一个类比的话。

你也可以用一种通用的办法来移除缓冲区里的任何一部分:

  • 首先把光标移动到你想要移除的区域的一端,然后按 C - SPC(SPC指空格)【注意,C-SPC 往往被中文用户设定成输入法热键,如果这样,C - SPC就被系统拦截而无法传递给 Emacs 了,在这种情况下可以使用C - @。】,

  • 然后将光标移动到你准备移除的文字的另一端。这个时候, Emacs 会高亮光标和你按下 C-SPC 之间的文本。最后,按下 C-w 。这样就可以把位于这两点之间的所有文字移除了

    注意,移除和删除的不同在于被移除的东西可以被重新插入,
    而被删除的就不能使用相同的方法重新插入了(通过撤销删除命令来做到)。
    

实际上,移除掉的东西虽然看起来“消失”了,但实际上被 Emacs 记录了下来,因此还可以找回来;而删除掉的东西虽然也可能还在内存里,但是已经被 Emacs“抛弃”了,所以就找不回来了

  • 重新插入被移除的文字称为“召回(yank)”。一般而言,那些可能消除很多文字的命令会把消除掉的文字记录下来(它们被设定成了“可召回”),

  • 而那些只消除一个字符或者只消除空白的命令就不会记录被消除的内容(自然你也就无法召回了)。

    注意,单独的 C-k 会把一行的内容移除,而第二个 C-k 则会移除换行符,
    并使其后所有的行都向上移动。
    

C-k 处理数字参数的方式很特别,它会把参数指定的那么多行连同其后的换行符一起移除,而不仅仅是重复 C-k 而已。

比如 C-u 2 C-k 会把两行以及它们的换行符移除;
而如果只是输入 C-k 两次显然不是这个结果。重新插入被移除的文字恢复的动作称为“召回(yanking)”。(就好像把别人从你身边移走的东西又猛力地拉回来。)你可以在你删除文字的地方召回,也可以在别的地方召回,还可以多次召回同样的文字以得到它的多个拷贝。

很多其它的编辑器把移除和召回叫做“剪切”和“粘贴” (详情可见 Emacs 使用手册里的术语表)。

召回的命令是 C-y。它会在光标所在处插入你最后移除的文字。

如果你一次连按了好几下C-k,那么所有被移除的行会被存储在一起,只要一个C-y 就可以把它们都召回。

  • C-y 可以召回最近一次移除的内容.

那如何召回前几次移除的内容呢?它们当然没有丢,你可以用 A-y 来召回它们。在用 C-y 召回最近移除的文字之后,紧接着再按 A-y 就可以召回再前一次被移除的内容,再按一次 A-y 又可以召回再上一次的……连续使用 A-y 直到找到你想要召回的东西,然后什么也不用做,继续编辑就行了。

如果连续按 A-y 很多次,你可能会回到起始点,也就是最近移除的文字。【看得出这实际上是一个环。】


撤销(UNDO)

如果你修改了一段文字,又觉得改得不好,可以用 undo 命令进行撤销:C-/。通常 C-/ 会消除一个命令所造成的所有改变;如果你在一行中连续多次地使用C-/,你会把以前的命令也依次撤销。

但是有两个例外:

1) 没有改变文字的命令不算(包括光标移动命令和滚动命令)

2) 从键盘输入的字符以组为单位――每组最多 20 个字符――来进行处理。

(这是为了减少你在撤销“插入文字”动作时需要输入 C-/ 的次数)

C-_ 也是撤销命令;它的作用跟 C-/ 一样,但是它比较容易多次输入。

在某些终端上,输入 C-/ 实际上向 Emacs 发送的是 C-_ 。另外, C-x uC-/ 完全一样,但是按起来有些麻烦。

 数字参数对于 C-/ 、 C-_ 和 C-x u 的意义是执行撤销的重复次数。

初步熟悉Emacs

窗格(WINDOWS)

Emacs 可以有多个“窗格”,每个窗格显示不同的文字。后面会介绍怎么对付多个窗格,现在我们先学会如何关掉多余的窗格。其实也很简单:

C-x  1 只保留一个窗格(也就是关掉其它所有窗格)。

有一系列命令是以 CONTROL-x 开始的,这些命令许多都跟窗格、文件、缓冲区会在后文详细介绍。诸如此类的东西有关,其中有些命令可能包含了 2 个、3 个或者 4 个字符。

文件(FILE)

想保存工作成果就要记得存盘,否则一旦退出 Emacs 你编辑的文字就会丢失。要存盘,就要在编辑前“寻找”到一个存盘文件。(这个过程通常也被称为“访问”文件。)

找到一个文件意味着你可以在 Emacs 里查看这个文件的内容。从许多角度看,这就等于你在直接编辑这个文件,只是你所做的修改只有在“存盘”的时候才会被写入文件。也正因为如此,你可以丢弃一个写到一半的文件而不必把这个残缺文件也保存到计算机上。在存盘的时候,Emacs 会把存盘前的文件重命名保存,以防你改完之后又想反悔。

在屏幕的下方,你能够看到头部有短线“-”的一行,行首通常是“-:--- TUTORIAL.cn”
的文字,

这些文字代表了你当前正在访问的文件。

比如你现在正在访问的文件是对 Emacs 快速指南的一份临时拷贝,叫做“TUTORIAL.cn”。

  • 每当Emacs 寻找到一个文件,文件名就会出现在这个位置。

寻找文件的命令有一个特点,那就是你必须给出文件名。我们称这个命令“读入了一个参数”(在这里,这个参数显然就是文件名)。在你输入这条命令之后:

    C-x C-f   寻找一个文件

Emacs 会提示你输入文件名。你输入的文件名会出现在屏幕最底端的一行,这一行被称为小缓冲(minibuffer)

  • 在小缓冲里你可以使用通常的 Emacs 编辑命令来编辑文件名。

  • 在小缓冲里输入文件名(其实输入其它东西也一样)时可以用 C-g 取消。用 Return结束文件名的输入。

  • 之后,小缓冲会消失,C-x C-f 将会去寻找你指定的文件。

  • 小缓冲在 C-x C-f 命令结束之后也会消失。文件被显示在了屏幕上,你可以开始编辑了。存盘用这条命令:

    C-x C-s   储存这个文件
    

这条命令把 Emacs 中的文字存储到文件中。第一次存盘的时候 Emacs 会将原文件重命名以备份。

重命名的规则通常是在原文件名之后添加一个“~”字符。

对许多人来说,这是一个烦人的特性,关掉文件备份可以用如下命令: A-x customize-variable Return make-backup-filesReturn。
存盘结束后,Emacs 会显示写入文件的文件名。你最好养成经常存盘的习惯,这可以减少系统崩溃和死机给你带来的损失(也可参见下面的“自动保存”一节)。

你不但可以寻找一个已有的文件来查看或编辑,还可以寻找一个不存在的文件。
实际上这正是 Emacs 创建新文件的方法:

  • 找到不存在的新文件。事实上,只有在存盘的时候,Emacs 才会真正创建这个文件。
  • 而在这之后的一切就跟编辑一个已有文件没有区别了。

缓冲区(BUFFER)

你可以用 C-x C-f 找到并打开第二个文件,但第一个文件仍然在 Emacs 中。要切回第一个文件,

  • 一种办法是再用一次 C-x C-f。这样,你就可以在 Emacs 中同时打开多个文件。Emacs 把每个编辑中的文件都放在一个称为缓冲区(buffer) 的地方。每寻找到一个文件,Emacs 就在其内部开辟一个缓冲区。用下面的命令可以列出当前所有的缓冲区:

    C-x C-b   列出缓冲区
    

缓冲区未必有对应文件。显示缓冲区列表的缓冲区叫做Buffer List。这个 TUTORIAL.cn 缓冲区起初没有对应的文件,但是现在有了,因为在前一节你输入了 C-x C-s , 将它保存成了一个文件。Messages缓冲区也没有对应文件,这个缓冲区里存放的都是在 Emacs 底部出现的消息

如果你对某个文件做了些修改,然后切换到另一个文件,这个动作并不会帮你把前一个文件存盘。
对第一个文件的修改仍然仅存在于 Emacs 中,也就是在它对应的缓冲区里。

并且,对第二个文件的修改也不会影响到第一个文件。这很有用,但也意味着你需要一个简便的办法来保存第一个文件的缓冲区。
先切换回那个缓冲区,再用 C-x C-s 存盘,太麻烦了。你需要一个更简便的方法,而 Emacs 已经为你准备好了:

C-x s   保存多个缓冲区

C-x s 会找出所有已被修改但尚未存盘的缓冲区,然后向你逐个询问:是否需要存盘?


自动保存(AUTO SAVE)

如果你已经修改了一个文件,但是还没来得及存盘你的计算机就罢工了,那么你所做的修改就很可能会丢失。为了避免这样的不幸发生,Emacs 会定期将正在编辑的文件写入一个“自动保存”文件中。

自动保存文件的文件名的头尾各有一个“#”字符,

比如你正在编辑的文件叫 hello.c ,那么它的自动保存文件就叫  #hello.c# 。
这个文件会在正常存盘之后被 Emacs 删除。

所以,假如不幸真的发生了,你大可以从容地打开原来的文件(注意不是自动保存文件)然后输入 A-x recover file Return 来恢复你的自动保存文件。在提示确认的时候,输入 yesReturn。


Emacs 功能区域

回显区(ECHO AREA)

如果 Emacs 发现你输入多字符命令的节奏很慢,它会在窗格的下方称为“回显区”的地方给你提示。

回显区位于屏幕的最下面一行。

状态栏(MODE LINE)

位于回显区正上方的一行被称为“状态栏”。状态栏上会显示一些信息,

比如:-????*- TUTORIAL.cn 63% L749 (Fundamental)

状态栏显示了 Emacs 的状态和你正在编辑的文字的一些信息。

你应该知道文件名的意思吧?就是你找到的那个文件嘛。

-NN%-- 显示的是光标在全文中的位置。

  • 如果位于文件的开头,那么就显示 --Top-- 而不是 --00%–;

  • 如果位于文件的末尾,就显示 --Bot–。

  • 如果文件很小,一屏就足以显示全部内容,那么状态栏会显示 --All–。

“L” 和其后的数字给出了光标所在行的行号。
最开头的星号(*)表示你已经对文字做过改动。
刚刚打开的文件肯定没有被改动过,所以状态栏上显示的不是星号而是短线(-)


Emacs 编辑模式

状态栏上小括号里的内容告诉你当前正在使用的编辑模式。
  • 缺省的模式是Fundamental,就是你现在正在使用的这个。它是一种“主模式”。 Emacs 的主模式林林总总。

  • 有用来编辑程序代码的――比如 Lisp 模式;

  • 也有用来编辑各种自然语言文本的――比如 Text 模式。

  • 任何情况下只能应用一个主模式,其名称会显示在状态栏上,也就是现在显示“Fundamental”的地方。

主模式通常会改变一些命令的行为。

比方说,不管编辑什么语言的程序代码,你都可以用一个相同的命令来添加注释。

但是在不同的语言中注释的语法往往是不同的,这时不同的主模式就会用各自不同的语法规则来添加注释。

主模式都是可以用 A-x 启动的扩展命令A-x fundamental-mode 就可以切换到 Fundamental模式。

编辑自然语言文本――比如现在――应该用 Text 模式。

输入 A-x text-modeReturn。

别担心,什么都没变。不过细心一些可以发现,A-fA-b 现在把单引号(’)视为词的一部分了。而在先前的 Fundamental 模式中,A-fA-b 都将单引号视为分隔单词的符号。主模式通常都会搞一些类似的小动作,因为很多命令其实完成的是“相同的工作”,只是在不同环境下会有不同的工作方式而已。【所谓“求同存异”,在Emacs 里得到了很好的体现】

C-h m 可以查看当前主模式的文档。

把光标移动到下一行。
用 C-l C-l 将本行带到屏幕的最上方。
输入 C-h m,看看 Text 模式与 Fundamental 模式有哪些不同。
输入 C-x 1 关掉文档窗格。

主模式之所以称之为“主(major)”模式,是因为同时还有“辅模式”(minormode)存在。

辅模式并不能替代主模式,而是提供一些辅助的功能。每个辅模式都可以独立地开启和关闭,跟其它辅模式无关,跟主模式也无关。所以你可以不使用辅模式,也可以只使用一个或同时使用多个辅模式。

  • 有一个叫做自动折行(Auto Fill)的辅模式很有用,特别是在编辑自然语言文本的时候。启用自动折行后,Emacs 会在你打字超出一行边界时自动替你换行。用 A-x auto-fill-mode Return 启动自动折行模式
  • 再用一次这条命令,自动折行模式会被关闭。也就是说,如果自动折行模式没有被开启,这个命令会开启它;如果已经开启了,这个命令会关闭它。所以我们说,这个命令可以用来开关toggle模式。

输入 C-x f 并传递参数 20: C-u 2 0 C-x f。然后输入一些文字,观察 Emacs 的自动折行动作 最后再用 C-x f 将边界设回 70。

如果你在段落的中间做了一些修改,那么自动折行模式不会替你把整个段落重新折行,你需要用 A-q 手动折行。注意,光标必须位于你需要折行的那一段里


Emacs 进阶操作

搜索(SEARCHING)

Emacs 可以向前或向后搜索字符串(“字符串”指的是一组连续的字符)。
搜索命令是一个移动光标的命令:搜索成功后,光标会停留在搜索目标出现的地方。

Emacs 的搜索命令是“渐进的(incremental)”

意思是搜索与输入同时进行:你在键盘上一字一句地输入搜索词的过程中,Emacs 就已经开始替你搜索了。

C-s 是向前搜索,C-r 是向后搜索。不过手别这么快!别着急试。

在按下 C-s 之后,回显区里会有**“I-search”**字样出现,表明目前 Emacs 正处于“渐进搜索”状态,并等待你输入搜索字串。按 可以结束搜索。

输入 C-s 开始一个搜索。注意敲慢一点,一次输入一个字符。慢慢输入“cursor”这个词,每敲一个字都停顿一下并观察光标。现在你应该已曾经找到“cursor”这个词了。
再按一次 C-s,搜索下一个“cursor”出现的位置。
现在按四次 DEL,看看光标是如何移动的。
敲 Return结束搜索。

看仔细了么?在一次渐进式搜索中,Emacs 会尝试跳到搜索目标出现的位置。要跳到下一个命中位置,就再按一次 C-s。如果找不到目标,Emacs 会发出“哔”的一声,告诉你搜索失败。在整个过程中,都可以用 C-g 来终止搜索。【你会发现 C-g 会让光标回到搜索开始的位置,而 Return则让光标留在搜索结果上,这是很有用的功能。】

在渐进式搜索中,按 DEL 会“撤回”到最近一次搜索的命中位置。如果之前没有一个命中, DEL 会抹去搜索字符串中的最后一个字符。比如你已经输入了“c”,光标就停在“c”第一次出现的位置,再输入“u”,光标停在“cu”第一次出现的位置,这时再按 DEL ,“u”就从搜索字串中消失了,然后光标会回到“c”第一次出现的位置。

另外,如果你在搜索的时候输入了 control 或者 meta 组合键的话,搜索可能会结束。

(也有例外,比如 C-sC-r 这些用于搜索的命令。)

前面说的都是“向下”搜索,如果想“向上”搜索,可以用 C-r。C-r 与 C-s相比除了搜索方向相反之外,其余的操作都一样。


多窗格(MULTIPLE WINDOWS)

Emacs 的迷人之处很多,能够在屏幕上同时显示多个窗格就是其中之一。

移动光标到这一行,然后输入 C-l C-l
现在输入 C-x 2,它会将屏幕划分成两个窗格。这两个窗格里显示的都是本篇快速指南,而光标则停留在上方的窗格里。
试试用 C-A-v 滚动下方的窗格。(如果你并没有 META 键,用 ESC C-v 也可以。)

【向上滚动是 C-M-S-v,也就是同时按住 CONTROL、META 和 SHIFT 再按 v】

 连续使用 C-x  o 可以遍历所有窗格。“被选中的窗格”,
 也就是绝大多数的编辑操作所发生的地方,是在你不打字时闪烁光标的那个窗格。

其他的窗格有它们自己的光标位置; 如果你在图形界面下运行 Emacs ,这些光标是镂空的长方形。当你在一个窗格中编辑,但用另一个窗格作为参考的时候,C - A - v是很有用的命令。无需离开被选中的窗格,你就可以用 C - A - v 命令滚动另外一个窗格中的文字。【比如翻译和校对就很适合用这种方式进行。】

C - A - v 是一个 CONTROL-META 组合键。如果你有 META (或 Alt)键的话,可以同时按住CONTROL 和 META 键并输入 v。CONTROL 和 META 键先按哪个都可以,因为它们只是用来“修饰(modify)”你输入的字符的。

如果你并没有 META 键,你也可以用 ESC 来代替,不过这样的话就要注意按键顺序了:你必须先输入 ESC ,然后再输入 CONTROL-v。CONTROL-ESC v 是没用的,因为 ESC 本身是一个字符键,而不是一个修饰键(modifier key)。

(如果你在下方的窗格里输入 C-x 1,那么就会关掉上方的窗格。你可以把这个命令看成是“只保留一个窗格”――就是我们正在编辑的这个。)


多窗口(MULTIPLE FRAMES)

Emacs 可以创建多个窗口。

窗口由许多窗格以及菜单、滚动条、回显区等组成。
在图形界面下,多个窗口可以同时显示出来。
在文本终端中,只能同时显示一个窗口。

输入 A-x make-frame Return,可以看到一个新的窗口出现在了你的屏幕上。

你可以在新的窗口里做最初的窗口里可以做的任何事情。第一个窗口没有什么特别的。

输入 A-x delete-frame Return,这个命令将会关闭选中的窗口。

你也可以通过图形系统来关闭某个窗口(通常是在窗口上面的某个角落里的一个“X”按钮)。如果你关闭的是 Emacs 进程的最后一个窗口, Emacs 将会退出。


递归编辑(RECURSIVE EDITING LEVELS)

有时候你会进入所谓的“递归编辑”。

递归编辑状态由位于状态栏的方括号所指示,其中包含了用小括号来指明的模式名称

比如说,你有时可能会看到[(Fundamental)],而不是 (Fundamental)。

【比如在用 A-% 进行交互式替换的时候你又用了 C-s 进行搜索,这时替换模式并没有结束,但你又进入了搜索模式,这就是所谓的递归编辑。】

离开递归编辑可以用 ESC ESC ESC。这是一个最通用的“离开”命令,
你甚至可以使用它来关掉多余的窗格,
或者离开小缓冲。

你不能用 C-g 退出递归编辑,因为 C-g 的作用是取消本层递归编辑之内的命令和其参数(arguments)。


Emacs 应急措施

如果 EMACS 失去响应(IF EMACS STOPS RESPONDING)

如果 Emacs 对你的命令失去响应,

你可以用 C-g 来安全地终止这条命令。

C-g也可以终止一条执行过久的命令。

C-g 还可以取消数字参数和只输入到一半的命令。

被禁用的命令(DISABLED COMMANDS)

有一些 Emacs 命令被“禁用”了,以避免初学者在不了解其确切功能的情况下误用而造成麻烦。

如果你用到了一个被禁用的命令,Emacs 会显示一个提示消息,告诉你这个命令到底是干什么的,询问你是否要继续,并在得到你的肯定之后再执行这命令。

如果你真的想用这条命令,在 Emacs 询问你的时候应该按空格。一般来说,如果你不想用,就按“n”

命令集扩展(EXTENDING THE COMMAND SET)

Emacs 的命令就像天上的星星,数也数不清。把它们都对应到 CONTROL 和 META组合键上显然是不可能的。Emacs 用扩展(eXtend)命令来解决这个问题,扩展命令有两种风格:

 C-x     字符扩展。  C-x 之后输入另一个字符或者组合键。

 A-x     命令名扩展。A-x 之后输入一个命令名。

很多扩展命令都相当有用,虽然与你已经学过的命令比起来,他们可能不那么常用。我们早已经见过一些扩展命令了,比如用 C-x C-f 寻找文件和用 C-x C-s保存文件;退出 Emacs 用的 C-x C-c 也是扩展命令。(不用担心退出 Emacs 会给你带来什么损失,Emacs 会在退出之前提醒你存盘的。)

如果你使用图形界面,你不需要任何特殊的命令来切换 Emacs 和其他应用程序。你可以使用鼠标或者窗口管理器的命令。然而,如果你使用只能同时显示一个应用程序的文本终端,你需要挂起 Emacs ,以切换到其他的应用程序。C-z 可以暂时离开 Emacs――当然,你还可以再回来。在允许 C-z 的系统中,C-z会把 Emacs“挂起”,也就是说,它会回到 shell但不杀死 Emacs 的进程

在常用的 shell 中,通常可以用“fg”或者“%emacs”命令再次回到 Emacs 中。

你最好在打算退出登陆的时候再用 C-x C-c。在把 Emacs 当做一个临时的编辑器的时候(比如被一个邮件处理程序调用),也可以用 C-x C-c 退出。

C-x 的扩展命令有很多,下面列出的是你已经学过的:

组合键扩展 功能
C-x C-f 寻找文件。
C-x C-s 保存文件。
C-x C-b 列出缓冲区。
C-x C-c 离开 Emacs。
C-x 1 关掉其它所有窗格,只保留一个。
C-x u 撤销。

用命令名扩展的命令通常并不常用,或只用在部分模式下。

比如replace-string(字符串替换)这个命令,它会把一个字符串替换成另一个。

在输入 A-x 之后,Emacs 会在屏幕底端向你询问并等待你输入命令名。

如果你想输入“replace-string”,其实只需要敲repl sTAB 就行了,Emacs 会帮你自动补齐。输入完之后按 提交。

字符串替换命令需要两个参数――被替换的字符串和用来替换它的字符串。每个参数的输入都以换行符来结束。


获得更多帮助(GETTING MORE HELP)

本快速指南的目的仅仅是帮助你在 Emacs 的海洋里下水,不至于束手无策望洋兴叹。有关 Emacs 的话题可谓汗牛充栋,这里自然是难尽万一。不过 Emacs 很理解你求知若渴的心情,因为它提供的强大功能实在是太多了。
为此,Emacs 提供了一些命令来查看 Emacs 的命令文档,这些命令都以 CONTROL-h 开头,这个字符也因此被称为“帮助(Help)字符”。

  • 要使用帮助(Help)功能,请先输入 C-h,然后再输入一个字符以说明你需要什么帮助。

  • 如果你连自己到底需要什么帮助都不知道,那么就输入 C-h ?,Emacs会告诉你它能提供了哪些帮助。

  • 如果你按了 C-h 又想反悔,可以用 C-g 取消。

    如果你按 C-h 之后没有任何帮助信息显示出来,
    那么试试 F1 键或者 A-x help  Return 。
    

最基本的帮助功能是 C-h c

输入 C-h c 之后再输入一个组合键,Emacs 会给出这个命令的简要说明。

输入 C-h c C-p。

显示的消息应该会是这样:

    C-p runs the command previous-line

这条消息显示了 C-p 命令对应的函数名。命令的功能由函数完成,所以函数名本身也可以被看成是最简单的文档至少对于你已经学过的命令来说,它们的函数名足以解释它们的功能了。

多字符命令一样可以用 C-h c 来查看。想得到更多的信息,请把 C-h c 换成C-h k 试试看。

输入 C-h k C-p

上面的命令会新打开一个 Emacs 窗格以显示函数的名称及其文档。你读完之后可用 C-x 1 关掉这个帮助窗格。当然你并不需要立即这样做,你完全可以先在编辑窗格里做点别的事情,然后再关掉帮助窗格。

还有一些其它有用的 C-h 命令:

  • C-h f 解释一个函数。需要输入函数名。

  • C-h v 用来显示 Emacs 变量的文档。Emacs 变量可以被用来“定制 Emacs 的行为”。同样,你需要输入变量的名称。

  • C-h a 相关命令搜索(Command Apropos)。输入一个关键词然后 Emacs 会列出所有命令名中包含此关键词 的命令。这些命令全都可以用 A-x 来启动。对于某些命令来说,相关命令搜索还会列出一两个组合键。

输入 C-h a file Return。

Emacs 会在另一个窗格里显示一个 A-x 命令列表,这个列表包含了所有名称中含有“file”的命令。

你可以看到像C-x C-f这样的组合键显示在“find-file”这样的命令名的旁边。

C-h i 阅读手册(也就是通常讲的 Info)。这个命令会打开一个称为info的特殊缓冲区,在那里,你可以阅读安装在系统里的软件包使用手册。要读 Emacs 的使用手册,按 m emacsReturn 就可以了。如果你之前从没用过 Info 系统,那么请按“?”,Emacs 会带你进入 Info 的使用指南。在看完本快速指南之后,Emacs Info 会成为你的主要参考文档。


更多精彩(MORE FEATURES)

想学习更多的使用技巧,Emacs 使用手册(manual)值得一读。你可以读纸版的书,也可以在 Emacs 中读(可以从 Help 菜单进入或者按 C-h r)。提两个你可能会很感兴趣的功能吧,

  • 一个是可以帮你少敲键盘的 completion(自动补全),

  • 另一个是方便文件处理的 dired(目录编辑)。

Completion 可以替你节省不必要的键盘输入。比如说你想切换到 Message 缓冲区,你就可以用 C-x bM Tab 来完成。只要 Emacs 能够根据你已经输入的文字确定你想要输入的内容,它就会自动帮你补齐。Completion 也可用于命令名和文件名。有关 Completion 的详细说明可以在 Emacs Info 中的“Completion”一节里找到。

Dired 能够在一个缓冲区里列出一个目录下的所有文件(可以选择是否也列出子目录),然后你可以在这个文件列表上完成对文件的移动、访问、重命名或删除等等操作。Dired 也在 Emacs 使用手册中有详细介绍,参见“Dired”一节。

Emacs 使用手册里还有许许多多的精彩功能等着你来了解。

总结(CONCLUSION)

要退出 Emacs 请用 C-x C-c。本文完全是为零起点新手所写的起步教程。

如果你觉得哪里还看不明白,千万不要怀疑自己,那一定是我们没有写好。我们永远欢迎你的不满和抱怨。


如有错误,欢迎评论指出。感谢!


参考资料

翻译(TRANSLATION)

翻译:孙一江 [email protected]

维护:薛富侨 [email protected]

校对:水木社区(www.newsmth.net)Emacs 板众多网友及众多 Emacs 中文用户

Emacs 快速指南(Tutorial)早有两个刘昭宏的中文译本,繁简各一。其简体版本TUTORIAL.cn)基本由繁体版本(TUTORIAL.zh)经词语替换而得。然而繁简中文不仅在用词习惯上有所不同,更有诸多表达方式与句法方面的差异,因此一直以来用户使用 TUTORIAL.cn 都会略觉生硬和晦涩。这次重新翻译 TUTORIAL.cn 的动机正是源于这种体验,希望我们的工作能够让本文更好地发挥其作用。TUTORIAL.zh的译文质量很高,在翻译过程中给予过我们许多借鉴和参考,在此对刘昭宏的工作表示感谢。

翻译过程中最大的挑战莫过于术语译词的选择了。经过水木社区 Emacs 板热心网友小范围内的讨论,我们选择了现在的译法。用户的广泛参与是*软件生命力的源泉,所以如果你有任何建议、勘误或想法,请用你喜欢的方式向我们提出。你可以通过电子邮件直接联系维护者,也可以放到 GNU Emacs 的开发邮件列表或者水木社区的 Emacs 板上进行讨论。

下面列出主要术语的译词对照,并给出注释说明:

英文 中文
command 命令
cursor 光标
scrolling 滚动
numeric argument 数字参数
window 窗格 [1]
insert 插入
delete 删除 [2]
kill 移除 [2]
yank 召回 [2]
undo 撤销
file 文件
buffer 缓冲区
minibuffer 小缓冲
echo area 回显区
mode line 状态栏
search 搜索
incremental search 渐进式搜索 [3]

对于其他没有提到的术语,读者可以参考 Emacs 使用手册里的术语表。

[1] “window”一词在计算机相关的领域一般都被译为“窗口”。但是在 Emacs中,还有一个“frame”的概念。在被广泛使用的 X 窗口系统和微软的视窗(Windows)系列操作系统中,Emacs 的一个“frame”就是一个“窗口”,因此把 Emacs 中的“frame”译成“窗口”更加符合通常的习惯。这样,Emacs 中的“window”就只能译成“窗格”了。我们认为 Emacs 中 window 和frame 的关系用窗格和窗口来类比是十分形象的。《学习GNU Emacs》(第二版)一书对“window”和“frame”的翻译与本教程刚好相反(分别译作“窗口”和“窗格”)。在此特别注明,以消除可能产生的疑惑。(感谢李旭章 [email protected] 指出)

[2] 对于“delete”和“kill”的区别,正文已经给出了详细的说明。“删除”和“移除”相比较起来,前者更多地隐含着“破坏”和“不可恢复”的意思,而 后者更多地隐含着“被转移”和“可恢复”的意思。因此分别选择它们作为上述两词的译词,希望能够体现出区别。“yank”在中文文档中鲜有对应译词出现,翻译的困难较大。究其本意是:“a strong sudden pull”(参见韦氏词典),即“猛然拉回”。在原文档中 yank 被引申为“将先前移除的东西再移回来”这个意思,所以我们选择了“召回”一词与其对应。

[3] “incremental”一词在计算机著作中广泛出现,被广泛接受的中文译词有两个:“增量的”和“渐进的”。“incremental search”翻译成“增量式搜索 ”或者“渐进式搜索”都讲得通,且都有各自的形象之处。还是参考原文对其的解释:“… means that the search happens while you type in the string to search for”。意思是之所以称其为“incremental search”,是 因为“在你输入搜索字符串的过程中,搜索就已经在进行了”。我们认为“增量的”更加强调在现有基础上的变化(比如“增量备份”,“增量编译”);而“渐进的”更加强调过程的逐渐发展,也更加符合原文的意思。因此我们选择将“incremental search”译作“渐进式搜索”。

  • 版权声明(COPYING)
    This tutorial descends from a long line of Emacs tutorials starting with the one written by Stuart Cracraft for the original Emacs.This version of the tutorial is a part of GNU Emacs. It is copyrighted and comes with permission to distribute copies on certain conditions:

    Copyright © 1985, 1996, 1998, 2001-2015 Free Software Foundation,

    Inc.

    This file is part of GNU Emacs.

    GNU Emacs is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by

    the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

    GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of

    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public Licensealong with GNU Emacs. If not, see http://www.gnu.org/licenses/.

Please read the file COPYING and then do give copies of GNU Emacs toy our friends. Help stamp out software obstructionism (“ownership”) by using, writing, and sharing free software!

【下面为版权声明的译文,仅供参考。实际法律效力以英文原文为准。】

本快速指南沿袭自历史悠久的 Emacs 快速指南,可上溯至 Stuart Cracraft 为最初的 Emacs 所作的版本。

本篇指南是 GNU Emacs 的一部分,并允许在下列条件的约束下发行其拷贝:

Copyright © 1985, 1996, 1998, 2001-2015 Free Software Foundation,

Inc.

本文件为 GNU Emacs 的一部分。

GNU Emacs 为*软件;您可依据*软件基金会所发表的GNU通用公共授权条款,对本程序再次发布和/或修改;无论您依据的是本授权的第三版,或(您可选的)任一日后发行的版本。

GNU Emacs 是基于使用目的而加以发布,然而不负任何担保责任;亦无对适售性或特定目的适用性所为的默示性担保。详情请参照GNU通用公共授权。

您应已收到附随于 GNU Emacs 的GNU通用公共授权的副本;如果没有,请参照http://www.gnu.org/licenses/.

敬请阅读文件“COPYING”,然后向你的朋友们分发 GNU Emacs 拷贝。让我们以使用、编写和分享*软件的实际行动来共同祛除软件障碍主义(所谓的“所有权”)!

相关标签: 快速入门

上一篇: Cordova入门教程

下一篇: 5 函数二