这篇文章分享个人一些经历,写给和我同样对娇小的Vim难以割舍,又在抱上Emacs这个你们闺秀之后死活不肯意撒手的朋友们。 html
若是你不知道什么是“编辑器圣战”,那不妨百度Google一下,总之是自从开辟鸿蒙以来,就有两个以伴君左右为己任的贤内助(Vim编辑器和Emacs 编辑器)在互掐。因为两位佳人的理念差异之大,加上各自阵营之间的鸿沟之深,使得先贤先哲基本上都会在这两个阵营里面挑一个来站队。编程
网络普及之后,凡是有帖子对Vim和Emacs这两大编辑器做出比较,大都有成为必删贴的潜质。缘由很好理解,不管是谁看了红楼梦,很难不对宝钗黛玉这两位 产生点好恶,此后但凡是有人起了个头要对钗黛二人作点比较,那后面的楼常常能盖歪到变成地域攻击男女对骂。在技术论坛里,这样折腾不被河蟹掉才怪。更有甚 者,若是谁在讨论编程的时候问了一句“须要作xx开发,用什么工具比较好?”随后也经常演变成Vim对Emacs的钗黛攻伐,最后同样飞沙走石天昏地暗。 这就说明,选择Vim或Emacs已经不只取决于咱们在编辑文本时的好恶,而已经上升到干活的人怎么挑工具,过日子的人怎么选老婆这种哲学高度的问题。vim
我一贯以为,成事者不可狭于器。因此选工具时候不必为了工具自己而搞个粉丝团,而是就着菜选刀,比着孩子找媳妇,揽来什么样的活计使什么样的家伙。若以 个人经验来归纳,Vim的犀利在于键盘操做,练家子爽得是用最少的手指运动完成编辑;Emacs的NB在于自定义功能,高手们都有一套独门不传的脚本,所 以Emacser满手都是绝活,靠这些绝活上天入地无所不能。注意,这里要讲的既不是比出高下,也不是评测完了各打五十大板和稀泥。而是说说提炼出两个工 具的精华加以“双修”,用足够务实的态度来平息争端。浏览器
先说点野史当引子。大学里面历来都不缺废寝忘食折腾电脑的兄弟。他们当中应该有很多动机都和当年的我同样:但愿被人误认为是电脑高手。这种假装有一个巨大的好处——没准能多给女生重装几回Windows。网络
不过,重装Windows的高手们为了哥们面前神侃时不露怯,基本上还要玩过点通常人玩不转的GNU/Linux。我想,工科男生们的Linux情结,怕有很多是所以而生。然而凡事不易,玩Linux是要本身改配置文件的,这却是根硬骨头。编辑器
骨头硬的重要缘由么,编辑器不顺手。在那没有Ubuntu的年代里,谁要是折腾几个晚上装好一台Linux的小白肉鸡,会发现可用的编辑器只有Vim。这 玩意和Windows的记事本、Dos的edit相比简直就是个怪胎。这一点想必Emacser也深有感触吧,进到Vim里面如果不懂命令,确定是在一阵 滴滴滴事后连一个字母都敲不到屏幕上。工具
当装机圣手们的情商智商广泛被挑战了之后,大体是迅速分化为两派——啃骨头派和换骨头派。啃派如我,继续捏着脚适应Vim的小鞋;换派不用说也能猜到,天然是鞋也不要就转身踏入了Emacs阵营——在那边起码知道怎么打字。ui
按说天朝对于西方的编辑器圣战应该是打酱油的态度,但实际状况是,啃派和换派俨然造成了本身的圣战副本。spa
那段时间做为Vim啃派,我和许多队友同样有个自恃甚高的理由来支持Vim:编辑时击键次数最少。可是私下里想一想,这个理由多少有些往脸上贴金。操作系统
其实Vim用多了之后,并不仅是臣服于高效,更多的是手指头上瘾。用咱们运动神经控制的行话来讲,Vimer的大脑已经被触觉感官和运动神经一块儿绑架了。那些用手指肌肉记住的命令,执行起来基本不怎么过脑子。并且一旦命令执行成功,脑中还会生成大量“多巴胺”以示奖励。
看过《生活大爆炸》的应该都有印象,Leslie夜晚敲Leonard的门,只不过是为了缓解本身多巴胺分泌过剩……因此Vimer生存在这样一种状态 下:只要不用hjkl这种奇怪的击键来移动光标,就会流着眼泪打着呵欠思念不已;反过来一旦用上了hjkl,那就等于在重复《生活大爆炸》里面那种神经感 受。你说像在嗑药也行。
Vim瘾上身以后必然产生一个愿望,那就是以嗑药的方式,额,以Vim的方式来操做全部的软件。很不幸,持有这种愿望的啃派们几乎都会发现,就算骨头啃下来了,它也是打狗不能的。
首先,想替小家碧玉Vim扩展出十八般武艺,这个基本上真的很难。难的根本缘由是Vim给用户预留的扩展能力先天不足。Vim的设计者压根没考虑把它作成一个放之四海而皆准的巨无霸,因此Vim打从娘胎里出来时在胃口上就不太给力。
既然此路不通,那只好另求变法。为了让啃骨头时攒下的功夫不至于荒废,能不能对其余软件的键盘操做方式动动刀,让它们起码和Vim敲起来差很少?这也很 难。虽然软件的操做方式一般能够自定义,但自定义的途径大可能是修改键位绑定。这种途径有个与生俱来的短板,它并不能区分出Vim里的“命令模式”和“编辑 模式”。不巧的是,这种模式区分偏偏是Vim操做方式的核心。说到底,要想在其余软件里面模拟Vim,基本上等同于从新开发一遍。因此这么多年我只见到 Firefox的Vimperator插件作到了在宿主软件(Firefox)中对Vim几乎彻底模拟(固然有若干Chrome和Visual Studio的插件也能够部分模拟Vim,但我的意见它们的“类Vim”程度都还差得远)。并且现现在浏览器混战成这个样子,哪一个插件都巴不得全机种通 吃,但Vimperator却丝毫没有往其余浏览器上移植的意思。这也从某种意义上证实模拟Vim不是件容易的事。
折腾这一大圈,发现一个无奈而不争的事实:Vim因为太过婉约,终归没有可能升任管家。意思就是不可能让全部软件用起来都像是在操做Vim同样。因此我只 好把Vim养在硬盘里没事绣绣花打打字,而让管家这个肥缺虚位以待。起色出如今某一天,那天后知后觉的看到了一个老掉牙的故事,福特汽车的创始人亨利福特 说,在汽车发明之前若是你问消费者想要什么,他们会说想要跑得更快的马。苹果的乔大爷也老是拿这个故事来讲事,意思就是我苹果这才叫真正抓住了问题的核心 ——(出门人)要的未必是马,而是快;(iPhone粉丝)要的未必是多任务,而是上网的时候还能听个小曲。
这个产品设计的例子启发在哪?在我看来,当一个愿望被挖出来之后,不见得须要照本宣科才能知足这个愿望。若是换个解法还能知足,那说明你hit the button了。换句话说,当引子出来后,故事往下怎么续是文无定法的。
回到眼前这个事上,啃骨头派的愿望是用Vim的操做方式来一统江湖,不过果然非得“用Vim的方式”吗?恐怕重点仍是“一桶浆糊”吧。玩电脑的都是懒人, 懒人有个癖好叫“Don’t repeat yourself”,若是谁弄出一套比较高效的键盘操做方式,能让我学一次之后就不用再学了,那就暂时去tnnd的门派。
用个比方来作总结,Vim实在是精致独特得有点像个林妹妹。但谁要是但愿家里也有个林妹妹,光把自家丫头照着绣像打扮打扮是不行的,必须从零开始养成一个。并且就算真能养出来个“天上掉下来”通常的可人儿,管家婆的位置仍然没她的份。
一旦破除了心理障碍,在Vim以外寻求“管家婆”的人选也就不算做倒戈了。电影《社交网络 The Social Network》里面有这样一个镜头,在扎克伯格同窗悲愤不已,要把女生头像和畜生猪狗一块儿打分时,他来了句“有必要重启Emacs,修改代码”。这个杜 撰的场景告诉咱们,IT巨星再怎么胸怀壮志,始于足下的不过是手指另外一端连着的编辑器。当geek们叫嚣要在世界上留下一个痕迹(make a dent in the universe)的时候,手里经常拎着一把折凳,折凳背面写着——Emacs。
我用Emacs的最初经历和不少Emacser可能稍有不一样,但想必都是从跌跌撞撞的青涩回忆开始,最后让Emacs成了一个“全能伴侣”而浑不自知。博 士期间,我主要用的工具是Matlab和Visual Studio,这两个工具自带的编辑器与Vim相比都是小白,属于要严重影响心情和智商的那一种。可是,不管是Matlab仍是Visual Studio,它们自带的小白编辑器都只有Emacs模式,没有Vim模式(缘由如前所述,模拟Vim很难)。这好歹是聊胜于无,并且既然Emacs用户 能从中受益,我凭什么不试试。不得不说,若是目的是用统一的键盘操做方式来使用各类软件,Emacs的领地实在是太广了。除了Matlab和Visual Studio这种内部假装出一部分Emacs的快捷键之外,很是值得一提的是还有一个日本人写的软件Xkeymacs。这玩意干脆把Windows的快捷 键所有接管了,直接让全部Windows软件用起来都跟Emacs一个感受。因此若是你像我同样不得不在Word里面写文稿的话 (Neuroscience领域不少教授不是工程背景,只用Word),就知道Xkeymacs让你舒服在哪里了。难怪一个老外在评价的时候说 Xkeymacs这个李鬼软件好到让人“心中不安(disturbingly good)”。
搞笑的是,我是直到在Xkeymacs这种替身杂牌军中用熟了Emacs快捷键以后,才开始慢慢尝试Emacs本尊。开始时先把Emacs配成了 Matlab IDE,用它搞定了整个博士课题的数据处理,后来又陆续使用了cedet,etag,yasnippet这些扩展,再加上秒杀笔记、日程、Wiki、表 格、博文的org-mode……算是把我这个入门级的Hacker武装到了神经末梢。虽然我不像其余Emacser通常能够骄傲的说本身“活在Emacs 里”,但若说最近重要的工做成果都是在Emacs上创做出来,这话倒是一点也不假。到了这个时候,Emacs已经彻底升任管家婆,堪比宝钗再世。若是谁也 有似曾相识的回忆,想必能够深入体会到这样一个比较狗血的剧情,若宝玉能和Emacs同样的宝钗姐姐继续好下去,那彻底有但愿弄出个明朝版的百度,东山再 起。
但是做为Vim的死忠,对于手掌几乎不挪窝的向往,那是消失不掉的。
坊间对于Emacs有一条经典评语,说Emacs是“假装成编辑器的操做系统”。言下之意就是Emacs什么都能作(包括经典的煮咖啡)。 既然Emacs都神通成瑞士军铲了,何不另辟蹊径,用军铲削出一个Vim呢?西方究竟是计算机技术的始做俑者,对Emacs这种恐龙级工具而言,能被摆弄 的四十年来都被摆弄一遍了。因此只要放狗一搜,就会发现Emacs竟然自带Vim模拟,名叫viper-mode。并且为了让viper-mode更像 Vim,还有第三方开发了一套叫作vimpulse的加强包。也就是说,只要下载一个vimpulse.el脚本,丢到Emacs的启动路径中,它就能够 几乎完美的模拟Vim!
写到这里,折腾的两条主线已在此收敛,引起“圣战”的两大神器也已经被和谐进了同一个窗口。再往下就该写些技术笔记和心得回顾,不在这篇的目的以内,所以 应该歇笔了。若是要问我究竟是在用Emacs仍是在用Vim,或问哪一方赢得了个人选择?我也不知道。每当想写点程序、调段脚本、码点wiki、记记笔记 的时候,我用的都是Emacs提供的外加本身用eLisp扩展出的功能;可是当码出来的东西让人不爽,须要浏览、修改和整理的时候,手指弹出的又都是 Vim的命令。
回到最开始说的,如果你用电脑要作的事和我差很少,并且也以为用键盘工做是很爽的一件事,那就应该试试Emacs+Vim双修。道理很简单,假如你是包工 头,而Emacs和Vim是两位身手不凡的应聘者,那么固然应该是两个都收了然后“择其善者而从之”,这才是对自家生意负责。不过对选编辑器如选媳妇的人 来讲,两大神器双修在手,尽在此一句:
惘于环肥燕瘦,颦怅蹙茫
哪比举钗盈黛,牵黄擎苍?