﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-程序生涯-随笔分类-Linux</title><link>http://www.cppblog.com/songhaifeng/category/15916.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 22 Jan 2011 02:50:32 GMT</lastBuildDate><pubDate>Sat, 22 Jan 2011 02:50:32 GMT</pubDate><ttl>60</ttl><item><title>为何 Emacs 和 Vim 被称为两大神器</title><link>http://www.cppblog.com/songhaifeng/archive/2011/01/22/139104.html</link><dc:creator>海豚</dc:creator><author>海豚</author><pubDate>Fri, 21 Jan 2011 18:00:00 GMT</pubDate><guid>http://www.cppblog.com/songhaifeng/archive/2011/01/22/139104.html</guid><wfw:comment>http://www.cppblog.com/songhaifeng/comments/139104.html</wfw:comment><comments>http://www.cppblog.com/songhaifeng/archive/2011/01/22/139104.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/songhaifeng/comments/commentRss/139104.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/songhaifeng/services/trackbacks/139104.html</trackback:ping><description><![CDATA[<div class="bct fc05 fc11 nbw-blog ztag js-fs2">
<p>Emacs 是神的编辑器，而 Vim 是编辑器之神。二者为何会有如此美誉，且听本文向你一一道来。</p>
<table rules="none" frame="void">
    <col>
    <col>
    <tbody valign="top">
        <tr>
            <th>Author:</th>
            <td>Jiqing Wu</td>
        </tr>
        <tr>
            <th>email:</th>
            <td><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#106;&#105;&#113;&#105;&#110;&#103;&#119;&#117;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;">jiqingwu@gmail.com</a></td>
        </tr>
        <tr>
            <th>homepage:</th>
            <td><a href="http://linuxtoy.org/archives/http:://hi.baidu.com/jiqing0925">http:://hi.baidu.com/jiqing0925</a></td>
        </tr>
        <tr>
            <th>create:</th>
            <td>2011-01-09</td>
        </tr>
        <tr>
            <th>update:</th>
            <td>2011-01-09</td>
        </tr>
        <tr>
            <th>面向的读者:</th>
            <td>经常用电脑处理文本和编程的同学</td>
        </tr>
    </tbody>
</table>
<div>
<p><a id="id1" name="id1">目录</a></p>
<ul>
    <li><a href="http://linuxtoy.org/archives/why-emacs-vim-good.html#id2" id="id10" name="id10">0. 序章：神器的传说</a></li>
    <li><a href="http://linuxtoy.org/archives/why-emacs-vim-good.html#id3" id="id11" name="id11">1. 无敌的可扩展性</a>
    <ul>
        <li><a href="http://linuxtoy.org/archives/why-emacs-vim-good.html#id4" id="id12" name="id12">1.1 可扩展性给了软件强大的生命</a></li>
        <li><a href="http://linuxtoy.org/archives/why-emacs-vim-good.html#emacs" id="id13" name="id13">1.2 Emacs是伪装成编辑器的操作系统</a></li>
        <li><a href="http://linuxtoy.org/archives/why-emacs-vim-good.html#vim-vi" id="id14" name="id14">1.3 Vim不只是Vi</a></li>
    </ul>
    </li>
    <li><a href="http://linuxtoy.org/archives/why-emacs-vim-good.html#id5" id="id15" name="id15">2. 特立独行的魅力</a>
    <ul>
        <li><a href="http://linuxtoy.org/archives/why-emacs-vim-good.html#id6" id="id16" name="id16">2.1 可扩展性让你倾注了灵魂</a></li>
        <li><a href="http://linuxtoy.org/archives/why-emacs-vim-good.html#id7" id="id17" name="id17">2.2 独特的操作方式让你中了毒</a></li>
    </ul>
    </li>
    <li><a href="http://linuxtoy.org/archives/why-emacs-vim-good.html#id8" id="id18" name="id18">3. 黑客的编辑器</a></li>
    <li><a href="http://linuxtoy.org/archives/why-emacs-vim-good.html#id9" id="id19" name="id19">4. 神器引发的圣战</a></li>
</ul>
</div>
<div>
<h2><a href="http://linuxtoy.org/archives/why-emacs-vim-good.html#id10" id="id2" name="id2">0. 序章：神器的传说</a></h2>
<p>在这个蔚蓝色的星球上，流传着两大神器的传说：
据说Emacs是神的编辑器，而Vim是编辑器之神。</p>
<p>追求独步天下的高手和低手们争着一睹它们的风采，
可看到它们朴素单薄的界面后，不禁心下怀疑：
这就是神器吗？甚至有人生了轻视之心。</p>
<p>肤浅的人嗤之以鼻，说：什么年代了，还抱着这么老土的玩意不放，
真他妈Geek！同学，请冷静下来，听我说：它们的确够老了，
都几十年的寿命了，但你想想为什么，为什么这么古老的编辑器，
却有越来越多的人皈依它们。</p>
<p>Windows下用UltraEdit和Editplus的人质问：
它们到底比UltraEdit和Editplus好在哪里？我说：
不可同日而语。</p>
<p>连UltraEdit和EditPlus都没用过的同学问：它们就相当于Linux上的
Notepad吧？我说：请你从我的眼前消失。</p>
<p>一些人勇敢地拾起了Vim或Emacs，却发现学习曲线陡峭而漫长，
于是在没发现它们的强大之前就放弃了，说：
太难用了，把键盘当鼠标用的烂玩意，有什么好的？</p>
<p>还是有一些人留下来了，坚定地守护着这两大神器。
一些说葡萄太酸的人想离开又不甘心，总是问：
它们到底神在哪里啊？
我不禁想起了李宗盛的几句歌词：:</p>
<pre>有人问我你究竟是哪里好，<br>这么多年我还忘不掉？<br>春风再美也比不上你的笑，<br>没见过你的人不会明了。<br></pre>
<p>也许你不会明了，我还是要努力讲一讲。</p>
</div>
<div>
<h2><a href="http://linuxtoy.org/archives/why-emacs-vim-good.html#id11" id="id3" name="id3">1. 无敌的可扩展性</a></h2>
<div>
<h3><a href="http://linuxtoy.org/archives/why-emacs-vim-good.html#id12" id="id4" name="id4">1.1 可扩展性给了软件强大的生命</a></h3>
<p>曾几何时，Windows用户对软件的可扩展性没有概念，
他们只能对他们使用的软件进行非常有限的定制。
扩展软件的权利保留在软件开发者手中。软件的使用者
如果想要新的功能和特性，只能等待软件的升级。
有能力的用户等不及了，为了添加自己想要的功能，
从0开始写了一款新的软件。
就这样，新的功能意味着新的软件，Windows下的软件
前赴后继，迅速地更新换代着。因此，
Windows下的软件都很短命。</p>
<p>Linux和开源软件渐渐流行起来，人们才发现：
可扩展性才能给软件强大的生命。
在MS的VS横行的今天，Eclipse为什么被评为最好的IDE？
就是因为它在IDE中最具可扩展性。
在IE几乎一统天下的时候，为什么Firefox能夺走越来越多的用户，
也是因为它的可扩展性。
提供了良好的扩展接口，用户自然会写出各种各样的插件，
来满足用户自己形形色色的要求。
这样，软件在用户的推动下自然变得强大了。</p>
<p>Emacs和Vim没有被时代淘汰，反而越发强大，
也正是因为在数不清的编辑器中，他们具有无可匹敌的可扩展性。</p>
</div>
<div>
<h3><a href="http://linuxtoy.org/archives/why-emacs-vim-good.html#id13" id="emacs" name="emacs">1.2 Emacs是伪装成编辑器的操作系统</a></h3>
<p>有句夸张的话说：Emacs是伪装成编辑器的操作系统。
细细想来，这句话并不夸张。</p>
<p>Emacs其实是个Lisp的解释器，因此可以用Lisp灵活地扩展。
Lisp是什么东西，这同样是种很有生命力的编程语言。
在C语言还没有发明的年代，MIT的人工智能实验室写ITS操作系统时，
一部分用的是汇编语言，还有一部分就是用的Lisp。
现在，Lisp仍在人工智能研究领域广泛使用着。</p>
<p>有这么牛逼的扩展语言，注定Emacs向着无所不能的方向发展。
渐渐地，人们用Emacs不再限于写程序，写文档，
而且在Emacs里管理文件系统，运行终端，收邮件，上网，
听音乐&#8230;&#8230;，真是一发不可收拾。甚至，有人用Emacs控制咖啡机煮咖啡。</p>
<p>这种大而全的扩展，背离了&#8220;一个程序只做一件事并做好它&#8221;的
Unix哲学，被Unix的忠诚用户所诟病。可是真的背离了吗？
Emacs说过自己是一个编辑器吗？</p>
<p>正是因为Emacs的无敌的可扩展性，人们才分不清Emacs到底是不是一个编
辑器了。但，就是有人喜欢这种All-in-One的哲学，喜欢在Emacs中完成每
件事。所以才会有人写《生活在Emacs中》，所以，
Emacs才会成为一种信仰。</p>
</div>
<div>
<h3><a href="http://linuxtoy.org/archives/why-emacs-vim-good.html#id14" id="vim-vi" name="vim-vi">1.3 Vim不只是Vi</a></h3>
<p>Vim是Vi最受欢迎的变种之一，除了继承了Vi迅捷的编辑方式，
Vim的功能已经比原始的Vi强大得多。
这也得益于它可以用Vim脚本无限地扩展。
<a href="http://www.vim.org/">Vim.org</a> 上已经有数千个脚本了，给Vim增加各种各样的特性和功能。</p>
<p>为了证明Vim的可扩展性不输于Emacs，也有用户写了
在Vim中玩游戏、运行Shell、和集成GDB在Vim内部调试的插件。
客观地讲，Vim的脚本语言与Emacs的ELisp相比，略显逊色，
但这丝毫不妨碍它把Vim扩展成非常优秀的编辑器。</p>
<p>说到底，Vim的前身Vi和Emacs的设计采用了不同的哲学，
Vi更符合Unix传统，它通过管道机制和系统内各种积木工具打交道，
它讲究的是和系统内的工具程序协作来完成用户的任务。
和Emacs相比，它的定位很明确，就是要做一个强大的编辑器。
因此Vim的绝大部分扩展，都是为了更好地完成编辑文本的任务。</p>
<p>海纳百川，有容乃大。Emacs和Vim通过别的编辑器无法比肩的可扩展性，
不断吸收广大用户的智慧，是它们能成为&#8220;神器&#8221;的原因之一。</p>
</div>
</div>
<div>
<h2><a href="http://linuxtoy.org/archives/why-emacs-vim-good.html#id15" id="id5" name="id5">2. 特立独行的魅力</a></h2>
<div>
<h3><a href="http://linuxtoy.org/archives/why-emacs-vim-good.html#id16" id="id6" name="id6">2.1 可扩展性让你倾注了灵魂</a></h3>
<p>一旦你意识到Vim或Emacs的强大，你就踏上了不停发掘它们潜力的漫漫长
路。你不停地改进自己的配置文件，你不停地搜索更好的插件，甚至有一
天你开始动手写自己的插件。就像剑客保养自己的剑一样，你也甘心花时
间提升你的Vim或Emacs。经年累月，不知不觉，你已经在那把剑上倾注了
你的灵魂。</p>
</div>
<div>
<h3><a href="http://linuxtoy.org/archives/why-emacs-vim-good.html#id17" id="id7" name="id7">2.2 独特的操作方式让你中了毒</a></h3>
<p>Emacs和Vim有着迥异的操作方式，却成了Unix/Linux世界中两种代表性的
操作方式，有些软件的操作方式类似Vi，而有些软件的方式类似Emacs，
甚至有些软件提供了Vi的键绑定和Emacs的键绑定让你选择。
而无论哪种操作方式，对Windows用户来说都是古怪的。
虽说古怪，多少代人也验证了这两种操作方式的高效。</p>
<p>Emacs号称Ctrl到死的编辑器。其实它几乎用了所有的辅助键，
听说过没有，Emacs = Esc + Meta + Alt + Ctrl + Shift。
所以高德纳大师说操作Emacs，就像弹奏管风琴。
Emacs使用非常多的组合按键，这大概也是它高效于其它无模式编辑器的原
因之一。你也可以定义自己的组合键序列，调用自己写的lisp函数，
完成自己想要的功能。</p>
<p>Vi一向是以快速的文本编辑闻名于世的。它的按键更简洁，通常是单个字
符按键，就实现某种操作。但这是以有模式为代价的。你要不停地按Esc在
从它的插入模式返回Normal模式。客观得讲，在文本编辑方面，
Vim比Emacs高效，因为它提供了一些Emacs没有对应功能的操作来辅助高效
的文本编辑。但它的模式切换也让一些人受不了，于是那些人选择了
Emacs。</p>
<p>不管你选择了Vim还是Emacs，你都要为习惯它们独特的操作方式而努力，
这是一个技艺积累的过程。当你习惯了Vim或Emacs，你会有欲罢不能的感
觉，你希望用它们完成尽可能多的任务，
因为你再用别的编辑器也已经不习惯。</p>
<p>用Vim或Emacs就像吸食毒品，慢慢地就会上瘾。
它们会带给你渐渐强烈的快感，但你也向它们献出了自己的灵魂。
这时，你只能称它们为神器。</p>
</div>
</div>
<div>
<h2><a href="http://linuxtoy.org/archives/why-emacs-vim-good.html#id18" id="id8" name="id8">3. 黑客的编辑器</a></h2>
<p>Vim的前身Vi的作者Bill Joy和Emacs的作者Richard Stallman
都是那个时代著名的黑客，所以这两款编辑器一开始面向的主要用户
就是写程序的人，现在仍然是。
它们对编程加入了越来越多的支持，如语法高亮、智能缩进、关键字补全
甚至集成调试。也有越来越多的程序员从IDE转向了Vim和Emacs。</p>
<p>用Vim和Emacs编程到底有什么好处？
我想首先是它们高效的编辑操作会提高你的编程效率。
其次你可以用它们完成各种语言的编程，所谓一剑在手，夫复何求。
你不用再因为编程语言不同去学习不同的IDE的使用，
那些庞大的IDE的升级换代也与你再不相关，
你把精力用于学习编程语言本身就好了。
听说Google和微软内部开发也都不用IDE的，
他们也会用Emacs或Vim。</p>
<p>因为我写的程序不多，还不能深入体会用Vim或Emacs开发程序的乐趣。
我只是觉得这很酷，你看，Linux之父Linus多年来用的是一款
MicroEmacs，它比GNU Emacs或XEmacs少许多功能，但Linus就是用它在维
护Linux。 微软的大牛Don Box，Com之父，一直用Emacs，
他说谁也不能夺走他的编辑器。他还在网上放了一段他用Emacs写C#程序的
视频。</p>
<p>编程大师们的选择，也是Emacs和Vim被追捧为神器的原因之一。</p>
</div>
<h2><a href="http://linuxtoy.org/archives/why-emacs-vim-good.html#id19" id="id9" name="id9">4. 神器引发的圣战</a></h2>
<p>Vim用户和Emacs用户有着旗鼓相当的品位，应该互相欣赏才对。
现实却是，忠诚于Vim的用户和忠诚于Emacs的用户互不相容，
常常没完没了地打口水仗。Emacs用户说Vim的操作方式单一而古怪，
Vim用户说Emacs体积庞大，启动缓慢。</p>
<p>很有点一山不容二虎的意思，大概因为二者都处于神器的高度，才会斗争
不断吧。也可能是因为二者截然不同的设计哲学吸引的用户在价值观上也
互不认同。</p>
<p>正因为两者难分高下，新人总是在Vim和Emacs之间犹豫不定，
很难决定到底要皈依哪一个神。</p>
</div>
<br> <img src ="http://www.cppblog.com/songhaifeng/aggbug/139104.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/songhaifeng/" target="_blank">海豚</a> 2011-01-22 02:00 <a href="http://www.cppblog.com/songhaifeng/archive/2011/01/22/139104.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>