Alfred Sun +

Emacs vs Vim:神的编辑器和编辑器之神

Posted by jiqingwu vim, emacs

Emacs 是神的编辑器,而 Vim 是编辑器之神。二者为何会有如此美誉,且听本文向你一一道来。

序章:神器的传说

在这个蔚蓝色的星球上,流传着两大神器的传说:据说 Emacs 是神的编辑器,而 Vim 是编辑器之神。

追求独步天下的高手和低手们争着一睹它们的风采,可看到它们朴素单薄的界面后,不禁心下怀疑:这就是神器吗?甚至有人生了轻视之心。

肤浅的人嗤之以鼻,说:什么年代了,还抱着这么老土的玩意不放,真他妈Geek!同学,请冷静下来,听我说:它们的确够老了,都几十年的寿命了,但你想想为什么,为什么这么古老的编辑器,却有越来越多的人皈依它们。

Windows 下用 UltraEdit 和 Editplus 的人质问:它们到底比 UltraEdit 和 Editplus 好在哪里?我说:不可同日而语。

连 UltraEdit 和 EditPlus 都没用过的同学问:它们就相当于 Linux 上的 Notepad 吧?我说:请你从我的眼前消失。

一些人勇敢地拾起了 Vim 或 Emacs,却发现学习曲线陡峭而漫长,于是在没发现它们的强大之前就放弃了,说:太难用了,把键盘当鼠标用的烂玩意,有什么好的?

主流编辑器学习曲线图:
editor learning curve

还是有一些人留下来了,坚定地守护着这两大神器。一些说葡萄太酸的人想离开又不甘心,总是问:它们到底神在哪里啊? 我不禁想起了李宗盛的几句歌词:

有人问我你究竟是哪里好,
这么多年我还忘不掉?
春风再美也比不上你的笑,
没见过你的人不会明了。

也许你不会明了,我还是要努力讲一讲。

1. 无敌的可扩展性

1.1 可扩展性给了软件强大的生命

曾几何时,Windows 用户对软件的可扩展性没有概念,他们只能对他们使用的软件进行非常有限的定制。扩展软件的权利保留在软件开发者手中。软件的使用者 如果想要新的功能和特性,只能等待软件的升级。有能力的用户等不及了,为了添加自己想要的功能,从0开始写了一款新的软件。就这样,新的功能意味着新的软件,Windows 下的软件前赴后继,迅速地更新换代着。因此,Windows 下的软件都很短命。

Linux 和开源软件渐渐流行起来,人们才发现:可扩展性才能给软件强大的生命。 在MS的VS横行的今天,Eclipse 为什么被评为最好的IDE?就是因为它在IDE中最具可扩展性。 在IE几乎一统天下的时候,为什么Firefox能夺走越来越多的用户,也是因为它的可扩展性。提供了良好的扩展接口,用户自然会写出各种各样的插件,来满足用户自己形形色色的要求。这样,软件在用户的推动下自然变得强大了。

Emacs和 Vim 没有被时代淘汰,反而越发强大,也正是因为在数不清的编辑器中,他们具有无可匹敌的可扩展性。

1.2 Emacs 是伪装成编辑器的操作系统

有句夸张的话说:Emacs 是伪装成编辑器的操作系统。细细想来,这句话并不夸张。

Emacs 其实是个 Lisp 的解释器,因此可以用 Lisp 灵活地扩展。Lisp 是什么东西,这同样是种很有生命力的编程语言。在C语言还没有发明的年代,MIT的人工智能实验室写ITS操作系统时,一部分用的是汇编语言,还有一部分就是用的 Lisp。现在,Lisp 仍在人工智能研究领域广泛使用着。

有这么牛逼的扩展语言,注定 Emacs 向着无所不能的方向发展。渐渐地,人们用 Emacs 不再限于写程序,写文档,而且在 Emacs 里管理文件系统,运行终端,收邮件,上网,听音乐……,真是一发不可收拾。甚至,有人用 Emacs 控制咖啡机煮咖啡。

这种大而全的扩展,背离了“一个程序只做一件事并做好它”的 Unix 哲学,被 Unix 的忠诚用户所诟病。可是真的背离了吗?Emacs说过自己是一个编辑器吗?

正是因为 Emacs 的无敌的可扩展性,人们才分不清 Emacs 到底是不是一个编辑器了。但,就是有人喜欢这种 All-in-One 的哲学,喜欢在 Emacs 中完成每件事。所以才会有人写《生活在Emacs中》,所以,Emacs 才会成为一种信仰。

1.3 Vim 不只是 Vi

Vim 是 Vi 最受欢迎的变种之一,除了继承了 Vi 迅捷的编辑方式,Vim 的功能已经比原始的 Vi 强大得多。这也得益于它可以用 Vim 脚本无限地扩展。Vim.org 上已经有数千个脚本了,给 Vim 增加各种各样的特性和功能。

为了证明 Vim 的可扩展性不输于 Emacs,也有用户写了在 Vim 中玩游戏、运行 Shell、和集成 GDB 在 Vim 内部调试的插件。客观地讲,Vim 的脚本语言与 Emacs 的 ELisp 相比,略显逊色,但这丝毫不妨碍它把 Vim 扩展成非常优秀的编辑器。

说到底,Vim 的前身 Vi 和 Emacs 的设计采用了不同的哲学,Vi 更符合 Unix 传统,它通过管道机制和系统内各种积木工具打交道,它讲究的是和系统内的工具程序协作来完成用户的任务。和 Emacs 相比,它的定位很明确,就是要做一个强大的编辑器。因此 Vim 的绝大部分扩展,都是为了更好地完成编辑文本的任务。

海纳百川,有容乃大。Emacs 和 Vim 通过别的编辑器无法比肩的可扩展性,不断吸收广大用户的智慧,是它们能成为“神器”的原因之一。

2. 特立独行的魅力

2.1 可扩展性让你倾注了灵魂

一旦你意识到 Vim 或 Emacs 的强大,你就踏上了不停发掘它们潜力的漫漫长路。你不停地改进自己的配置文件,你不停地搜索更好的插件,甚至有一天你开始动手写自己的插件。就像剑客保养自己的剑一样,你也甘心花时间提升你的 Vim 或 Emacs。经年累月,不知不觉,你已经在那把剑上倾注了你的灵魂。

2.2 独特的操作方式让你中了毒

Emacs 和 Vim 有着迥异的操作方式,却成了 Unix/Linux 世界中两种代表性的操作方式,有些软件的操作方式类似 Vi,而有些软件的方式类似 Emacs,甚至有些软件提供了 Vi 的键绑定和 Emacs 的键绑定让你选择。而无论哪种操作方式,对 Windows 用户来说都是古怪的。虽说古怪,多少代人也验证了这两种操作方式的高效。

Emacs 号称 Ctrl 到死的编辑器。其实它几乎用了所有的辅助键,听说过没有,Emacs = Esc + Meta + Alt + Ctrl + Shift。所以高德纳大师说操作 Emacs,就像弹奏管风琴。Emacs 使用非常多的组合按键,这大概也是它高效于其它无模式编辑器的原因之一。你也可以定义自己的组合键序列,调用自己写的lisp函数,完成自己想要的功能。

Vi 一向是以快速的文本编辑闻名于世的。它的按键更简洁,通常是单个字符按键,就实现某种操作。但这是以有模式为代价的。你要不停地按 Esc 在从它的插入模式返回 Normal 模式。客观得讲,在文本编辑方面,Vim 比 Emacs 高效,因为它提供了一些 Emacs 没有对应功能的操作来辅助高效的文本编辑。但它的模式切换也让一些人受不了,于是那些人选择了 Emacs。

不管你选择了 Vim 还是 Emacs,你都要为习惯它们独特的操作方式而努力,这是一个技艺积累的过程。当你习惯了 Vim 或 Emacs,你会有欲罢不能的感觉,你希望用它们完成尽可能多的任务,因为你再用别的编辑器也已经不习惯。

用 Vim 或 Emacs 就像吸食毒品,慢慢地就会上瘾。它们会带给你渐渐强烈的快感,但你也向它们献出了自己的灵魂。这时,你只能称它们为神器。

3. 黑客的编辑器

Vim 的前身 Vi 的作者 Bill Joy 和 Emacs 的作者 Richard Stallman 都是那个时代著名的黑客,所以这两款编辑器一开始面向的主要用户就是写程序的人,现在仍然是。它们对编程加入了越来越多的支持,如语法高亮、智能缩进、关键字补全,甚至集成调试。也有越来越多的程序员从IDE转向了 Vim 和 Emacs。

用 Vim 和 Emacs 编程到底有什么好处?我想首先是它们高效的编辑操作会提高你的编程效率。其次你可以用它们完成各种语言的编程,所谓一剑在手,夫复何求。你不用再因为编程语言不同去学习不同的IDE的使用,那些庞大的IDE的升级换代也与你再不相关,你把精力用于学习编程语言本身就好了。听说 Google 和微软内部开发也都不用IDE的,他们也会用 Emacs或 Vim。

因为我写的程序不多,还不能深入体会用 Vim 或 Emacs 开发程序的乐趣。我只是觉得这很酷,你看,Linux 之父 Linus 多年来用的是一款 MicroEmacs,它比 GNU Emacs 或 XEmacs少许多功能,但 Linus 就是用它在维护 Linux。微软的大牛 Don Box,Com 之父,一直用 Emacs,他说谁也不能夺走他的编辑器。他还在网上放了一段他用 Emacs 写C#程序的视频。

编程大师们的选择,也是 Emacs 和 Vim 被追捧为神器的原因之一。

4. 神器引发的圣战

Vim 用户和 Emacs 用户有着旗鼓相当的品位,应该互相欣赏才对。现实却是,忠诚于 Vim 的用户和忠诚于 Emacs 的用户互不相容,常常没完没了地打口水仗。Emacs 用户说 Vim 的操作方式单一而古怪,Vim 用户说 Emacs 体积庞大,启动缓慢。

很有点一山不容二虎的意思,大概因为二者都处于神器的高度,才会斗争不断吧。也可能是因为二者截然不同的设计哲学吸引的用户在价值观上也互不认同。

正因为两者难分高下,新人总是在 Vim 和 Emacs 之间犹豫不定,很难决定到底要皈依哪一个神。


后记

Vim 称为编辑器之神,是因为作为编辑器来说,Vim 无所不能。
Emacs 称为神的编辑器,因为 Emacs 是个无所不能的编辑器。

具体来源无法可考,这场旷日持久的编辑器之战已经打了很多年……

Emacs 的理念是:“everything in emacs”,即所有的事情都在 emacs 里解决。你可以把emacs当作一个操作系统,“emacs lisp”是这个操作系统支持的开发语言,你可以使用emacs lisp去开发一切你需要的工具,当然,大部分常用的工具都已经有人开发完成了,并提交到了开源社区。
这么做有什么好处呢?好处就是emacs支持丰富的快捷键,只要你熟悉emacs的快捷键,那么在emacs的环境里你就不需要去动鼠标,一切一切都在瞬间的敲击键盘中完成。也就是说,emacs就是一个不需要鼠标的操作系统,这个操作系统上所有的软件都使用一套快捷键规范,熟悉这个操作系统的人,在这个操作系统里做什么都只靠敲击键盘就能够完成了,而且是瞬时的完成。
那么为什么 Emacs 被称为“神的编辑器”呢?因为这等于你需要重新学习一个非常复杂的操作系统(大脑的学习和肉体的学习),包括这个操作系统的开发语言“emacs lisp”,能精通emacs操作系统的人一般都被称为“神”。

Vi/Vim,这个名字其实不是最体切的,也许比较贴切的名字应该是: Vi/Vim/Emacs/Eclipse/Xcode/Sublime text/Firefox/Chrome/Thunderbird…..
不要惊讶,这个名字可以变的很长,“编辑器之神”--“编辑器之精髓”,所有遵照Vi精髓的编辑器、浏览器甚至是邮件客户端都可以放在这个长长的名字里,因为他们的键盘操作都是可以遵照Vi的按键规范的。掌握Vi就是通过掌握Vi的快捷键规范,用一致的按键方式使用不同软件。是不是有点 “葵花在手,天下我有”的感觉,但是请冷静:)。因为这种状态也不是完美的(也不可能是完美的),因为每种编辑器、浏览器都各有特色,都只是支持 Vi规范的一个子集(你总不能要求网页浏览器也能随意输入文字吧?)。不过相信我,这个子集已经可以让你的速度double再double了。

圈内名言

世界上有三种程序员,一种用Emacs,一种用Vim,剩下的是用其它编辑器的。
“Emacs是神的编辑器,Vim是编辑器之神”

Emacs是什么,Vim是什么

是编辑器,又不仅仅是编辑器。

Wiki Emacs:http://zh.wikipedia.org/wiki/Emacs
Wiki Vim:http://zh.wikipedia.org/zh/Vim

程序员其实很龟毛,甚至用什么编辑器他们也要纠结。跟普通的文本编辑器不同,Emacs 和 Vim 主要面向对象是程序员和技术工作者,来协助他们完成很多繁琐的工作。所以,编辑器就需要更多更强大的功能。那么,为什么不用 IDE 呢?因为 Emacs 和 Vim 有强大的定制功能,程序员可以根据自己的需要和习惯来对编辑器作出修改。

Emacs和Vi的异同

Emacs 和 Vim 有什么不同?答案是,很不同。
用一个词来形容 Emacs,那就是“自动化”。用一个词来形容 Vim,那就是“快”。

Emacs 的精髓在于其配置文件。这个编辑器内置了emacs lisp的语言解释器,所有的配置都是通过这种语言来完成的。所以,要用好 Emacs,你得先学会一门语言。而 Lisp,则是计算机历史上第二个高级语言。Emacs 历史悠久,故事很多,要用好它也很不容易。能用好这么折腾的编辑器,应该也只有“神”了吧?

Vim 则完全是另一种风格。通过键盘组合,你可以很快地编辑文本。甚至你在熟练地使用 Vim 之后,你想把你的浏览器甚至是操作系统桌面按键方式也设定为 Vim 的模式。为什么?因为快!而且 Vim 显然没那么折腾,只要熟悉了基本键位之后,用不了多久你就可以指上如飞一般地coding了。Vim 是如此的简介易用而且还高效,当之无愧是编辑器之神。

历史悠久的吐槽

可能是某一天,某个菜鸟coder发了一个帖子,“我是一个程序员新手,我是应该用 Vim 呢还是 Emacs 呢?”,于是,程序员圈历史悠久的优良传统之一——吐槽,又牛逼闪闪地登场了。而且程序员们的吐槽功力竟然也极为深厚,Emacser们和Vier们刚开始只是说自己的编辑器是多么多么的牛逼,然后发展到“理性批评”对方阵营的编辑器有哪些弱点。当然,一旦划分阵营,事情就起了变化。

于是后来呢?估计是发展为某种哲学意义上的探讨了吧,不过肯定没有变为问候对方家人这种程度,又不是J2EE圈嘛(笑)。不过呢,既然被称为“编辑器之战”,这场旷日持久的争论也成为了黑客文化的一部分,为后来的程序员们津津乐道。

Hello world小组讨论编辑器的帖子:http://www.guokr.com/post/62596/
(你知道为什么要在标题前加【纯交流】三个字了吧)
Editor War Wiki:http://en.wikipedia.org/wiki/Editor_war

细节?哦,对于八卦的细节这种事,LZ还是很为难啊。因为那时候还木有LZ呢。

同余者何人?

未来的种子深埋在过去之中。

历史在发展,强大的IDE——例如Visual Studio 和 Eclipse——的出现,并没有让前辈们离开历史的舞台。Emacs 和 Vim 仍然有很多不可替代的优良特性,如果你想脱离菜鸟程序员的行列更上一层楼,那么你早晚要学会使用一个。

用得不好也没关系,慢慢学嘛。至少可以帮你自己融入程序员圈(更为正式的说法是“社区”),当别人有.vimrc.emacs可以晒的时候,你也能参与进去。
Hello world小组晒.vimrc的帖子:http://www.guokr.com/post/63390/

补充一点

Vi 里面还有跟 emacs 作战的游戏:http://wordwarvi.sourceforge.net/

在中国用 Vim 的人貌似比 Emacs 更多些,应该是 Vim 的中文资料多一些的缘故,而且毕竟 Vim 上手简单点;
Emacs 要用顺手比 Vim 要难,组合快捷键太难记,好在有便利的 Org-Mode,Emacs 是需要自己配置的,不配置当然不能发现它的强大之处。而 Vim 默认有一千四百多个命令,不过同样的功能,用更少的击键次数。

Vim 觉得Esc键远,有个小技巧,可以用 Ctrl+[ 来代替,还可以用CapsLock替换ESC或者Left Ctrl(参考此文);左手小拇指可以用来回归Normal模式,真正做到双手不离键盘主行,缺点是转到用别人的电脑的时候一直写大写字母。
现在的键盘布局里CapsLock就是个废键,平常都用Shift就足够了,把CapsLock和Ctrl对换就好,无论对 Vim 还是 Emacs 来说都会好用很多。

最后,附上一篇 Vim 进化论:This is Your Brain on Vim the pristine state

[Comments]:

Related Blog