好用的插件能很大地提升在使用 emacs 时的效率,以下推荐的几个插件均为通用型插件,与具体的编辑内容无关。各插件的实际效果还是需要自己动手试过之后才能有很好的体会。
evil
链接
https://github.com/emacs-evil/evil
介绍
evil 是 emacs 上的 vim 模拟器,是我目前见过的最完善的 vim 模拟器,与 emacs 配合得也非常好。其本身也支持扩展,所以其也有不少扩展插件。纯粹从编辑角度来看,vim 比 emacs 的编辑效率更高。也有一句流传的话,大致意思为emacs 只缺一个编辑器
,所以在 emacs 上使用 evil 能把 vim 的快速编辑优势和 emacs 的强大扩展优势结合起来。熟悉 vim 或者追求高效编辑的朋友不可错过。
配置技巧
emacs 除了简单的编辑快捷键之外,大多数快捷键都以C-x
(window / buffer 相关)或C-c
(major / minor 模式命令相关)开头,而这两个快捷键在 vim 中不是必须的,所以 evil 也并没有占用这两个快捷键,这也是 evil 与 emacs 配合得好的原因之一。有了 evil 之后,很多快捷键都可以绑定到 evil 的 normal 或者 visual 模式下,而又因为空格
键在这两种模式下用处不大,所以绑定的快捷键用空格
起头,这样既方便又不会与其他任何快捷键有冲突。
avy
链接
https://github.com/abo-abo/avy
介绍
光标跳转一直是 终端编辑器 的软肋,想要把光标移动到任意指定位置,就算是用 vim,平均也需要按很多次快捷键,并且每次跳转,都需要眼睛进行大量跟踪工作,负担很大。以 vim 为例(不考虑仅使用hjkl
或方向键
这种最低效的方式),要把光标移动到任意指定位置,首先我们需要先确认指定位置所在行的行号,然后使用命令跳转到指定行,最后再应用w
/f
键若干次,把光标移动到指定列。这期间的行号确认和每次光标移动,眼睛都得一直跟踪,累人且效率低。
于是,光标跳转插件出现了,它们能让我们的眼睛只看着要跳转到的位置这一处即可,视线完全不需要移动,即可快速完成跳转,而 avy 则是 emacs 上的一个优秀的光标跳转插件。这类插件的使用方式大致为:假设当前屏幕的某处有一段文字This is a test.
,要把光标移动到test
单词的开头,那么我们只需要完成以下三步,并且,在这过程中我们只需要看着test
的开头处,视线无需移动:
- 按快捷键激活插件。
- 按
t
键(即test
的开头字母),这时候屏幕上所有的t
都会高亮,并且显示它们各自对应的快捷键,这里假设test
开头的t
对应的快捷键为gj
。 - 按
g
键然后按j
键,光标即跳转到了test
的开头。
ivy / counsel / swiper 三件套
链接
https://github.com/abo-abo/swiper
介绍
- ivy 是 emacs 的通用命令补全接口,为 counsel / swiper 提供基础支持,补全项通过 minibuffer 来显示。随着用户不断输入,ivy 将不断进行增量匹配,过滤掉不符合条件的补全项。
-
counsel 提供了很多 emacs 常用命令的自动增量匹配版本,包括 execute-extended-command (
M-x
) / find-file (C-x C-f
) / counsel-describe-function (C-h f
) / counsel-describe-variable (C-h v
) 等。有了 counsel,再也不用不停地按Tab
键补全命令了。 - swiper 是对 emacs 的 isearch 功能的强化,匹配的行将显示在 minibuffer 中。在 minibuffer 中选择不同的匹配行时,buffer 的显示内容将随之实时跳转。
company
链接
https://github.com/company-mode/company-mode
介绍
company 是 emacs 的文本补全框架,其用于显示补全项的 前端 和作为补全项来源的 后端 都可插拔。因此,我们可以对其进行定制来支持不同的补全方式和不同的编程语言。
这里值得提一下 ycmd (https://github.com/ycm-core/ycmd),它是一个后台服务,最主要的功能是代码补全,支持多种编程语言。其最突出的一点是对 模糊匹配 的良好支持。