emacs 的哲学

emacs 追求大而全的设计,并且为了贯彻这种理念,在很多方面做了妥协。所得的好处是,各种 PC 功能几乎都能找到对应的 emacs 实现,即使这个功能远远脱离了一个编辑器的范畴。也正因如此 emacs 被戏称为操作系统,但问题在于,大部分功能的 emacs 实现至今尚未完善,相比专精一项功能的软件仍有不小差距。因此 emacs 这种包罗万象的复杂性受到很多人质疑,就拿写代码来说,有 eclipse,pycharm,VS 等更为专一成熟的工具, 无论是 JAVA,python,还是 JS,emacs 中对应的开发环境都存在不少问题。尽管如此,我还是会选择用 emacs 进行工作,下面说说原因。

"大而全"的意义

首先,完全使用 emacs 工作,只需记住一套快捷键就能用在所有模式下,而且这套快捷键和 bash 一致,这能让你操作得更顺畅。其次,我在工作中经常产生思维跳动:在做一件事的时候,会忽然想到另一件事,需要中断思路,等处理完突发事件再返回之前的工作。整个中断的过程在 emacs 只需切换一下 buffer,对思维连续性造成的破坏最小。反之,如果不使用 emacs,那就必须先把手头的东西保存,切换窗口,打开另一个软件,弄完了再保存,最后再切换回来,这个中断过程就非常长了。而且因为切换了不同软件环境,大脑必须临时调整来适应包括快捷键在内的不同操作。这种切换跨度太大,再次回到工作中需要很长时间,十分影响工作效率。因此把一切都放在 emacs 里做,即使牺牲一部分可用性,只要能大大减轻中断带来的影响,我觉得也是值得的。 对我这种时常突发奇想的人,emacs 可以在双手不离开键盘的情况下,飞快切换 buffer,同时处理多种不同事务,这自然是极好的。当然,如果你工作一向全神贯注,一次只做一件事,并且能不被打断地专注数个小时,那就未必适合 emacs 了。

局限性

之前在另一篇文章中提过,好的工具应该让人专注于工作,而非专注于折腾工具。对于做一件事情,投入的总时间是一定的,那么折腾工具的时间多了,用于做工作的时间自然就少了。当然,加强工具是可以提高工作效率的,所以折腾工具和做工作的时间存在一个最佳比例。从这个角度看,emacs 算不上好的工具,因为无论用 emacs 做什么都需要先花很多时间折腾一番。众所周知一些 emacs 的高级功能,熟练使用后,确实强的逆天。但是如果一年也用不了几次这种高级功能的话,就算每次使用能节省 9 成时间,总共加起来也省不了多少时间。对于大部分人来说,绝大多数时间用的都是那些基础的编辑功能。而这些基础功能,emacs 真的没比其他编辑器快多少。这样算下来,掌握 emacs 要花的时间远远多于 emacs 帮用户省下来的时间。渐渐的,使用 emacs 这件事,就变成了纯以折腾 emacs 为乐。每当费尽周折把新功能整合进 emacs 配置文件时,就会有一种成就感————这完全是颠倒了工具和工作的主次关系。因此,emacs 并不适合大多数做常规编辑的人,它适合经常进行特殊复杂编辑操作的用户。和 RMS 发明 emacs 的那个年代不同的是:随着脚本语言的兴盛,有很多复杂的编辑任务是可以写一个 python /perl 脚本完成,借助编辑器已经不再是首选,因为实际生产环境中需要编辑的文件常常很大,超出了 emacs 能处理的极限。 10 年前使用 Emacs 时就有很多 bug,至今仍然有很多 bug。不要迷信只要水平够高就能通过 lisp 自由定制解决一切,世界上 emacs 高手众多,即使是 spacemacs 或 purcell 这种高手做的配置,直接用也能发现很多明显的 bug。自由定制从来不是万能的良药,这样的系统也不会有真正完善的一天。发展了这么多年,还有很多很基础的问题没有解决,比如多线程的支持。现在的 emacs 只要调试一个稍大的 python 程序就很容易不响应或崩溃。诚然,你可以通过各种各样的 workaround 解决,但这确实是一种落后的体现。