最新学会了一些用 emacs readline 模式下的一些操作,比如在终端中移动光标到行首行尾(C-a, C-e),使光标按词移动(M-f, M-b)。然而实际体验下来,和理想中看到网上宣称的极大提升效率的说法还是有些落差。(本文用 emacs 官方文档的写法表示按键组合,C 是 Ctrl 键,M 在 emacs 编辑器中是 alt/option 键,在其他一些地方是 esc 键)
第一个原因是,按词移动并不好用,因为在 mac 终端中,作为 M 修饰键的是 esc 键,这个键不仅位置太远,还不能保持按下状态。比如说我想按词删除,每次摁 esc-delete 之间必须把两个键都抬起来,效率提升比较有限。
第二点,emacs 中最常用的替换方向键的几组按键(C-b, C-f, C-p, C-n),对我的帮助也不明显,因为最近使用的都是笔记本上的键盘,方向键离得不远,而且 ctrl 键的位置摁起来实在很别扭啊,远远没有左手摁 command,右手操作方向键顺手。但对于字母和方向键较远的键盘,或者是没有方向键的键盘,熟练这几个操作是非常有必要的。
接下来总结一下最常用的几组,即使你不用 emacs,它们能让你在使用终端的时候事半功倍:
- C-a, C-e:移动到行首或行尾
- C-k, C-y:删除从光标所在位置到行末的字符(kill),和粘贴(yank)最近 kill 的内容;注意这里虽然能实现类似剪切粘贴的效果,但用的不是操作系统的剪贴板
以上操作在 macOS 中大部分输入文本的地方都是通用的。接下来介绍的一个,主要还是在终端中用,它可以帮你快速找到之前用过的命令,非常实用:
- C-r:递归(recursively)搜索
这个说明起来相对复杂一些。在 emacs 编辑器中,C-r 的作用是将光标定位到之前最近的符合你随后输入内容的行;在终端中也是类似,你可以用这个方法快速找回之前使用过的一条命令。如果还想继续往前搜寻,就继续按 C-r,直到到顶了没有结果了,shell 会发出 beep 提示。
另一个实用的技巧是连按两次 C-r,会调出上一次的搜索,可以进一步节省执行重复搜索的时间。