Emacs 快速指南
-折叠目录
- 1. 小结(SUMMARY)
- 2. 基本的光标控制(BASIC CURSOR CONTROL)
- 3. 若是 EMACS 失去响应(IF EMACS STOPS RESPONDING)
- 4. 被禁用的命令(DISABLED COMMANDS)
- 5. 窗格(WINDOWS)
- 6. 插入与删除(INSERTING AND DELETING)
- 7. 撤销(UNDO)
- 8. 文件(FILE)
- 9. 缓冲区(BUFFER)
- 10. 命令集扩展(EXTENDING THE COMMAND SET)
- 11. 自动保存(AUTO SAVE)
- 12. 回显区(ECHO AREA)
- 13. 状态栏(MODE LINE)
- 14. 搜索(SEARCHING)
- 15. 多窗格(MULTIPLE WINDOWS)
- 16. 多窗口(MULTIPLE FRAMES)
- 17. 递归编辑(RECURSIVE EDITING LEVELS)
- 18. 得到更多帮助(GETTING MORE HELP)
- 19. 更多精彩(MORE FEATURES)
- 20. 总结(CONCLUSION)
- 21. 翻译(TRANSLATION)
- 22. 版权声明(COPYING)
Emacs 快速指南.(查看版权声明请至本文末尾)redis
【注意:位于【】之间的内容是译注,好比本行,下同。】shell
Emacs 键盘命令一般包含 CONTROL 键(有时候以 CTRL 或 CTL 来标示)和 META 键(有时候用 EDIT 或 ALT 来标示)。为了不每次都要写出全名,咱们 约定使用下述缩写:c#
C-<chr> 表示当输入字符 <chr> 时按住 CONTROL 键。 所以 C-f 就表示:按住 CONTROL 键再输入 f。 M-<chr> 表示当输入字符 <chr> 时按住 META(或 EDIT 或 ALT)键。 若是你的键盘上没有 META 、EDIT 或 ALT 键,用下述方法也等效: 先按一下 ESC 键而后放开,再输入 <chr>。咱们用 <ESC> 来表示 ESC 键。
重要提示:要退出 Emacs,请用 C-x C-c(两个连续的组合键)。 要退出一个正在运行中的命令,请用 C-g。 下文中左边顶行的“: >>”字样用来提示你尝试键盘命令。好比:安全
[本页当中特地留出一些空白是出于教学目的,请继续日后阅读]编辑器
>> 如今输入 C-v (查看下一屏文字)移动到下一屏。
(别紧张,在输入字符 v 的同时注意要按住 CONTROL 键) 从如今开始,每读完当前一屏你都须要这样作一次。函数
值得注意的是,当你从上一屏滚到下一屏时,中间会有两行的重复;这样作是为 了维持滚屏的连续性,方便你顺畅、连续地阅读。post
用编辑器,开门第一件事就是学会在文字中移动。你已经知道了 C-v 能够向下移 动一屏,要往上移,请用 M-v (也就是按住 META 键,而后输入v,若是你没有 META、EDIT 或 ALT 键那么就先按 <ESC> 再按 v)。学习
>> 试试 M-v,而后再试试 C-v,来回遛几回。
1 小结(SUMMARY)
如下命令在翻页浏览时至关有用:this
C-v 向前移动一屏 M-v 向后移动一屏 C-l 重绘屏幕,并将光标所在行置于屏幕的中央 (注意是 CONTROL-L,不是 CONTROL-1)
>> 找到光标,留意其附近的文字,而后输入 C-l。
找找光标在哪里,你会发现其附近的文字与以前相同,位置却变为屏幕的中心。 若是你再次输入 C-l ,附近的文字将移动到屏幕的顶端。再次输入 C-l , 文字将移动到底端。spa
若是你的键盘上有 PageUp 和 PageDn,也能够用这两个键来滚屏。不过使用 C-v 和 M-v 的效率要更高一些。
2 基本的光标控制(BASIC CURSOR CONTROL)
整屏的移动颇有用,可是如何在文字中精肯定位呢?
有几种方式能够选择。用方向键固然能够,不过更有效率的方法是保持双手位于 主键盘区,而后使用 C-p 、 C-b 、 C-f 和 C-n 这四个命令。它们的功能和方 向键是同样的,以下图所示:
上一行 C-p : : 向左移 C-b .... 目前光标位置 .... 向右移 C-f : : 下一行 C-n
>> 用 C-n 或 C-p 将光标移到上图的中央。 按 C-l,整幅图会被显示在屏幕的中央。
“P N B F”四个字母分别表明了四个词,用这四个词记忆这些组合键会更容易: P 表明 previous(上一行),N 表明 next(下一行),B 表明 backward(回 退),而 F 则表明 forward(前进)。这些组合键从此将与你如影随行。
>> 按几回 C-n 把光标往下挪到这里。
>> 用 C-f 把光标移动到这一行,而后再用 C-p 往上挪。
注意观察当光标在一行的中央时 C-p 命令的行为。
每行文字都以一个“换行符”结束,“换行符”把行与行区分开来。(一般状况下, 一个文件的最后一行会有一个换行符,可是 Emacs 不强制要求这一点。)
>> 在一行的行头输入 C-b。
光标应该会移动到前一行的行尾,由于光标在回退过程当中越过了换行符。
一样 C-f 也能够像 C-b 同样越过换行符。
>> 连按几回 C-b,感觉一下光标的移动。
而后按几回 C-f 回到本行的行尾。 再按一次 C-f,光标会移动到下一行。
当你移动光标穿越屏幕的上下边界时,在边界外的文字会移动到屏幕内,这称为 “滚动”(scrolling)。滚动使得光标能够被移动到文字中的任何位置,而且还 不会让光标跑到屏幕外边去。
>> 用 C-n 将光标下移,一直越过屏幕边界,同时观察发生了什么变化。
若是你嫌一个字符一个字符地挪光标太慢,你还能够一个词一个词地跳。M-f (META-f) 能够将光标往前移动一个词,而 M-b 则是日后移。【这里的“词”指 英文单词,对中文来讲,则是指移动到下一个标点符号。】
>> 试试 M-f 和 M-b。
若是光标停在一个词的中间,M-f 会移动到这个词的末尾。若是光标处于词与词 之间的空白处,M-f 会移动到下一个词的末尾。M-b 的功能相似,只是方向相反。
>> 按几回 M-f 和 M-b,中间夹杂一些 C-f 和 C-b。
你能够观察到 M-f 和 M-b 在不一样位置上所表现出来的不一样行为。
请注意 C-f 、C-b 和 M-f 、M-b 两对之间的类比关系。一般的惯例是:META 系 列组合键用来操做“由语言定义的单位(好比词、句子、段落)”,而 CONTROL 系列组合键用来操做“与语言无关的基本单位(好比字符、行等等)”。
相似的惯例在“行”与“句子”之间也一样适用:C-a 和 C-e 能够将光标移动到 “一行”的头部和尾部;而 M-a 和 M-e 则将光标移动到“一句”的头部和尾部。
>> 按两次 C-a,再按两次 C-e。
按两次 M-a,再按两次 M-e。
想想为何重复的 C-a 命令会没有做用,而重复的 M-a 命令则会让光标不断 地回退到上一个句子。虽然这个类比规律并不严格,可是很天然。
光标停留的位置也能够称做“点位”(point)。或者干脆说,光标指示出了屏幕 上“点位”在文本中的位置。
这里对简单的光标移动命令作一个总结,其中也包括了整词和整句的移动:
C-f 向右移动一个字符 C-b 向左移动一个字符 M-f 向右移动一个词【对中文是移动到下一个标点符号】 M-b 向左移动一个词【对中文是移动到上一个标点符号】 C-n 移动到下一行 C-p 移动到上一行 C-a 移动到行首 C-e 移动到行尾 M-a 移动到句首 M-e 移动到句尾
>> 把上面全部的命令都练习几回,这些可都是最经常使用的命令。
这里还要介绍两个重要的光标移动命令:M-< (META 小于号)能够将光标移动到 全部文字的最开头;M-> (META 大于号)能够将光标移动到全部文字的最末尾。
注意,在大部分键盘上,小于号(<)须要用上档键(Shift)来输入,因此在这 些键盘上你应该用 Shift 键来输入 M-<,若是不按 Shift 键,你输入的会是 M-comma(META 逗号)。
>> 试一试 M-< ,移到本快速指南的最开始。
而后再按几回 C-v 回到这里。
>> 试一试 M-> ,移到本快速指南的最末尾。
而后再按几回 M-v 回到这里。
若是你的键盘上有方向键的话,也能够用它们来移动光标。不过咱们有三个理由 推荐你学习 C-b 、C-f 、C-n 、和 C-p:(1)它们在任何键盘上都能用。(2) 当你熟练使用 Emacs 以后,你会发现用这些组合键比用方向键要快得多,由于你 的手不须要离开打字区。(3)一旦你习惯了使用这些组合键,你也能够很容易地 适应其它更高级的光标移动命令。
大部分的 Emacs 命令接受数字参数,而且对于多数命令而言,这些数字参数的做 用是指定命令的重复次数。为一个命令指定数字参数(也就是重复次数)的方法 是:先输入 C-u,而后输入数字做为参数,最后再输入命令。若是你有META (或 EDIT 或 ALT)键,那么还有另外一种办法:按住 META 键不放,而后输入数字。不 过咱们仍是建议你用 C-u,由于它在任何终端机上都能用。这种数字参数也称为 “前缀参数”,意思是说这个参数是先于使用它的命令而输入的。
举例来讲, C-u 8 C-f 会向前移动 8 个字符。
>> 为 C-n 或者 C-p 指定一个数字参数,这样你能够只用一个命令就把光标移动
到本行的附近。
虽然大部分命令把数字参数解释为其重复次数,可是也有些命令例外,它们将数 字参数另作它用。好比有些命令(咱们目前还没学到)仅仅将前缀参数做为一个 标志――只要给出有一个前缀参数,无论其值为什么,它都会改变命令的功能。
而 C-v 和 M-v 则属于另外一种类型的例外。当给定一个参数时,它们将滚动你指 定的“行数”,而不是“屏数”。举例来讲,C-u 8 C-v 将文本向下滚动 8 行。
>> 如今试试看,输入 C-u 8 C-v。
这个命令应该已经将文字向上滚动了 8 行。若是你想将它再次地向下滚动,你可 以给定一个参数而后执行 M-v。
若是你正在使用图形界面,好比 X 或者微软的 Windows,那么在 Emacs窗 口的一边应该有一个长方形的区域叫“滚动条”。你能够用鼠标操纵滚动条来滚动 文字。
若是你的鼠标有滚轮的话,你也可使用滚轮来滚动。
3 若是 EMACS 失去响应(IF EMACS STOPS RESPONDING)
若是 Emacs 对你的命令失去响应,你能够用 C-g 来安全地终止这条命令。C-g 也能够终止一条执行太久的命令。
C-g 还能够取消数字参数和只输入到一半的命令。
>> 输入 C-u 100 设定一个值为 100 的数字参数,而后按 C-g。
如今再按 C-f,光标应该只会移动一个字符,由于你已经用 C-g 取消了参数。
若是你不当心按了一下 <ESC>,你也能够用 C-g 来取消它。 【这个说法彷佛有问题,由于按照这个按键顺序输入的应该是 C-M-g。 取消 <ESC> 的正确作法是再连按两次 <ESC>。】
4 被禁用的命令(DISABLED COMMANDS)
有一些 Emacs 命令被“禁用”了,以免初学者在不了解其确切功能的状况下误 用而形成麻烦。
若是你用到了一个被禁用的命令,Emacs 会显示一个提示消息,告诉你这个命令 究竟是干什么的,询问你是否要继续,并在获得你的确定以后再执行这命令。
若是你真的想用这条命令,在 Emacs 询问你的时候应该按空格。通常来讲,若是 你不想用,就按“n”。
>> 试试 C-x C-l (这是一个被禁用的命令)
而后用 n 来回答询问。
5 窗格(WINDOWS)
Emacs 能够有多个“窗格”,每一个窗格显示不一样的文字。后面会介绍怎么对付多个窗 格,如今咱们先学会如何关掉多余的窗格。其实也很简单:
C-x 1 只保留一个窗格(也就是关掉其它全部窗格)。
也就是先按 CONTROL-x 而后再按 1。C-x 1 会保留光标所在的窗格,并将其扩大 到整个屏幕,同时关掉全部其它的窗格。
>> 把光标移到本行而后输入 C-u 0 C-l。
>> 输入 C-h k C-f。观察当一个新窗格出现时当前窗格(用来显示
C-f 命令的文档)是如何缩小的。
>> 输入 C-x 1 关掉文档窗格。
有一系列命令是以 CONTROL-x 开始的,这些命令许多都跟“窗格、文件、缓冲区 【缓冲区(buffer)会在后文详细介绍】”等等诸如此类的东西有关,其中有些 命令可能包含了 2 个、3 个或者 4 个字符。
6 插入与删除(INSERTING AND DELETING)
插入文字很简单,直接敲键盘就能够了。普通的字符,好比 A、七、* 等等,会 随着你的输入而插入。要插入一个换行符,输入 <Return>(这个键在键盘上有 时会被标注成“Enter”)。
你能够用 <DEL> 来删除光标左边的字符,这个键一般被标注为“Backspace”――跟 你在 Emacs 以外的用法应该同样,删除最后一个输入的字符。
你的键盘上可能有另一个键,标注着 <Delete>,但那个不是咱们所说的 <DEL>。
>> 如今就来试试――敲点字,而后按几下 <DEL> 删除它们。
不用担忧文件被修改,你作什么都不要紧,这里就是专给你练习用的。
若是一行文字很长、超出了窗格的宽度,显示不下的部分会在紧邻的下一行继续 显示。若是你使用的是图形界面,文本区域两边的狭窄区域(左右“边缘”)会出 现小小的转弯箭头,代表这是某一行的接续显示。若是你使用的是文本终端,接 续显示由屏幕最右边一列的一个反斜线来表示。
>> 输入文字,一直到屏幕的右边界,而后继续。
你会看到一个接续行出现。
>> 用 <DEL> 删掉一些文字,直到此行长度小于窗格宽度,接续行就消失了。
换行符跟其它字符同样能够被删除。两行中间的换行符被删除后,这两行将会合 并成一行。若是合并后的这一行太长,超出了窗格宽度,它就会以一个接续行来 显示。
>> 移动光标到某行的开头并输入 <DEL>。
这时该行将与其前一行一块儿被合并为一行。
>> 输入 <Return> 从新插入你刚才删除的换行符。
前面讲过,大部分的 Emacs 命令均可以指定重复次数,这其中也包括输入字符的 命令。重复执行输入字符的命令实际上就是输入多个相同的字符。
>> 试试 C-u 8 *,这将会插入 ********。
好,如今你应该已经掌握了最基本的的文本插入和修改功能,其实删除还能够 “以词为单位”进行,下面是一个关于“删除”操做的小结:
<DEL> 删除光标前的一个字符 C-d 删除光标后的一个字符 M-<DEL> 移除光标前的一个词 M-d 移除光标后的一个词 C-k 移除从光标到“行尾”间的字符 M-k 移除从光标到“句尾”间的字符
【可能你已经注意到了“删除(delete)”和“移除(kill)”的用词区别,后 文会有详细说明。】
注意“<DEL> 和 C-d”还有“M-<DEL> 和 M-d”是根据前述惯例从 C-f和 M-f 衍生 出来的(其实<DEL>不是控制字符,咱们先忽略这一点)。C-k和 M-k 的关系在 某种程度上与 C-e 和 M-e 同样――若是把“一行”和“一句”做一个类比的话。
你也能够用一种通用的办法来移除缓冲区里的任何一部分:首先把光标移动到你 想要移除的区域的一端,而后按 C-<SPC>(<SPC>指空格)【注意,C-<SPC> 往 往被中文用户设定成输入法热键,若是这样,C-<SPC> 就被系统拦截而没法传递 给 Emacs 了,在这种状况下可使用C-@。】,而后将光标移动到你准备移除的 文字的另外一端。这个时候, Emacs 会高亮光标和你按下 C-<SPC> 之间的文本。 最后,按下 C-w 。这样就能够把位于这两点之间的全部文字移除了。
>> 移动光标到上一段开头的“你”字。 >> 输入 C-<SPC> 。Emacs 应该会在屏幕的下方显示一个“Mark set”的消息。 >> 移动光标到第二行中的“端”字。 >> 输入 C-w,从“你”开始到“端”以前的文字被所有移除。
注意,“移除(kill)”和“删除(delete)”的不一样在于被移除的东西能够被从新 插入(在任何位置),而被删除的就不能使用相同的方法从新插入了(不过能够 经过撤销一个删除命令来作到,后文会提到)。【实际上,移除掉的东西虽然看 起来“消失”了,但实际上被 Emacs 记录了下来,所以还能够找回来;而删除掉 的东西虽然也可能还在内存里,可是已经被 Emacs“抛弃”了,因此就找不回来 了。】从新插入被移除的文字称为“召回(yank)”。通常而言,那些可能消除很 多文字的命令会把消除掉的文字记录下来(它们被设定成了“可召回”),而那些 只消除一个字符或者只消除空白的命令就不会记录被消除的内容(天然你也就无 法召回了)。
>> 移动光标到一非空白行的行头,而后输入 C-k 移除那一行上的文字。
>> 再次 C-k,你能够看到它移除了跟在那一行后面的换行符。
注意,单独的 C-k 会把一行的内容移除,而第二个 C-k 则会移除换行符,并使 其后全部的行都向上移动。C-k 处理数字参数的方式很特别,它会把参数指定的 那么多行连同其后的换行符一块儿移除,而不只仅是重复 C-k 而已。好比 C-u 2 C-k 会把两行以及它们的换行符移除;而若是只是输入 C-k 两次显然不是这个结 果。
从新插入被移除的文字恢复的动做称为“召回(yanking)”。(就好像把别人从你身边 移走的东西又猛力地拉回来。)你能够在你删除文字的地方召回,也能够在别的 地方召回,还能够屡次召回一样的文字以获得它的多个拷贝。不少其它的编辑器 把移除和召回叫作“剪切”和“粘贴” (详情可见 Emacs 使用手册里的术语表)。
召回的命令是 C-y。它会在光标所在处插入你最后移除的文字。
>> 试试看,输入 C-y 将文字召回。
若是你一次连按了好几下 C-k,那么全部被移除的行会被存储在一块儿,只要一个 C-y 就能够把它们都召回。
>> 在这里试试,连续按几回 C-k。
如今再来恢复刚刚被咱们移除的文字:
>> 按 C-y。而后把光标往下移动几行,再按一次 C-y。
如今你应该知道怎么复制文字了。
C-y 能够召回最近一次移除的内容,那如何召回前几回移除的内容呢?它们固然 没有丢,你能够用 M-y 来召回它们。在用 C-y 召回最近移除的文字以后,紧接 着再按 M-y 就能够召回再前一次被移除的内容,再按一次 M-y 又能够召回再上 一次的……连续使用 M-y 直到找到你想要召回的东西,而后什么也不用作,继续 编辑就好了。
若是连续按 M-y 不少次,你可能会回到起始点,也就是最近移除的文字。 【看得出这其实是一个环。】
>> 移除一行,移动一下光标,而后再移除另一行。 按 C-y 将第二次移除的那行召回来。 紧接着再按 M-y,它将会被第一次移除的那行取代。 试着再按几下 M-y 看看会发生什么。 再继续,直到第二行被召回来,而后再作个几回。 若是感兴趣,你能够试着给 M-y 指定一个正的或负的参数。
7 撤销(UNDO)
若是你修改了一段文字,又以为改得很差,能够用 undo 命令进行撤销:C-/。
一般 C-/ 会消除一个命令所形成的全部改变;若是你在一行中连续屡次地使用 C-/,你会把之前的命令也依次撤销。
可是有两个例外: 1) 没有改变文字的命令不算(包括光标移动命令和滚动命令) 2) 从键盘输入的字符以组为单位――每组最多 20 个字符――来进行处理。 (这是为了减小你在撤销“插入文字”动做时须要输入 C-/ 的次数)
>> 用 C-k 将这一行移除,而后输入 C-/ ,它会再次出现。
C-_ 也是撤销命令;它的做用跟 C-/ 同样,可是它比较容易屡次输入。在 某些终端上,输入 C-/ 实际上向 Emacs 发送的是 C-_ 。 另外, C-x u 和 C-/ 彻底同样,可是按起来有些麻烦。
数字参数对于 C-/ 、 C-_ 和 C-x u 的意义是执行撤销的重复次数。
8 文件(FILE)
想保存工做成果就要记得存盘,不然一旦退出 Emacs 你编辑的文字就会丢失。要 存盘,就要在编辑前“寻找”到一个存盘文件。(这个过程一般也被称为“访问” 文件。)
寻找到一个文件意味着你能够在 Emacs 里查看这个文件的内容。从许多角度看, 这就等于你在直接编辑这个文件,只是你所作的修改只有在“存盘”的时候才会 被写入文件。也正由于如此,你能够丢弃一个写到一半的文件而没必要把这个残缺 文件也保存到计算机上。在存盘的时候,Emacs 会把存盘前的文件重命名保存, 以防你改完以后又想反悔。
在屏幕的下方,你应该可以看到头部有短线“-”的一行,行首一般是一些诸如“ -:— TUTORIAL.cn”的文字,这些文字表明了你当前正在访问的文件。好比你现 在正在访问的文件是对 Emacs 快速指南的一份临时拷贝,叫作“TUTORIAL.cn”。 每当Emacs 寻找到一个文件,文件名就会出如今这个位置。
寻找文件的命令有一个特色,那就是你必须给出文件名。咱们称这个命令“读入 了一个参数”(在这里,这个参数显然就是文件名)。在你输入这条命令以后:
C-x C-f 寻找一个文件
Emacs 会提示你输入文件名。你输入的文件名会出如今屏幕最底端的一行,这一 行被称为小缓冲(minibuffer),在小缓冲里你可使用一般的 Emacs 编辑命令 来编辑文件名。
在小缓冲里输入文件名(其实输入其它东西也同样)时能够用 C-g 取消。
>> 输入 C-x C-f,而后输入 C-g
这会关掉小缓冲,同时也会取消使用小缓冲的 C-x C-f 命令。 固然了,你也没有找任何文件。
用 <Return> 结束文件名的输入。以后,小缓冲会消失,C-x C-f 将会去寻找你 指定的文件。小缓冲在 C-x C-f 命令结束以后也会消失。
文件被显示在了屏幕上,你能够开始编辑了。存盘用这条命令:
C-x C-s 储存这个文件
这条命令把 Emacs 中的文字存储到文件中。第一次存盘的时候 Emacs 会将原文 件重命名以备份。重命名的规则一般是在原文件名以后添加一个“~”字符。 【对许多人来讲,这是一个烦人的特性,关掉文件备份能够用以下命令: M-x customize-variable <Return> make-backup-files <Return>】
存盘结束后,Emacs 会显示写入文件的文件名。你最好养成常常存盘的习惯,这 能够减小系统崩溃和死机给你带来的损失(也可参见下面的“自动保存”一节)。
>> 输入 C-x C-s TUTORIAL.cn <Return> 。
这将会把该指南保存为一个名为 TUTORIAL.cn 的文件,而且在屏幕的下方显 示一条消息:“Wrote …TUTORIAL.cn”。
你不但能够寻找一个已有的文件来查看或编辑,还能够寻找一个不存在的文件。 实际上这正是 Emacs 建立新文件的方法:找到不存在的新文件。事实上,只有 在存盘的时候,Emacs 才会真正建立这个文件。而在这以后的一切就跟编辑一个 已有文件没有区别了。
9 缓冲区(BUFFER)
你能够用 C-x C-f 找到并打开第二个文件,但第一个文件仍然在 Emacs 中。要 切回第一个文件,一种办法是再用一次 C-x C-f。这样,你就能够在 Emacs 中同 时打开多个文件。
Emacs 把每一个编辑中的文件都放在一个称为“缓冲区(buffer)”的地方。每寻 找到一个文件,Emacs 就在其内部开辟一个缓冲区。用下面的命令能够列出当前 全部的缓冲区:
C-x C-b 列出缓冲区
>> 如今就试一下 C-x C-b
观察一下缓冲区是如何被命名的,它极可能跟与其对应的文件同名。实际上,一 个 Emacs 窗格里的任何文字都是某个缓冲区的一部分。
>> 输入 C-x 1 离开缓冲区列表
无论存在多少缓冲区,任什么时候候都只能有一个“当前”缓冲区,也就是你正在编 辑的这个。若是你想编辑其它的缓冲区,就必须“切换”过去。上面讲过,用 C-x C-f 是一种办法。不过还有一个更简单的办法,那就是用 C-x b。用这条命 令,你必须输入缓冲区的名称。
>> 经过输入 C-x C-f foo <Return> 建立一个名为“foo”的文件。
而后输入 C-x b TUTORIAL.cn <Return> 回到这里。
大多数状况下,缓冲区与跟其对应的文件是同名的(不包括目录名),不过这也 不是绝对的。用 C-x C-b 获得的缓冲区列表老是显示缓冲区名。
缓冲区未必有对应文件。显示缓冲区列表的缓冲区(叫作“*Buffer List*”)就 是这样。这个 TUTORIAL.cn 缓冲区起初没有对应的文件,可是如今有了,由于 在前一节你输入了 C-x C-s , 将它保存成了一个文件。
“*Messages*”缓冲区也没有对应文件,这个缓冲区里存放的都是在 Emacs 底部 出现的消息。
>> 输入 C-x b *Messages* <Return> 瞅瞅消息缓冲区里都有什么东西。
而后再输入 C-x b TUTORIAL.cn <Return> 回到这里。
若是你对某个文件作了些修改,而后切换到另外一个文件,这个动做并不会帮你把 前一个文件存盘。对第一个文件的修改仍然仅存在于 Emacs 中,也就是在它对 应的缓冲区里。而且,对第二个文件的修改也不会影响到第一个文件。这颇有用, 但也意味着你须要一个简便的办法来保存第一个文件的缓冲区。先切换回那个缓 冲区,再用 C-x C-s 存盘,太麻烦了。你须要一个更简便的方法,而 Emacs 已 经为你准备好了:
C-x s 保存多个缓冲区
C-x s 会找出全部已被修改但还没有存盘的缓冲区,而后向你逐个询问:是否须要 存盘?
>> 插入一行文字,而后输入 C-x s。
它应该会问你,是否要储存名为 TUTORIAL.cn 的缓冲区? 按“y”告诉它你想存盘。
10 命令集扩展(EXTENDING THE COMMAND SET)
Emacs 的命令就像天上的星星,数也数不清。把它们都对应到 CONTROL 和 META 组合键上显然是不可能的。Emacs 用扩展(eXtend)命令来解决这个问题,扩展 命令有两种风格:
C-x 字符扩展。 C-x 以后输入另外一个字符或者组合键。 M-x 命令名扩展。M-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(字符串替换)这个命令,它会把一个字符串替换成另外一个。在 输入 M-x 以后,Emacs 会在屏幕底端向你询问并等待你输入命令名。若是你想 输入“replace-string”,其实只须要敲“repl s<TAB>”就好了,Emacs 会帮你自 动补齐。输入完以后按 <Return> 提交。
字符串替换命令须要两个参数――被替换的字符串和用来替换它的字符串。每一个 参数的输入都以换行符来结束。
>> 将光标移到本行下面第二行的空白处,而后输入
M-x repl s<Return>changed<Return>altered<Return>。
【如下保留一行原文,以应练习之需:】 Notice how this line has changed: you've replaced…
请注意这一行的变化:在光标以后的范围内,你已经将“changed”这个词――不 论它在哪里出现――所有用“altered”替换掉了。
11 自动保存(AUTO SAVE)
若是你已经修改了一个文件,可是还没来得及存盘你的计算机就罢工了,那么你 所作的修改就极可能会丢失。为了不这样的不幸发生,Emacs 会按期将正在编 辑的文件写入一个“自动保存”文件中。自动保存文件的文件名的头尾各有一个 “#”字符,好比你正在编辑的文件叫“hello.c”,那么它的自动保存文件就叫 “#hello.c#”。这个文件会在正常存盘以后被 Emacs 删除。
因此,假如不幸真的发生了,你大能够从容地打开原来的文件(注意不是自动保 存文件)而后输入 M-x recover file <Return> 来恢复你的自动保存文件。在 提示确认的时候,输入 yes<Return>。
12 回显区(ECHO AREA)
若是 Emacs 发现你输入多字符命令的节奏很慢,它会在窗格的下方称为“回显区” 的地方给你提示。回显区位于屏幕的最下面一行。
13 状态栏(MODE LINE)
位于回显区正上方的一行被称为“状态栏”。状态栏上会显示一些信息,好比:
-:**- TUTORIAL.cn 63% L749 (Fundamental)
状态栏显示了 Emacs 的状态和你正在编辑的文字的一些信息。
你应该知道文件名的意思吧?就是你找到的那个文件嘛。-NN%– 显示的是光标在 全文中的位置。若是位于文件的开头,那么就显示 –Top– 而不是 –00%–;如 果位于文件的末尾,就显示 –Bot–。若是文件很小,一屏就足以显示所有内容, 那么状态栏会显示 –All–。
“L” 和其后的数字给出了光标所在行的行号。
最开头的星号(*)表示你已经对文字作过改动。刚刚打开的文件确定没有被改动 过,因此状态栏上显示的不是星号而是短线(-)。
状态栏上小括号里的内容告诉你当前正在使用的编辑模式。缺省的模式是 Fundamental,就是你如今正在使用的这个。它是一种“主模式”。
Emacs 的主模式林林总总。有用来编辑程序代码的――好比 Lisp 模式;也有用 来编辑各类天然语言文本的――好比 Text 模式。任何状况下只能应用一个主模 式,其名称会显示在状态栏上,也就是如今显示“Fundamental”的地方。
主模式一般会改变一些命令的行为。比方说,无论编辑什么语言的程序代码,你 均可以用一个相同的命令来添加注释。可是在不一样的语言中注释的语法每每是不 同的,这时不一样的主模式就会用各自不一样的语法规则来添加注释。主模式都是可 以用 M-x 启动的扩展命令,M-x fundamental-mode 就能够切换到 Fundamental 模式。
编辑天然语言文本――好比如今――应该用 Text 模式。
>> 输入 M-x text-mode <Return>。
别担忧,什么都没变。不过细心一些能够发现,M-f 和 M-b 如今把单引号(') 视为词的一部分了。而在先前的 Fundamental 模式中,M-f 和 M-b 都将单引号 视为分隔单词的符号。
主模式一般都会搞一些相似的小动做,由于不少命令其实完成的是“相同的工 做”,只是在不一样环境下会有不一样的工做方式而已。【所谓“求同存异”,在 Emacs 里获得了很好的体现】
用 C-h m 能够查看当前主模式的文档。
>> 把光标移动到下一行。 >> 用 C-l C-l 将本行带到屏幕的最上方。 >> 输入 C-h m,看看 Text 模式与 Fundamental 模式有哪些不一样。 >> 输入 C-x 1 关掉文档窗格。
主模式之因此称之为“主(major)”模式,是由于同时还有“辅模式”(minor mode)存在。辅模式并不能替代主模式,而是提供一些辅助的功能。每一个辅模式 均可以独立地开启和关闭,跟其它辅模式无关,跟主模式也无关。因此你能够不 使用辅模式,也能够只使用一个或同时使用多个辅模式。
有一个叫作自动折行(Auto Fill)的辅模式颇有用,特别是在编辑天然语言文本 的时候。启用自动折行后,Emacs 会在你打字超出一行边界时自动替你换行。
用 M-x auto-fill-mode <Return> 启动自动折行模式。再用一次这条命令,自 动折行模式会被关闭。也就是说,若是自动折行模式没有被开启,这个命令会开 启它;若是已经开启了,这个命令会关闭它。因此咱们说,这个命令能够用来 “开关(toggle)”模式。
>> 如今输入 M-x auto-fill-mode <Return>。而后随便敲点什么,直到你看到它
分红两行。你必须敲一些空格,由于 Auto Fill 只在空白处进行断行。 【输入空格对英文来讲是必须的,而对中文则没必要。】
行边界一般被设定为 70 个字符【这里指英文字符】,你能够用 C-x f 命令配合 数字参数来从新设定它。
>> 输入 C-x f 并传递参数 20: C-u 2 0 C-x f。
而后输入一些文字,观察 Emacs 的自动折行动做 最后再用 C-x f 将边界设回 70。
若是你在段落的中间作了一些修改,那么自动折行模式不会替你把整个段落从新 折行,你须要用 M-q 手动折行。注意,光标必须位于你须要折行的那一段里。
>> 移动光标到前一段中,而后输入 M-q。
14 搜索(SEARCHING)
Emacs 能够向前或向后搜索字符串(“字符串”指的是一组连续的字符)。搜索命 令是一个移动光标的命令:搜索成功后,光标会停留在搜索目标出现的地方。
Emacs 的搜索命令是“渐进的(incremental)”。意思是搜索与输入同时进行: 你在键盘上一字一句地输入搜索词的过程当中,Emacs 就已经开始替你搜索了。
C-s 是向前搜索,C-r 是向后搜索。不过手别这么快!别着急试。
在按下 C-s 以后,回显区里会有“I-search”字样出现,代表目前 Emacs 正处 于“渐进搜索”状态,并等待你输入搜索字串。按 <Return> 能够结束搜索。
>> 输入 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-s 和 C-r 这些用于搜索的命令。)
前面说的都是“向下”搜索,若是想“向上”搜索,能够用 C-r。C-r 与 C-s 相比除了搜索方向相反以外,其他的操做都同样。
15 多窗格(MULTIPLE WINDOWS)
Emacs 的迷人之处不少,可以在屏幕上同时显示多个窗格就是其中之一。
>> 移动光标到这一行,而后输入 C-l C-l。
>> 如今输入 C-x 2,它会将屏幕划分红两个窗格。
这两个窗格里显示的都是本篇快速指南,而光标则停留在上方的窗格里。
>> 试试用 C-M-v 滚动下方的窗格。
(若是你并无 META 键,用 ESC C-v 也能够。) 【向上滚动是 C-M-S-v,也就是同时按住 CONTROL、META 和 SHIFT 再按 v】
>> 输入 C-x o(“o”指的是“其它(other)”),
将光标转移到下方的窗格。
>> 在下方的窗格中,用 C-v 和 M-v 来滚动。
同时继续在上方的窗格里阅读这些指导。
>> 再输入 C-x o 将光标移回到上方的窗格里。
光标会回到它在上方窗格中本来所在的位置。
连续使用 C-x o 能够遍历全部窗格。“被选中的窗格”,也就是绝大多数的编辑 操做所发生的地方,是在你不打字时闪烁光标的那个窗格。其余的窗格有它们自 己的光标位置; 若是你在图形界面下运行 Emacs ,这些光标是镂空的长方形。
当你在一个窗格中编辑,但用另外一个窗格做为参考的时候,C-M-v 是颇有用的命 令。无需离开被选中的窗格,你就能够用 C-M-v 命令滚动另一个窗格中的文 字。【好比翻译和校对就很适合用这种方式进行。】
C-M-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 关掉下方窗格。
(若是你在下方的窗格里输入 C-x 1,那么就会关掉上方的窗格。你能够把这个 命令当作是“只保留一个窗格”――就是咱们正在编辑的这个。)
不一样的窗格能够显示不一样的缓冲区。若是你在一个窗格里用 C-x C-f 打开了一个 文件,另外一个窗格并不会发生什么变化。任何一个窗格里均可以用来打开文件。
用下面的方法能够在一个新开窗格里打开文件:
>> 输入 C-x 4 C-f,紧跟着输入一个文件名,再用 <Return> 结束。
能够看到你指定的文件出如今下方的窗格中,同时光标也跳到了那里。
>> 输入 C-x o 回到上方的窗格,而后再用 C-x 1 关掉下方窗格。
16 多窗口(MULTIPLE FRAMES)
Emacs 能够建立多个窗口。窗口由许多窗格以及菜单、滚动条、回显区等组成。 在图形界面下,多个窗口能够同时显示出来。在文本终端中,只能同时显示一个 窗口。
>> 输入 M-x make-frame <Return>。
能够看到一个新的窗口出如今了你的屏幕上。
你能够在新的窗口里作最初的窗口里能够作的任何事情。第一个窗口没有什么特 别的。
>> 输入 M-x delete-frame <Return>.
这个命令将会关闭选中的窗口。
你也能够经过图形系统来关闭某个窗口(一般是在窗口上面的某个角落里的一个 “X”按钮)。若是你关闭的是 Emacs 进程的最后一个窗口, Emacs 将会退出。
17 递归编辑(RECURSIVE EDITING LEVELS)
有时候你会进入所谓的“递归编辑”。递归编辑状态由位于状态栏的方括号所指 示,其中包含了用小括号来指明的模式名称。好比说,你有时可能会看到 [(Fundamental)],而不是 (Fundamental)。【好比在用 M-% 进行交互式替换的 时候你又用了 C-s 进行搜索,这时替换模式并无结束,但你又进入了搜索模式, 这就是所谓的递归编辑。】
离开递归编辑能够用 ESC ESC ESC。这是一个最通用的“离开”命令,你甚至可 以使用它来关掉多余的窗格,或者离开小缓冲。
>> 输入 M-x 进入小缓冲;而后输入 ESC ESC ESC 离开。
你不能用 C-g 退出递归编辑,由于 C-g 的做用是取消“本层递归编辑以内”的 命令和其参数(arguments)。
18 得到更多帮助(GETTING MORE HELP)
本快速指南的目的仅仅是帮助你在 Emacs 的海洋里下水,不至于一筹莫展望洋兴 叹。有关 Emacs 的话题可谓汗牛充栋,这里天然是难尽万一。不过 Emacs 很理 解你求知若渴的心情,由于它提供的强大功能实在是太多了。为此,Emacs 提供 了一些命令来查看 Emacs 的命令文档,这些命令都以 CONTROL-h 开头,这个字 符也所以被称为“帮助(Help)字符”。
要使用帮助(Help)功能,请先输入 C-h,而后再输入一个字符以说明你须要什 么帮助。若是你连本身到底须要什么帮助都不知道,那么就输入 C-h ?,Emacs 会告诉你它能提供了哪些帮助。若是你按了 C-h 又想反悔,能够用 C-g 取消。
(若是你按 C-h 以后没有任何帮助信息显示出来,那么试试 F1 键或者 M-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 f previous-line <Return>。
Emacs 会给出它所知道的全部有关“实现 C-p 命令功能的函数”的信息。
C-h v 用来显示 Emacs 变量的文档。Emacs 变量能够被用来“定制 Emacs 的行 为”。一样,你须要输入变量的名称。
C-h a 相关命令搜索(Command Apropos)。 输入一个关键词而后 Emacs 会列出全部命令名中包含此关键词 的命令。这些命令全均可以用 M-x 来启动。对于某些命令来讲, 相关命令搜索还会列出一两个组合键。
>> 输入 C-h a file <Return>。
Emacs 会在另外一个窗格里显示一个 M-x 命令列表,这个列表包含了全部名称中含 有“file”的命令。你能够看到像“C-x C-f”这样的组合键显示在“find-file” 这样的命令名的旁边。
>> 用 C-M-v 来回滚动 help 窗格,多试几回。
>> 输入 C-x 1 来删除 help 窗格。
C-h i 阅读手册(也就是一般讲的 Info)。 这个命令会打开一个称为“*info*”的特殊缓冲区,在那里, 你能够阅读安装在系统里的软件包使用手册。要读 Emacs 的使 用手册,按 m emacs <Return> 就能够了。若是你以前从没用 过 Info 系统,那么请按“?”,Emacs 会带你进入 Info 的使 用指南。在看完本快速指南以后,Emacs Info 会成为你的主要 参考文档。
19 更多精彩(MORE FEATURES)
想学习更多的使用技巧,Emacs 使用手册(manual)值得一读。你能够读纸版的 书,也能够在 Emacs 中读(能够从 Help 菜单进入或者按 C-h r)。提两个你 可能会很感兴趣的功能吧,一个是能够帮你少敲键盘的 completion(自动补全), 另外一个是方便文件处理的 dired(目录编辑)。
Completion 能够替你节省没必要要的键盘输入。好比说你想切换到 Message 缓 冲区,你就能够用 C-x b *M<Tab> 来完成。只要 Emacs 可以根据你已经输入的 文字肯定你想要输入的内容,它就会自动帮你补齐。Completion 也可用于命令 名和文件名。有关 Completion 的详细说明能够在 Emacs Info 中的 “Completion”一节里找到。
Dired 可以在一个缓冲区里列出一个目录下的全部文件(能够选择是否也列出子 目录),而后你能够在这个文件列表上完成对文件的移动、访问、重命名或删除 等等操做。Dired 也在 Emacs 使用手册中有详细介绍,参见“Dired”一节。
Emacs 使用手册里还有许许多多的精彩功能等着你来了解。
20 总结(CONCLUSION)
要退出 Emacs 请用 C-x C-c。
本文彻底是为零起点新手所写的起步教程。若是你以为哪里还看不明白,千万不 要怀疑本身,那必定是咱们没有写好。咱们永远欢迎你的不满和抱怨。
21 翻译(TRANSLATION)
翻译:孙一江 <sunyijiang@gmail.com> 维护:薛富侨 <xfq.free@gmail.com> 校对:水木社区(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 使用手册里的术语表。
22 版权声明(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 (C) 1985, 1996, 1998, 2001-2014 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 License along with GNU Emacs. If not, see http://www.gnu.org/licenses/.
Please read the file COPYING and then do give copies of GNU Emacs to your friends. Help stamp out software obstructionism ("ownership") by using, writing, and sharing free software!
【下面为版权声明的译文,仅供参考。实际法律效力以英文原文为准。】
本快速指南沿袭自历史悠久的 Emacs 快速指南,可上溯至 Stuart Cracraft 为最 初的 Emacs 所做的版本。
本篇指南是 GNU Emacs 的一部分,并容许在下列条件的约束下发行其拷贝:
Copyright (C) 1985, 1996, 1998, 2001-2014 Free Software Foundation, Inc.
本文件为 GNU Emacs 的一部分。
GNU Emacs 为自由软件;您可依据自由软件基金会所发表的GNU通用公共受权 条款,对本程序再次发布和/或修改;不管您依据的是本受权的第三版,或 (您可选的)任一往后发行的版本。
GNU Emacs 是基于使用目的而加以发布,然而不负任何担保责任;亦无对适 售性或特定目的适用性所为的默示性担保。详情请参照GNU通用公共受权。
您应已收到附随于 GNU Emacs 的GNU通用公共受权的副本;若是没有,请参照 http://www.gnu.org/licenses/.
敬请阅读文件“COPYING”,而后向你的朋友们分发 GNU Emacs 拷贝。让咱们以使 用、编写和分享自由软件的实际行动来共同祛除软件障碍主义(所谓的“全部 权”)!