EMACS-DOCUMENT

=============>集思广益

抛弃宗教因素对比Vim和Emacs

Note: 本文我最初是写在 Quora 上的,然后经过润色一番后重新发布在这里.

1 介绍

在中坚的技术团体中(In hard core technical circles),公然讨论这两个编辑器的优缺点是不被允许的. 在过去一段时间里,围绕着这个问题的争论引起了很严重的后果(当你回过头来思考为什么会有这么严重的后果时,会觉的这真是荒谬),并且持续了很长时间. 两边的支持者们很少倾听对方的理由,并且大多数的人都认为这是个二选一的问题. 说真的,我觉得这种观点完全没有任何意义.

我觉得我很适合回答这个问题,因为我使用这两种编辑器有大概25年了.(15年的时间一直在用Vim,还有10年的时间用emacs).

首先我要稍微批评一下你的问题[文本编辑器:哪个更好,Vim还是Emacs?为什么?]. 你问的问题太简单了,这样根本无法回答. Emacs 和 vi 都是很优秀的编辑器,它们都善于处理某一类的问题 - 但它们的强大体现在不同的方面,这使得它们在解决某些问题时要强于对方.

2 Vi/Vim

在我看来,若你的目标仅仅是编辑文本,那么Vim可能更适合你. 它的模式编辑(modal editing)能力使得它处理起文本来相当快速,同时它提供了大量的命令和快捷键来高效地进行定位和移动文本,这使得它的潜能无可限量.

近年来,各种扩展技术被应用于Vi(a-la Vim),这使得它可以以各种不同的方式进行扩展,但是以我个人的经验来看, 它的这种编辑范式和机制限制了它的扩展性,使它难于完成你像要作的事情.

例如,对我来说压倒骆驼的最后一根稻草是想为Vim添加类似IDE那样的自动补全与重构方法/成员变量的功能. 目前在Vim上有了许多的解决方案,但是它们要么完全无法工作,要么需要安装那些难以构建与安装的C共享库,而这使得我的Vim变得很不稳定. 当你知道你的你的编辑器可能在编辑当中崩溃时,你可的仔细考虑一下了.

注意,上面的场景其实与编辑文本根本没半点关系. 这是将Vim强制改造成IDE的必然结果.

有些人提到Vi/Vim哪都有,这是它的一大优势. 但Vi/Vim只是默认安装于UNIX系统上而已,然而这并没有什么卵用.

Vim用户建议看一下Vimcasts 以及Drew Neil's的那本Practical Vim.

3 Emacs

我个人更倾向于把Emacs看成是一个极度强力的编程环境而不仅是一个文本编辑器. 只是它同时被优化用于进行文本工作,其结果是,它也具有很强大的文本编辑功能了.

我知道,看起来我似乎只是在玩文字游戏,但是相信我,我并没有. 如果你想创建一个完全适合你需求的的超级强力的编程环境,那么Emacs无疑是你的最佳选择.

Emacs十分擅长于控制子进程, 因此,如果你使用Python编程,emacs会在内部调用Python解释器. 你可能会觉得奇怪,为什么要这样作呢? 这是因为,接下来你可以一边编码,一边试运行一些代码并看到运行的结果. Emacs甚至可以在远程机器上运行Python解释器然后将它连接到你的编辑session中.

Emacs的核心是emacs lisp - elisp是emacs超能力的来源. 它是emacs的唯一扩展语言,但是它可以用来作任何事情. 即使不学习elisp,你也可以高效的使用emacs, 但代价是,既然你跟普通大众一样,那么当你发现某个mode或其他包在某些地方不符合你的需求时,你会变得不知所措🙂

如果你乐意,你可以使用emacs作为你的整个工作环境 - 你可以用它编辑文本,撸代码,聊天,对源码进行版本控制(例如Git)等等几乎任何事情.

这也是许多非emacs用户攻击的地方:"它根本不是个编辑器,它就是个操作系统!". 要我说,没错,但这才是Emacs强力的地方啊🙂

比较好的Emacs用户的入门资料有 - Pragmatic Emacs 以及both stellar的Mastering Emacs 这本书(同时也是网站).

4 总结

答案很长,但是考虑到问题本身很敏感也很复杂,因此我想这个长度是正常的.

若你主要是编辑一些存文本,或者只需作少量的编码工作,或者只是编辑一些静态配置文件,又或者你需要所用的编辑器在所有的UNIX操作系统中都有安装,那么Vim无疑是你的最佳选择.

若你的需求很复杂,并且时常需要自己来突破编辑器的限制, 需要编辑器提供类似IDE那样的功能, 又或者你是个开发狂热者,喜欢编码并且需要你的环境提供最大化的定制能力,则直接用Emacs吧

最后,抛开那些辩论和信仰,只要试一下哪种编辑器会使你更有效率就行了. 又或者可以像我一样,同时使用两种编辑器! 通常当我在服务器上要快速改个什么东西,我会用vi;当我在我的台式机/笔记本上进行大量的编辑时,我会使用emacs.

工具就是工具,哪个好用就用哪个.

[ Update 07/16/2015: 有热心的读者提醒我使用 evil-mode 可以兼顾两者的优点🙂 它为Emacs提供了与vim完全兼容的操作方式,并且已经很完善了. 它工作得很好,而且我在刚从Vi转到Emacs时用过它,我由衷地推荐.]