本篇文章是由学习GNU Emacs 24.5.1 (i686-pc-mingw32)
版本自带的帮助教程而来.
Emacs Tutorial
查看原文档的方式是: 打开Emacs, M-x help-with-tutorial
回车即可, M-x
意味着”Alt + x”(M - ALT / META / EDIT / ESC)
1. 光标的切换
C - p
C - b C - l C - f
C - n
这几个快捷键涵盖了Emacs里面光标位置的控制,请注意C - l
是L而不是1. 自上而下自左而右的顺序分别是上一行(Previous), 回退( Backword), 按光标位置将画面置中, 前进(Forward), 下一行(Next).
因为双手位于主键盘区域的操控,比将右手移至方向键区域来控制光标要来的舒适的多.
如果觉得一个字符一个字符移动还是太慢,可以尝试
M - f
/ M - b
它们是按照一个词语一个词语往前/后跳跃(这里的词指代英文,中文则是以标点符号作为判断点)
观察C - f / C - b
与M - f / M - b
之间的类比关系,可以知晓:
META系列的组合键通常操作的是由语言定义的单位(词,句子,段落)
CONTROL系列则是与语言无关的基本单位(字符,行)
同样的有C - a / C - e
移动光标到行头/尾, M - a / M - e
请自己思考并尝试一下.
M - < / M - >
用来移动到所有文字的头/尾.
之所以推荐使用这样的快捷键组合而不是使用方向键, 是基于下述的原因:
- 它们在任何键盘上都能用
- 当你熟练使用 Emacs 之后,你会发现用这些组合键比用方向键要快得多,因为你的手不需要离开打字区
- 一旦你习惯了使用这些组合键,你也可以很容易地适应其它更高级的光标移动命令。
操纵光标的基本命令集合如下:
C-f 向右移动一个字符
C-b 向左移动一个字符
M-f 向右移动一个词【对中文是移动到下一个标点符号】
M-b 向左移动一个词【对中文是移动到上一个标点符号】
C-n 移动到下一行
C-p 移动到上一行
C-a 移动到行首
C-e 移动到行尾
C-l 调整屏幕按光标位置置中
M-a 移动到句首
M-e 移动到句尾
M-< 移动到全文首
M-> 移动到全文尾
2.数字参数
作用是用来指定一个命令的重复次数, 比如:
C - u 3 C - p
就是将移到上一行的指令进行3次.
3.安全终止
如果Emacs对你的命令失去了响应,用C-g
来安全终止.同样这个可以用于终止数字参数.
4.那些被”封印”的命令
处于安全考虑,有些命令是被”禁用”的,防止初学者在不了解的情况下误用导致麻烦.
如果敲击了这类命令,会出现一个提示窗格,告诉你这个命令是做什么的并询问你是否确认要使用这个命令.
使用空格来确认, n
来拒绝
5.窗格(WINDOWS)
C-x 2或3
可以发现窗格被分为上下或是左右两部分
C-x o
可以让光标在不同的窗格里面切换,在不同的窗格中再次敲击分隔指令可以看到被再次分隔
C-x 1
用以将光标所在的窗格最大化并关闭其他窗格
6.插入与删除
<DEL> 删除光标前的一个字符
C-d 删除光标后的一个字符
M-<DEL> 移除光标前的一个词
M-d 移除光标后的一个词
C-k 移除从光标到“行尾”间的字符
M-k 移除从光标到“句尾”间的字符
上面所示的<DEL>
在大部分键盘上指代的是退格符,即”Backspace”
“删除”(delete)和”移除”(kill)之间确实是存在区别的,移除类似于剪切,可以通过C-y
(yank)来召回(类似于粘贴),但是删除的话就是清除不保留记录了(当然也可以通过撤销命令来找回)
C-<SPC>
可以用来高亮选择部分(中文输入法的该按键会被识别为切换中英文,可以采用C-@
来代替), C-w
来移除高亮部分
一个有趣的地方是,如果你在一行的开头按两次C-k
,会发现第一次移除了该行,第二次移除了该行的换行符并使后续内容整体上移一行. 但是C-k
对于数字参数的处理是特别的,如果你使用了C-u 2 C-k
,会发现直接移除了两行,而不是输入两次C-k
那样的效果.
7.召回
C-y
是召回你最后一次移除的内容,注意是最后一次.那怎么召回再前一次的移除的内容呢?只需要在C-y
之后继续按M-y
,可以多次按,就会一直返回更上一次移除的内容了.
移除一行,移动一下光标,然后再移除另外一行。
按 C-y 将第二次移除的那行召回来。
紧接着再按 M-y,它将会被第一次移除的那行取代。
试着再按几下 M-y 看看会发生什么。
再继续,直到第二行被召回来,然后再做个几次。
如果感兴趣,你可以试着给 M-y 指定一个正的或负的参数。
8.撤销(UNDO)
终于到了最激动人心的命令!!! 撤销
世上没有后悔药可以卖,但是编辑器往往都会有撤销这个美妙的功能,来弥补愚蠢的人类经常犯下的错误,让一切恢复原样.
C-/
但是撤销命令也有几个例外:
- 没有改变文字的命令不算(比如移动光标和滚动命令)
- 在键盘输入的字符以组为单位—每组最多20个字符—来进行处理,这是为了减少在撤销”插入文字”动作时所需要的操作次数
C-_
和 C-x u
这两个和 C-/
的作用是一样的,只是按起来比较麻烦(有些终端上面的C-/
其实是发送C-_
)
数字参数对于撤销来说就是进行几次的意义.
9.文件 (FILE)
Emacs只有在保存的时候才会对文件进行修改,同时会将存盘前的文件进行重命名保存,以免愚蠢的人类修改完之后又想反悔.
在Emacs编辑器的下方可以看到一条灰色的状态栏,比如正在看教程指引文件的你会看到的是”-:— TUTORIAL.cn”的文字, 这代表了你正在访问的文件.
C-x C-f
,该项指令用来寻找一个文件. 它需要一个参数,就是文件名.
输入过程中的字符会出现在屏幕最底栏,这里称为小缓冲 (minibuffer).在这里你可以使用Emacs编辑命令来编辑文件名.
C-x C-s
,该项指令用来存储文件.对原文件的重命名保存方式通常是在文件名末尾加一个”~”符号来加以区分.
如果对你来说这是个烦人的特性,可以这样来关闭它:
M-x customize-variable <Return> make-backup-files <Return>
(<Return>
意味着回车按键…)
不但可以寻找一个已有文件,还可以输入一个不存在的文件名,这也是Emacs**创建新文件**的方法.事实上,只有在存盘的时候才会真正创建该新文件.
10.缓冲区(BUFFER)
多次用C-x C-f
可以打开一个又一个文件,但是上一次打开的文件并非被关闭了. Emacs将每一个编辑的文件都保存在一个称谓”缓冲区”(buffer)的地方,用以下命令可以打开缓冲区列表:
C-x C-b
固然可以用C-x C-f
再次打开之前的文件,但是更好的是可以通过C-x b
来切换至曾经打开过文件的缓冲区.
如果在一个A文件中修改后,切换到另一个B文件,那么A文件还是存在于缓冲区中,并没有存盘.可以通过C-x b
切换过去再C-x C-s
来存盘,但是这样太麻烦了.我们有更简便的方式来完成:
C-x s
保存多个缓冲区
这会找到所有未保存的缓冲区并向你逐个询问.
11.命令集扩展(EXTENDING THE COMMAND SET)
Emacs的命令数不胜数,故使用了扩展(eXtend)命令来解决这个问题,它有两种风格:
-
C-x
字符扩展, C-x 之后输入另一个字符或者组合键 -
M-x
命令名扩展, M-x 之后输入另一个命令名
上面学过的寻找文件/保存文件/退出Emacs的命令都是属于第一者.
图形界面可以轻松地切换多个任务窗口,但如果是一些比如只能显示一个应用程序的文本终端时,你需要将Emacs”挂起”来切换至别的应用程序
C-z
来暂时离开Emacs. 它回到Shell但不会杀死Emacs. 通常可以用fg
或者%emacs
再次回到Emacs.
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
之后,屏幕底部会等待你输入命令名,可以通过repl s<TAB>
来帮你快速输入这个命令.
这个命令需要两个参数,被替换的字符串和替换它的字符串.
这会将光标之后的所有对应字符串进行替换.
12.自动保存(AUTO SAVE)
自动保存的文件名通常会在头尾各加一个”#”,并会在正常存盘后删除.
如果不幸发生时,请轻松地打开原来的文件(不是自动保存文件),然后键入:
M-x recover file <Return>
来恢复自动保存文件.(提示时输入yes)
13.回显区(ECHO AREA)
如果 Emacs 发现你输入多字符命令的节奏很慢,它会在窗格的下方称为“回显区”的地方给你提示。回显区位于屏幕的最下面一行。
14.状态栏(MODE LINE)
回显区上面灰色的一条即为状态栏.显示了Emacs的状态和正在编辑文字的一些信息.
-:**- TUTORIAL.cn 63% L749 (Fundamental)
63% — 表示光标在全文中的位置, 如果是在开头则会是 –TOP–, 末尾则是 –Bot–, 如果文件很小一屏足以展示, 则会是 –ALL–
L749 — 给出了光标所在的行号
最开头的 ** 号表示该文件被改动过, 如果是刚打开的文件是 –
(Fundamental) — 表示现在正在使用的编辑模式,缺省就是 Fundamental, 这是一种”主模式”. 在Emacs里面主模式林林总总, Lisp模式(用来编辑程序代码), Text模式(用来编辑各种自然语言文本的).
M-x fundamental-mode
就可以切换模式, 输入不同模式的名字即可
应该已经发现了,自动补全功能就是或 :)
C-h m
可以查看当前主模式的文档(可以试着查看Fundamental和Text模式的文档)
主模式之所以叫”主”(major), 因为还有”辅模式”(minor mode)的存在. 辅模式是独立存在,独立开关的. 所以你可以不用辅模式, 用一个辅模式, 或者是同时用多个辅模式.
辅模式在你查看主模式文档的一开始就有列出, 细心的人应该已经发现了.
M-x auto-fill-mode
可以开启一个自动折行的辅模式,在输入一次则是关闭.
C-u 20 C-x f
可以将自动折行的行边界字数(英文)改为20(默认是70)
M-q
手动换行, 如果在段落中间进行修改, 自动折行不会生效, 需要手动一下
15.搜索(SEARCHING)
Emacs可以搜索字符串, 以”渐进”(incremental)的形式, 即搜索和输入是同时进行的.
C-s / C-r
分别是向前/后搜索. 敲击命令后可以观察到主模式显示区域的改变.
撤销命令会回到开始搜索的地方, 而<Return>
则会停留在搜索结果上.
16.多窗格(MULTIPLE WINDOWS)
这正是Emacs众多迷人之处的其中之一.
C-l
多次输入会有三种不一样的功能
C-x 2
可以看到多出一个窗格, 这里用 C-M-v
可以让下面的窗格下翻页(光标还停留在上窗格, C-M-S-v
则是上翻页) (翻译和校对就很适合使用这样的功能)
C-x o
可以切换光标位置. o指的是other
对另外窗格翻页的操作, 如果你没有META键, 用ESC键替代的时候就需要注意按键顺序了, 必须先输入ESC, 再是C-v. 否则 C-ESC-v 这样的操作是没用的. (因为ESC本身是一个字符键, 而非C或M这样的修饰键(modifier key)
C-x 4 C-f
可以在新窗格里打开文件.
17.多窗口(MULTIPLE FRAMES)
M-x make-frame
可以显示一个新的窗口(而非窗格)
M-x delete-frame
用来关闭当前的窗口
18.递归编辑(RECURSIVE EDITING LEVELS)
比如看到主模式是 [(Fundamental)] 而非 (Fundamental), 那多半是因为进入了递归编辑.
ESC ESC ESC
来解除你的尴尬.
C-g
只能用于取消”本层递归编辑之内”的命令和参数(arguments)
19.获得更多帮助(GETTING MORE HELP)
C-h ?
?代表了一个字符, 用以说明你需要什么帮助, 如果你连自己需要啥都不晓得, 输入?
也是可以的. (如果这个无效, 可以试试F1
或者M-x help <Return>
最基本的一个帮助功能:
C-h c 组合键
可以给出该组合键命令的简要说明. 比如 C-h c C-p
C-p runs the command previous-line
这里显示了C-p对应的函数名, 即 previous-line
若是简要说明不能满足欲求不满的你(笑), 试试用C-h k
来替代C-h c
C-h f 函数名
用以解释一个函数 (e.g., C-h f previous-line <Return>
)
C-h v 变量名
用以显示变量的文档
C-h a 关键词
用以根据关键词列出所有相关的命令, 这些命令都可以用M-x
来调用. (e.g., C-h a file
)
C-h i
阅读手册, 只有你想不到(笑)
20.更多精彩(MORE FEATURES)
想学习更多的使用技巧,Emacs 使用手册(manual)值得一读。你可以读纸版的书,也可以在 Emacs 中读(可以从 Help 菜单进入或者按 C-h r)。提两个你可能会很感兴趣的功能吧,一个是可以帮你少敲键盘的 completion(自动补全),另一个是方便文件处理的 dired(目录编辑)。
Completion 可以替你节省不必要的键盘输入。比如说你想切换到 Message 缓冲区,你就可以用 C-x b *M 来完成。只要 Emacs 能够根据你已经输入的文字确定你想要输入的内容,它就会自动帮你补齐。Completion 也可用于命令名和文件名。有关 Completion 的详细说明可以在 Emacs Info 中的“Completion”一节里找到。
Dired 能够在一个缓冲区里列出一个目录下的所有文件(可以选择是否也列出子目录),然后你可以在这个文件列表上完成对文件的移动、访问、重命名或删除等等操作。Dired 也在 Emacs 使用手册中有详细介绍,参见“Dired”一节。
Emacs 使用手册里还有许许多多的精彩功能等着你来了解。