编辑器之战

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

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

 vi与Emacs的不同 
vi与Emacs之间最重要的不同见下表：
  vi  Emacs 快捷键命令 vi通过记录按键序列，形成决策树中的一条路径，从而确定一个命令。 Emacs通过组合键的方式立即执行命令。组合键同样遵循决策树，但并不属于独立的按键顺序。 内存占用和定制性 由于历史原因，vi小而快，但定制性上比较受限。而vi的进化版本Vim与vi相比，提供了更多的实用功能，提高了可定制性。这使得Vim可以与Emacs媲美。 对于小文件而言，vi几乎可以做到瞬时打开，Vim也可以接近瞬时。 因为要执行大量的启动代码，包括用户代码，所以Emacs启动慢且占用更多内存（甚至和Vim比也是如此）。但Emacs高度可定制，包含大量复杂功能。它基本上是一个Lisp程序的执行环境。Emacs 18 (1987年发布)引入了服务器模式，这样可以在后台一直运行。可以启动不同的Emacs客户端实例，并且附加到这个服务器上，互相分享状态。Emacs客户端也可以做到几乎瞬间启动，因为它只是通知已经启动的Emacs来重新显示界面。 用户界面 vi早先独占命令行终端，没有图形用户界面（GUI）。后来的衍生版本，如MacVim和gVim，都具备全功能的GUI。但是，这些GUI对等距字体的支持是有问题的，并且它们不支持同一文档内存在不同字号的字体。 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或ergoemacs可以把组合键替换成比较容易按的按键。 语言支持vi对除英语以外的语言的支持不好。Vim可以部分地支持其他语言，例如阿拉伯语、希伯来语、中文、日文等。Emacs支持所有兼容Unicode的语言。

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

 Emacs的优点 
 符合“厨房水槽”理念，提供了比vi更多的功能。
 移植最广泛的非试用计算机程序之一。它能在各种操作系统上运行，包括大多数类Unix系统（GNU/Linux、各种BSD、Solaris、AIX、IRIX、AmigaOS、Mac OS X等）、MS-DOS、Microsoft Windows和OpenVMS。Unix系统，无论自由版本或商业版本，均随系统提供Emacs。
 可扩展和可定制（Lisp的变体 - Emacs Lisp），功能包括：
 专门的编辑模式，支持大量编程语言、标记语言、排版语言，如Bash、C、Delphi、Java、Lisp、LaTeX、MediaWiki、Python等。
 可模拟vi（“viper-mode”）。
 强大可扩展的文件管理器（dired）、智能调试器和大量工具。

 幽默 
在讨论中，人们常提到ed是标准文本编辑器 。

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

斯托曼曾称自己是St IGNU−cius，Emacs教会的圣人。

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

关于vi的模式，一些Emacs用户说vi有两个模式–“不停地哔哔叫”和“搞砸一切”。vi用户则指责Emacs的快捷键会引发腕管综合症，或者拿EMACS这个缩写词作文章，比如“Escape Meta Alt Control Shift”（攻击Emacs太依赖修改键，据vi用户称一些 Emacs 用户由于修改键过多而使用脚踏板，不过 vi 用户也有为切换模式使用脚踏板的）。使用脚踏板离合器操控 Vim .Linuxtoy. (alevchuk/vim-clutch ) LinuxToy 上的评论区里面也有一些编辑器脚踏板大战的内容。
一些人断定是代表“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是一个基于编辑器之战的类似清版射击游戏的防守游戏。

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

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

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

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

注释

 参考 

 外部链接 
 Emacs Wiki, community site dedicated to documenting and discussing Emacs
 Church of Emacs resources
 Rules, Sins, Virtues, Gods and more of The Church of Emacs 
 Saint Ignucius—as portrayed by Richard Stallman
 Vi Lovers Home Page 
 $EDITOR sucks-rules-o-meter measures which editor's activists are more visible on the Web
 Ed is the standard text editor 
 A transcript of Richard introducing St. IGNUcias and the Church of Emacs 

Category:Emacs
Category:Vi
Category:互联网
Category:自由软件
Category:Unix
Category:軟體戰爭