# 前言
本系列内容基于 Emacs China
提供的教程[1]。
Emcas
的深入学习可以阅读 GNU
提供的教程[2]。
# 预备说明
快捷键 | 功能 |
---|---|
C | Ctrl 键 |
S | Shift 键 |
M | Alt 键 |
RET | Enter 键 |
C-x d RET 代表先同时按下 Ctrl 和 x,再按下 d,最后再按下 RET。
Emacs
里的大部分地方都支持自动补全,快捷键是 TAB
# 快捷键
# 光标移动
快捷键 | 功能 |
---|---|
C-f | 前移一个字符,f 代表 forward; |
C-b | 后移一个字符,b 代表 backward; |
M-f | 前移一个 word; |
M-b | 后移一个 word; |
快捷键 | 功能 |
---|---|
C-p | 上移至前一行,p 代表 previous; |
C-n | 上移至下一行,n 代表 next; |
快捷键 | 功能 |
---|---|
C-a | 移至行首,a 代表 ahead; |
C-e | 移至行尾,e 代表 end; |
M-a | 前移一个 sentence; |
M-e | 后移一个 sentence; |
# 屏幕移动
快捷键 | 功能 |
---|---|
C-v | 屏幕向下滚动一页,类似于键盘中的 PgUp; |
M-v | 屏幕向上滚动一页,类似于键盘中的 PgDown |
C-l | 屏幕光标内容居中 |
M-< | 光标移动到文件最开始的位置,注意 < 需要按住 Shift 键,所以实际上是按住三个键; |
M-> | 光标移动到文件最末尾的位置,同上,需要按住 Shift 键; |
# 接收数字作为参数
上述很多命令均只能移动一个字符、一个 word 或者一个 sentence。在按下按键之前,先按下 C-u,再输入一个数字之后,再按下上述命令,则可以移动更多数量的单位。
例如:C-u 8 C-f 向前移动 8 个字符。
# 其他
打断组合键为 C-g ,它用于终端取消之前的指令。
编辑器内显示行号可使用 M-x linum-mode
来开启。
# 文本编辑操作
插入和通常编辑器的文本输入一样。RET 表示回车键 Enter,用于换行。
使用 DEL 删除,它表示 Backspace 键。这一点也和通常的文本编辑器相同。
以上这两点是我想要改用 Emacs
的原因,之前尝试深入学习过 Vim
,但是切换模式这种操作方式,让我这种用习惯了普通编辑器的人很不适应。快捷键倒是可以多用多记,但是操作习惯要改变还是很难的,何况平常打字都是这种习惯。因此, Emacs
这种类似于普通编辑器的快捷键方式更符合我自身的习惯。
除此之外,还有更高级的一些插入和删除方式。
# 插入
上文中有提到 C-u 8 C-f 这种形式的命令,普通文本的插入也可以使用这种方式。向编写 C++
代码,添加注释的时候,可能会插入很多个 *
号,使用 C-u 8 * 就可以插入 8 个 *
号。
# 删除
快捷键 | 功能 |
---|---|
DEL | 删除(Delete)光标前的一个字符; |
C-d | 删除光标后的一个字符; |
快捷键 | 功能 |
---|---|
M-DEL | 剪切(Kill)光标当前所在 word 的起始位置到光标位置的字符; |
M-d | 剪切光标到光标当前所在 word 的终止位置的字符; |
快捷键 | 功能 |
---|---|
C-k | 剪切光标到当前行末尾的所有字符;(不包含换行符) |
M-k | 剪切光标到当前句子末尾的所有字符;(他们的差别类似于 C-e 和 M-e) |
对一个非空行使用 C-k 并不会剪切该行的换行符,此时如果再按下一次,则换行符也被剪切掉,而 Windows
中通常的 Ctrl-x 则直接包含换行符。
如果在 C-k 前接上 C-u 2 这样的内容,则表示剪切多行,并且包含换行符。这个连续按多次 C-k 是不一样的。
另一点不同则是,在同一行连续使用 C-k,多次剪切的内容会存储在一起,在粘贴的时候所有内容会一并粘贴。
Emacs
文档中使用 Delete 表示删除,Kill 表示剪切的含义。
# 选中
在想要选中的起始位置按下 C-SPC,即 Ctrl 和 Space 键,此时底部信息栏会显示 Mark set
,表示进入选中模式;移动光标直到其包含所有想要选中的内容,按下 C-w 会将选中的文本剪切。使用 M-w 则是进行复制。
# 粘贴
Emacs
中使用 yank 表示粘贴,使用 C-y 进行粘贴操作。
如果想要粘贴的内容不是最近剪切的,那么使用 M-y 可以对粘贴的内容进行替换,连续按下便会一直替换,直到又重新循环到最近剪切的内容。
而 M-y 还可以添加正整数或者负整数作为参数,选择粘贴的内容。
# 搜索
Emacs
搜索是增量式(incremental)的,当输入内容时即开始搜索。使用 C-s 向前跳转,使用 C-r 向后跳转。按下回车将会终止搜索,C-g 同样能够终止搜索。
# 撤销
C-/ 用于撤销。连续使用多次则可以逐次撤回过往的编辑内容。C-_ 与 C-/ 等价。但是这个按键位置有点奇怪...
C-x u 也是撤销功能,但是需要按两次按键,不那么方便。
# 文件操作
Emacs
界面底部的信息栏左下角,显示当前编辑的文件名称。
快捷键 | 功能 |
---|---|
C-x C-f | 打开目标文件, f 代表 find/file; |
C-x C-s | 保存当前缓冲区(Buffer), s 代表 save。 |
C-x 是 Emacs
的快捷键中常用的前缀命令。其它常见的还有 C-c, C-h。
Emacs
存储文件时,会临时在原文件名称的末尾添加 ~
后缀(这点和 Office
有些类似),以防止原文件丢失。
# 缓冲区
如果我们在已有打开文件的同时,打开一个新的文件,之前的文件仍旧保留在 Emacs
的缓冲区之中。此时可以通过 C-x C-f 指令切换到该文件(就是打开目标文件的指令)。
使用 C-x C-b 可以查看当前的缓冲区列表。再使用 [C-x 1] 可以退出缓冲区列表界面。
当有多个缓冲区希望保存时,可以使用 {C-x s}{.kbd .red},此时 Emacs
会对每个发生了修改的缓冲区进行询问,我们可以选择是否保存该缓冲区。
# 关闭 Emacs
使用 C-x C-c 关闭 Emacs
,在关闭前,会询问是否真的要关闭软件。
# 扩展指令集
Emacs
可以使用 C-x 或者 M-x 使用扩展指令,C-x 接续一个按键指令,而 M-x 则接续一个较长的命令名称,通常用于使用频率较少的指令。
对于 M-x 执行的指令,可以通过 Tab 进行补全。
# 窗口
在分屏操作之前,先学习一个新的命令 C-x 1,它将当前光标所在窗口最大化,并关闭其他所有窗口。
C-x 2 在窗口底部创建一个新的子窗口。通过 C-x o 可以在不同窗口之间进行切换,o 在这里表示 other。可以通过 C-M-S-v 使得另一个窗口的内容向下滚动,而不需要切换窗口。
C-x 3 则是在当前窗口右侧创建一个新的子窗口。
C-x 5 2 可以创建一个新的窗口,C-x 5 0 可以关闭当前光标所在窗口。当我们较慢速度输入指令的时候,可以看到其他可用的指令,这是只需要按下对应的按键即可。
# 获取帮助
Emacs
是一个富文档编辑器(Self document, extensible editor),而下面的三种方法在学习 Emacs 的过程中也非常重要。他们分别是:
快捷键 | 功能 |
---|---|
C-h c | 显示快捷键的功能; |
C-h k | 寻找快捷键对应函数的文档; |
C-h v | 寻找变量的帮助信息; |
C-h f | 寻找函数的帮助信息; |