现阶段(2021年10月)对于Vim和Emacs的思考

最近由于在工作调整,加上国庆节,时间稍微宽裕一点,于是重新启动了对Emacs的学习,这次稍微找到了点感觉:包括使用的感觉和对Emacs的理解。

为什么一直对Emacs念念不忘?作为一个使用了多年Vim的人,经常看到一些言论说Emacs的神奇之处,自己却因为不懂Emacs而无法切身体会,所以一直引为遗憾。

之前为什么屡屡上手Emacs失败?这几天算是想明白了:自己之前对于Emacs的学习,都是按着教程去学习Emacs的那套快捷键,这其实大大打击了我的积极性,因为我已经掌握了Vim的编辑方式。更具体来说,Vim的理念我更认可也更熟练,所以对于Emacs的学习就让我很迷茫,因为我觉得这并不比Vim高效。

直到最近,这一次我从Sapcemac作为切入点开始学习,强迫自己使用Emacs,终于找了一点感觉:Emacs最牛逼的地方并不在于它的文本编辑能力,而在于它的集成能力(或者说扩展性)。

这也是为什么Emacs被称为“神之编辑器”(神不仅用它来编辑,还用它来完成一切事情),而Vim被称为“编辑器之神”(它就是一个纯粹的编辑器,但是在编辑这个领域已经登峰造极,可谓之神)。

所以,要用好Emacs,就不能把它当作一个编辑器,而要侧重在Emacs里面完成所有的任务(故坊间流传一个说法:Emacs是伪装成编辑器的操作系统)。

举一个例子,我们用Vim编辑一个代码文件,肯定得退出来,在命令行触发构建(当然,在Vim8支持异步命令之后,也可以在Vim内部完成,但是其闭环体验和Emace相去甚远),但在Emacs中编辑、构建以及其他全部的行为都是在其内部完成的,这主要是得益于它灵活的设计和Lisp语言丰富的表达力。

理解了这个,就要思考几个问题:

问题一:很多Emacs的信徒宣称可以在Emacs里面完成所有操作(看图片、发邮件、看网页、GTD、etc),由此带来的一致的体验会带来极致的效率,这个现实吗?

我觉得,如果日常工作流非常简单(或者说90%的时间都在Coding),这个是现实的。但是,现在的软件功能越来越复杂,Emacs很难提供等价的体验:比如复杂的网页还是得浏览器打开、企业微信/Office这些专有软件干的事情Emacs也很难集成进去(听说QQ聊天可以用Emacs做到)。

个人认为,30年前,Emacs或许可以伪装成操作系统,但是发展到今天,Emacs的使用者必须认识到很多专有领域的软件已经发展的非常先进,完全不是Emacs可以“集大成”的了。

当然了,从另一个角度来说,如果我们能简化日常的工作流程,把一些高频率的、Emacs可控制的行为全部集中到一个软件里面,当然也是非常有价值的(和Windows上的Total Commander有异曲同工之妙)。

问题二:为什么Emacs的用户总是鄙视Vim的用户?

有一个经典段子说:Vim唯一比Emacs有价值的地方就在于它能帮助乌干达的儿童。。。。

我个人认为这种比较其实是不公平的,前面已经说了:Emacs更像是一个操作系统,所以我更倾向于拿Tmux+Zsh(on-my-zsh)+Vim(三剑客)来和Emacs对标,三剑客套装的牛逼之处就在于补齐了Vim在编辑之外的短板,也避开了Vimscript表达力不足的毛病。举个例子,Spacemacs集成了Treemac作为文件管理器,Vim虽然有NERDTree,但是功能明显没那么强大。但是,通过三剑客,我们可以用vifm来作为文件管理器。

个人认为,三剑客如果使用熟练,是丝毫不逊色于Emacs的。

问题三:Emacs大包大揽的风格是否有悖于Unix的哲学?

Unix推崇一个工具做好一件事,彼此之间通过组合来协作。这么看来Emacs是不是过于臃肿了?我觉得还好,因为Emacs本身就是一个平台,它只是提供能力,至于如何使用是用户自己选择的。至于Tmux+Zsh+Vim就不必说了,通过命令行可以集成无数通过各种语言实现的工具,完全符合正统的Unix哲学。

以上,是个人现阶段对于Emacs和Vim的一点认识。由于Emacs尚在学习,后面有的认识可能推翻或者修正。

总而言之,实践是检验真理的唯一标准。