Emacs 的基本使用
在命令行下执行命令“emacs”,既可以启动 Emacs 编辑器。
Emacs 给人的第一感觉要比 vi 好,主要是因为它是“所见即所得”的编辑器,与我们常用的文本界面的编辑器很像,不需要像 vi 那样要在不同工作模式下来回切换。但是不出几秒钟,你就会发现你彻底错了。因为你不但发现无法保存你刚才录入的内容,甚至如何退出都成了问题(Ctrl+c、Ctrl+d 都不管用,只有 Ctrl+z 能够将他推入后台,然后 kill 掉它)。眼看着界面上的那些“熟悉”的菜单项,怎么你都点不开(在文本界面下的情景,tab 键不管用,鼠标也不管用,图形界面除外)。难道 Emacs 的上面的的那些菜单项都是摆设不成?
Emacs 的菜单项不是摆设,只是需要特殊的快捷键才能呼出,这个快捷键就是“F10”。而且 Emacs 的菜单项也不是在顶部列出的,而是在屏幕下方出现的。呼出菜单项后,按照屏幕提示按下快捷键来展开Ḁ一个菜单项,如“f”键展开“File”菜单项、“e”键展开“Edit”菜单项……Emacs 在这个地方没有返回上一步的设定,如果按错了键,展开了错误的菜单项,你只能选择按快捷键“Ctrl+g”或连续按三次“ESC”键来来关掉菜单,重新按“F10”开始。
快捷键“Ctrl+g”和三次“ESC”键并不只是针对取消菜单而设定的,其实它们能够取消任何没有实际完成的操作。你可能会对我的这个说法感到有些困惑:难道 Emacs 有很多不能实际完成的操作吗,你还要特意强调这一点?我说:是的,会有很多,现在不解释,马上你就明白了。
在 Emacs 中保存刚刚编辑的内容需要使用快捷键“Ctrl+x Ctrl+s”;打开一个文件或创建一个新文件需要使用快捷键“Ctrl+x Ctrl+f”;退出 Emacs 需要使用快捷键“Ctrl+x Ctrl+c”……明白为什么要取消了吧?快捷键这么复杂,难免有中间弄错的情况。估计你现在就已经紧张起来了,是不是想问:Emacs 是不是做什么操作都需各种各样的快捷键啊?是的,Emacs 除了向文档中录入内容之外,都需要使用快捷键。而这些快捷键在背后所做的事
情,实际上就是在执行着由 Lisp 语言所编写的各种“宏”或者命令。每一个快捷键,就对应着一个命令。所以,用 Emacs 用到你手软,是一点都不稀奇的事情。
Emacs 这样设计的好处就是不用像 vi 那样需要在各种工作模式下来回切换,就能够提供各种 vi 所能提供的功能。如果能够熟练掌握,甚至形成条件反射,势必会极大的提高文本的编辑效率。而经验告诉我们,到处充斥着快捷键的软件,很容易会形成条件反射。使用五笔输入汉字的同学们肯定深有体会。你若问他们键盘的字根都是什么,估计得到的回答都是“忘干净了”,但是你要是随便说出一个字,他马上就能告诉你按哪几个键。Emacs 就会有如此的效果,运指如飞的酷劲绝对会让你周围的人对你恨之入骨,因为妞都让你泡了。唯一的不足就是有点浪费脑细胞,那就多吃几个核桃罢。好了,不闲扯了,我们还是回到正题,继续介绍 Emacs 的使用吧。
刚才我们说道,每一个快捷键,都会对应着一个 Emacs 的宏。没错的,就比如执行“保存”功能的“Ctrl+x Ctrl+s”快捷键,它们对应的是 save-buffer 这个宏;而用于退出的“Ctrl+x Ctrl+c”快捷键,对应的则是 save-buffers-kill-terminal 宏。而这些宏实际上在 Emacs 是可以手工执行的,方法就是使用快捷键“Alt+x”,这个时候会在屏幕的左下角出现提示“M-x”,在其后面可以输入具体的宏名,按回车就能执行。如果“Alt+x”不生效(Ḁ些系统Alt 键定义不同),可以使用“Esc x”快捷键。如果对宏名有些记不太准,可以在输入几个字符后,按下“tab”键寻求“补全”功能的帮助。其实学习 Emacs 最主要的就是学习这些宏,或者说命令。而为了简化录入命令的过程,它们绑定快捷键以加快录入速度。Emacs 默认内置了很多快捷键,比较常用的见表所示内容。
序号 | 命令 | 快捷键 | 功能 |
---|---|---|---|
1 | move-beginning-of-line | Ctrl+a 光标移动到行首 | 相当于按 home 键 |
2 | move-end-of-line | Ctrl+e | 光标移动到行尾,相当于按 end 键 |
3 | forward-char | Ctrl+f | 光标向左移动一个字符,相当于 left 键 |
4 | backward-char | Ctrl+b | 光标向右移动一个字符,相当于 right 键 |
5 | next-line | Ctrl+n | 光标向下移动一行,相当于 down 键 |
6 | previous-line | Ctrl+p | 光标向上移动一行,相当于 up 键 |
7 | forward-word | Alt+f 或 Esc f | 光标向左移动一个单词 |
8 | backward-word | Alt+b 或 Esc b | 光标向右移动一个单词 |
9 | beginning-of-buffer | Alt+<或 Esc < | 光标移动到文件头 |
10 | end-of-buffer | Alt+>或 Esc > | 光标移动到文件尾 |
11 | scroll-up | Ctrl-v | 光标移动到下一页,相当于 page down 键 |
12 | scroll-down | Alt+v 或 Esc v | 光标移动到上一页,相当于 page up 键 |
13 | set-mark-command | Ctrl+<空格>或 Ctrl+@ | 开启或关闭标记模式,相当于是切换选中状态 |
14 | mark-whole-buffer | Ctrl+x h | 相当于文档全选操作 |
15 | kill-region | Ctrl+w | 相当于 cut 操作 |
16 | kill-ring-save | Alt+w 或 Esc w | 相当于 copy 操作 |
17 | kill-line | Ctrl+k | 删除光标到行尾的所有内容 |
18 | delete-char | Ctrl+d | 删除光标所在的字符 |
19 | delete-backward-char | <退格> | 删除光标前的字符 |
20 | yank | Ctrl+y | 相当于 paste 操作 |
21 | yank-pop | Alt+y 或 Esc y | 相当于循环剪切板中的内容进行 paste 操作 |
22 | undo | Ctrl+_或 Ctrl+x u | 相当于 undo 操作isearch-forward Ctrl+s 前向增量搜索 |
23 | isearch-backward | Ctrl+r | 反向增量搜索 |
24 | save-bufer | Ctrl+x Ctrl+s | 保存文件 |
25 | write-file | Ctrl+x Ctrl+w | 文件另存为 |
26 | find-file | Ctrl+x Ctrl+f | 打开或者新建文件 |
27 | save-buffers-kill-terminal | Ctrl+x Ctrl+c | 保存并退出 |
28 | switch-to-buffer | Ctrl+x b | 切换已打开的文件。可以按“tab”键寻求“补全”帮助 |
29 | kill-buffer | Ctrl+x k | 关闭已经打开的文件 |