在程序员圈子里,有一个经久不衰的话题是 Editor War ,究竟谁才是最好用的编辑器?幸运的是,不像语言战争,这个问题是二选一: Emacs or Vim ? 从占用率上看, vi 和它的表亲 vim 拥有绝对的统治力,毕竟所有的 linux 机器上都内置了 vi 。并且 vi 所代表的模式编辑理念及相应的快捷键设置也活跃于其它软件上。Intellij IDEA, VScode 等代码编辑器都提供了模拟 vim 的插件,甚至是浏览器也提供了类似的插件,比如我一直在使用的 Vimium ,通过它我在日常浏览网页时几乎用不到鼠标。所以即便将来 vim 不幸陨落,它的快捷键理念依旧能存活下来。 相比之下, Emacs 则比 vim 小众得多。尽管在终端模拟器的快捷键设置中,有一部分它的影子,但总体来看,它编辑文本时的按键设定几乎是灾难性的。几乎所有的快捷键都需要用到 Ctrl ,并且按键序列也非常复杂,比如打开一个文件需要连续输入: Ctrl x Ctrl f ,保存一个文件则需要输入 Ctrl x Ctrl s 。在不修改键盘按键的情况下, Emacs 绝对是难以使用的,甚至对因频繁使用小拇指按 Ctrl 而导致的疼痛都有一个专有名词来称呼它: Emacs Pinky 。 但这个缺点也可以通过 Emacs 上丰富的插件来解决。比如最有名的 evil-mode ,提供了 vim+Emacs 的完美整合,但缺点是过重,而且将 vim 的操作方式完全移植到 Emacs 上可能并不是什么好的解决方案。目前我使用的是 meow ,操作方式类似于 vim ,但轻量很多,它提供的 keypad-mode 及 fallback 模式,使得我能很快地适应 SPC 为 leader-key 的快捷键方式。 就我自己的经历来说,在维护生产环境的服务器配置时, vim 是唯一的选择,此后我在个人桌面环境中也断断续续使用过 vim 和后来的 neovim ,但并不精通。光是熟悉它的按键模式就花了好长时间,不过掌握基本的移动和文本对象操作之后的收益也是巨大的。但 vim 从来没有成为过我的主力编辑器,因为我平时的操作的文本可以分为代码与笔记,写代码的体验并不如 IDE+vi 模式 ,而在记笔记的场合 vim 也没有能媲美 Emacs 的 orgmode 以及足够好用的中文输入法,如 Emacs 上的 rime 。 此外,我也从来没搞懂过要怎么定制 vim ,而 Emacs 则只需要熟悉 elisp 的简单语法就能慢慢自己写一些小工具,事实上有很多开发 Emacs 插件的大佬都不是专业的程序员,比如 helm 的开发者主业是登山, denote 的开发者从事的是哲学, nano-theme 则是科学工作者开发的。尽管 neovim 将 lua 引入了 vim 配置大大降低了插件开发门槛,但整体的开发环境是不如 Emacs 的。 因此如今我的主力编辑器是 Emacs 而不是 vim 。并且即便如今出了很多 rust 开发的新时代编辑器,我也没有看到任何有取代 Emacs 潜力的替代品。