编辑器之战

Emacs 和 vim 用户之间的竞争

编辑器之战是指计算机编程领域内,两类文本编辑器vi(以及派生版本)和Emacs用户之间的对抗冲突。这已经成为黑客文化自由软件社区文化的一部分。

战火在两群用户之间多次点燃,他们互相蔑视,坚信自己的选择才是最完美的。相比其他的IT领域战争(如浏览器大战操作系统之争、编程语言之争、代码缩进风格之战),编辑器的选择其实通常只是个人问题。

vi与Emacs的不同

vi与Emacs之间最重要的不同见下表:

vi Emacs
快捷键命令 vi通过记录按键序列,形成决策树中的一条路径,从而确定一个命令。 Emacs通过组合键的方式立即执行命令。组合键同样遵循决策树,但并不属于独立的按键顺序。
内存占用和定制性 由于历史原因,vi小而快,但定制性上比较受限。而vi的进化版本Vim与vi相比,提供了更多的实用功能,提高了可定制性。这使得Vim可以与Emacs媲美。[notes 1] 对于小文件而言,vi几乎可以做到瞬时打开,Vim也可以接近瞬时。 因为要执行大量的启动代码,包括用户代码,所以Emacs启动慢且占用更多内存(甚至和Vim比也是如此)。但Emacs高度可定制,包含大量复杂功能。它基本上是一个Lisp程序的执行环境。Emacs 18 (1987年发布)引入了服务器模式[3],这样可以在后台一直运行。可以启动不同的Emacs客户端实例,并且附加到这个服务器上,互相分享状态。Emacs客户端也可以做到几乎瞬间启动,因为它只是通知已经启动的Emacs来重新显示界面。
用户界面 vi早先独占命令行终端,没有图形用户界面(GUI)。后来的派生版本,如MacVimgVim,都具备全功能的GUI。但是,这些GUI对等距字体的支持是有问题的,并且它们不支持同一文档内存在不同字号的字体。[4] Emacs,最初也为终端设计。作为早期Lisp机器遗留下来的产物,它只提供了纯文本界面。从Emacs 18开始支持X11 GUI,并且在Emacs 19成为默认支持的界面。现在的Emacs完全支持等距字体,支持字号的变化,而且支持文档内嵌图象和超级链接
功能/导航 vi具有明确的编辑模式。 Emacs采用功能键组合。
按键 vi不使用Alt键,并且几乎不用Ctrl键。vi的按键主要限制在字母、数字和退出键。这是打字机时代遗留下的习惯,但是因为手指不需要做太大的移动就可以完成vi的大多数功能,所以提高了输入效率。 有人把Emacs称作“Escape,Meta,Alt,Control,Shift”,这个说法总结了Emacs所使用的大多数组合键,除了Super键。Emacs在Lisp机器上面被创造,当时使用的Space-cadet键盘比现代键盘更适合使用组合键。有很多Emacs插件,例如spacemacs[5]ergoemacs[6]可以把组合键替换成比较容易按的按键。
语言支持 vi对除英语以外的语言的支持不好。Vim可以部分地支持其他语言,例如阿拉伯语、希伯来语、中文、日文等。 Emacs支持所有兼容Unicode的语言。[7]

vi类型编辑器的优点

  • 遵循“简单工具,多样组合”的理念。
  • 小,符合Unix哲学中的“只做一件事,并做好它”,避免了功能蔓延
  • 比Emacs快(至少历史上是这样的)。
  • 可运行于任何实现了C标准库的系统之上,包括UNIXLinuxAmigaOSDOSWindowsMacBeOSPOSIX兼容系统等等。
  • 让“QWERTY”键盘用户将手指保持在默认键位上,使编辑时手指移动更少。
  • 更普及。基本上所有Unix类Unix系统都默认提供了vi或其变体。

Emacs的优点

幽默

在讨论中,人们常提到ed标准文本编辑器页面存档备份,存于互联网档案馆)。

 
理查德·斯托曼,身份是St IGNU−cius,Emacs教会的圣人

理查德·斯托曼组建了Emacs教会,这个教会称vi为“魔鬼的编辑器”(vi-vi-vi在罗马数字中表示兽名数目)。然而它并不反对vi;相反的,它视私有软件诅咒。(“使用自由版本的vi不是罪恶,而是赎罪。”[13])它还有专门的新闻组,alt.religion.emacs,[14]发布主题宣扬这个滑稽的宗教。

斯托曼曾称自己是St IGNU−cius,Emacs教会的圣人。[15]

vi支持者也成立了对立的vi教,较强硬的Emacs的用户攻击这是“抄袭他们的创意”。

关于vi的模式,一些Emacs用户说vi有两个模式–“不停地哔哔叫”和“搞砸一切”。vi用户则指责Emacs的快捷键会引发腕管综合症,或者拿EMACS这个缩写词作文章,比如“Escape Meta Alt Control Shift”(攻击Emacs太依赖修改键,据vi用户称一些 Emacs 用户由于修改键过多而使用脚踏板,不过 vi 用户也有为切换模式使用脚踏板的)。[16][17] 一些人断定是代表“Eight Megabytes And Constantly Swapping”(8 MB,还不断进行内存交换,过去这已经是很多内存了),或者“EMACS Makes Any Computer Slow”(EMACS使一切计算机跑得慢,这是斯托曼惯用的递归缩写),讽刺Emacs对系统资源的高需求。

针对Emacs的“功能蔓延”,vi支持者认为Emacs是“一个伟大的操作系统,只缺个体面的编辑器”或“一个伪装成编辑器的操作系统”(在现实生活中,的确有 vi 用户在 Emacs 中打开多种窗口使用各种程序,同时在 Emacs 终端模拟器中使用 vi)。

UNIX用户中流行一个游戏,考验一个Emacs用户对这个编辑器的理解深度,或者是拿Emacs的复杂性开玩笑,内容是:预测一下,如果一个用户按住修改键(比如Control或Alt),然后键入自己的名字,会发生什么事。

Word War vi[18]是一个基于编辑器之战的类似清版射击游戏的防守游戏。

目前状况

过去有许多仿照或修改自vi的小型文本编辑器。这是因为在当时计算机条件下,节约内存的使用非常重要。随着电脑配置和功能的强大,许多vi复制品,特别是Vim,大大地提高了体积和代码复杂度。目前,这些vi的变体与过去的轻型Emacs变体相比各有优缺点。例如,不装任何插件的Vim对磁盘空间的要求是vi的十倍,Vim最近的一些版本可以安装更多插件所以要比旧版的Emacs运行速度慢很多。在《Unix编程艺术》一书中,埃里克·雷蒙称,和Emacs一样,Vim期望的轻型“都是神话”。[19]此外,随着计算机内存容量的提高,与大型集成开发环境(例如EclipseVisual Studio),Emacs和vi的内存占用几乎可以忽略不计。这往往引发了Emacs和vi用户的嘲笑。

提姆·奥莱理说,1999年,奥莱利的vi教程的销售量是Emacs手册的两倍(不过Emacs的手册是免费的)。[20]许多程序员使用Emacs或vi的分支,例如林纳斯·托瓦兹使用MicroEMACS[21]同样是在1999年,vi的创造者比尔·乔伊说vi是“为一个不再存在的世界而创造的”,并且认为Emacs才是为性能更高的电脑而编写的,这样程序员就可以享受“有趣的命令,屏幕上闪烁的一切”。“同时,我坐在在伯克利的那种二战剩下的房子中,使用调制解调器和终端,勉强能把光标移动到屏幕底端。”[22][23]

除了Emacs和vi类编辑器,pico和克隆它的自由软件版本nano,以及其他的文本编辑器(例如ne)也经常有它们自己主张的编辑器大战,但是程度不如Emacs和vi那样。

截止到2014年,Emacs和vi可以说都是最长寿的应用程序。[24]作为在Linux和Unix系统中最常用的两种文本编辑器,许多操作系统,特别是GNU/LinuxBSD,都将多种文本编辑器与操作系统进行捆绑以满足用户需求。例如,OS X默认包含Emacs、ed、nano和Vim。

注释

  1. ^ 截止到2013年,Vim有1731kLOC (其中C语言是1142000代码行,Vim脚本为506000代码行,Makefile相关为83000代码行),而GNU Emacs有1623kLOC (C语言仅有299000代码行,Emacs Lisp占1270000代码行,Makefile相关占54000代码行).[1][2]因为事实上存在着大量使用Emacs Lisp和Vim脚本的插件,因此这里的“代码行”指的是包含在“直接下载”的那部分代码。

参考

  1. ^ The GNU Emacs Open Source Project on Open Hub : Languages Page. Ohloh.net. [1 December 2014]. (原始内容存档于2013-11-08). 
  2. ^ The Vim Open Source Project on Open Hub : Languages Page. Ohloh.net. [1 December 2014]. (原始内容存档于2013-11-08). 
  3. ^ NEWS.18. [2015-06-12]. (原始内容存档于2015-06-14). Programs such as mailers that invoke "the editor" as an inferior to edit some text can now be told to use an existing Emacs process instead of creating a new editor. 
  4. ^ syntax.txt. All fonts used, except for Menu and Tooltip, should be of the same character size as the default font! Otherwise redrawing problems will occur. [永久失效链接]
  5. ^ spacemacs. [2015-06-12]. (原始内容存档于2021-04-26). 
  6. ^ Ergoemacs. [2015-06-12]. (原始内容存档于2021-04-21). 
  7. ^ International Chars. [2015-06-12]. (原始内容存档于2021-04-24). 但是在Emacs内部则使用自己的多字节语言编码。 
  8. ^ Carbon Emacs Package. [2006-09-27]. (原始内容存档于2006-01-25). 
  9. ^ Aquamacs is an easy-to-use, Mac-style Emacs for Mac OS X. [2006-09-27]. (原始内容存档于2011-02-23). 
  10. ^ B, Ramprasad. GNU Emacs FAQ For Windows 95/98/ME/NT/XP and 2000. 2005-06-24 [2006-09-27]. (原始内容存档于2013-08-23). 
  11. ^ Borgman, Lennart. EmacsW32 Home Page. 2006 [2006-09-27]. (原始内容存档于2007-03-06). 
  12. ^ GNU Emacs on Windows. Franz Inc. 2006 [2006-09-27]. (原始内容存档于2019-04-23). 
  13. ^ All about Linux: The unabridged selective transcript of Richard M Stallman's talk at the ANU. [2010-10-30]. (原始内容存档于2011-10-04). 
  14. ^ alt.religion.emacs newsgroup
  15. ^ Saint IGNUcius - Richard Stallman. [2010-10-30]. (原始内容存档于2018-01-03). 
  16. ^ satirical expansions of EMACS. [2010-10-30]. (原始内容存档于2021-04-24). 
  17. ^ 使用脚踏板离合器操控 Vim页面存档备份,存于互联网档案馆).Linuxtoy. (alevchuk/vim-clutch页面存档备份,存于互联网档案馆)) LinuxToy 上的评论区里面也有一些编辑器脚踏板大战的内容。
  18. ^ Word War vi site. [2010-10-30]. (原始内容存档于2021-03-22). 
  19. ^ The Right Size for an Editor. Catb.org. [1 December 2014]. (原始内容存档于2021-04-18). 
  20. ^ Editor: vi or emacs?. Oreilly.com. 21 June 1999 [1 December 2014]. (原始内容存档于2014-04-01). 
  21. ^ Jarosław Rzeszótko. Stifflog: Stiff asks, great programmers answer. Stifflog.com. [1 December 2014]. (原始内容存档于2006年11月8日). 
  22. ^ Vance, Ashlee. Bill Joy's greatest gift to man – the vi editor. theregister.co.uk. September 11, 2003 [June 3, 2014]. (原始内容存档于2014年6月3日). 
  23. ^ Joy, Bill. The Joy of Unix: Sun Microsystems Co-Founder Bill Joy Charts Where Linux and Free Software Fit Into His Company's Solar System.. 访谈 with Eugene Eric Kim. November 1999 [June 3, 2014]. (原始内容存档于February 7, 2003).  |journal=被忽略 (帮助)
  24. ^ The Oldest Rivalry in Computing. [2015-06-12]. (原始内容存档于2018-10-15). two rival programs can stake a claim to being among the longest-lived applications of all time. Both programs are about to enter their fifth decades. Both programs are text editors, for inputting and editing code, data files, raw HTML Web pages, and anything else. And they are mortal enemies. 

外部链接