釵黛雙收:若你也同Vim難割捨,卻又看Emacs情切切

釵黛雙收:若你也同Vim難割捨,卻又看Emacs情切切

1 釵黛雙收:若你也同Vim難割捨,卻又看Emacs情切切 (引子)

這篇文章分享我的一些經歷,寫給和我一樣對嬌小的Vim難以割捨,又在抱上Emacs這個大家閨秀以後死活不願意撒手的朋友們。

如果你不知道什麼是“編輯器聖戰”,那不妨百度Google一下,總之是自從開闢鴻蒙以來,就有兩個以伴君左右爲己任的賢內助(Vim編輯器和Emacs編輯器)在互掐。由於兩位佳人的理念差別之大,加上各自陣營之間的鴻溝之深,使得先賢先哲基本上都會在這兩個陣營裏面挑一個來站隊。

網絡普及以後,凡有帖子對Vim和Emacs這兩大編輯器作出比較,大都有成爲必刪貼的潛質。原因很好理解,無論是誰看了紅樓夢,很難不對寶釵黛玉這兩位產生點好惡,此後但凡有人起了個頭要對釵黛二人做點比較,那後面的樓經常能蓋歪到變成地域攻擊男女對罵。在技術論壇裏,這樣折騰不被河蟹掉纔怪。更有甚者,如果誰在討論編程的時候問了一句“需要做xx開發,用什麼工具比較好?”隨後也常常演變成Vim對Emacs的釵黛攻伐,最後一樣飛沙走石天昏地暗。這就說明,選擇Vim或Emacs已經不僅取決於我們在編輯文本時的好惡,而已經上升到幹活的人怎麼挑工具,過日子的人怎麼選老婆這種哲學高度的問題。

我一向覺得,成事者不可狹於器。所以選工具時候沒必要爲了工具本身而搞個粉絲團,而是就着菜選刀,比着孩子找媳婦,攬來什麼樣的活計使什麼樣的傢伙。若以我的經驗來概括,Vim的犀利在於鍵盤操作,練家子爽得是用最少的手指運動完成編輯;Emacs的NB在於自定義功能,高手們都有一套獨門不傳的腳本,所以Emacser滿手都是絕活,靠這些絕活上天入地無所不能。注意,這裏要講的既不是比出高下,也不是評測完了各打五十大板和稀泥。而是說說提煉出兩個工具的精華加以“雙修”,用足夠務實的態度來平息爭端。

先說點野史當引子。大學裏面從來都不缺廢寢忘食折騰電腦的兄弟。他們當中應該有不少動機都和當年的我一樣:希望被人誤認爲是電腦高手。這種僞裝有一個巨大的好處——沒準能多給女生重裝幾次Windows。

不過,重裝Windows的高手們爲了哥們面前神侃時不露怯,基本上還要玩過點一般人玩不轉的GNU/Linux。我想,工科男生們的Linux情結,怕有不少是因此而生。然而凡事不易,玩Linux是要自己改配置文件的,這倒是根硬骨頭。

骨頭硬的重要原因麼,編輯器不順手。在那沒有Ubuntu的年代裏,誰要是折騰幾個晚上裝好一臺Linux的小白肉雞,會發現可用的編輯器只有Vim。這玩意和Windows的記事本、Dos的edit相比簡直就是個怪胎。這一點想必Emacser也深有感觸吧,進到Vim裏面若是不懂命令,肯定是在一陣滴滴滴過後連一個字母都敲不到屏幕上。

當裝機聖手們的情商智商普遍被挑戰了以後,大致是迅速分化爲兩派——啃骨頭派和換骨頭派。啃派如我,繼續捏着腳適應Vim的小鞋;換派不用說也能猜到,自然是鞋也不要就轉身踏入了Emacs陣營——在那邊起碼知道怎麼打字。

按說天朝對於西方的編輯器聖戰應該是打醬油的態度,但實際情況是,啃派和換派儼然形成了自己的聖戰副本。

2 釵黛雙收:若你也同Vim難割捨,卻又看Emacs情切切 (Vim篇)

那段時間作爲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實在是精緻獨特得有點像個林妹妹。但誰要是希望家裏也有個林妹妹,光把自家丫頭照着繡像打扮打扮是不行的,必須從零開始養成一個。而且就算真能養出來個“天上掉下來”一般的可人兒,管家婆的位置仍然沒她的份。

3 釵黛雙收:若你也同Vim難割捨,卻又看Emacs情切切 (Emacs篇,結局)

一旦破除了心理障礙,在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是兩位身手不凡的應聘者,那麼當然應該是兩個都收了而後“擇其善者而從之”,這纔是對自家生意負責。不過對選編輯器如選媳婦的人來說,兩大神器雙修在手,盡在此一句:

惘於環肥燕瘦,顰悵蹙茫

哪比舉釵盈黛,牽黃擎蒼?


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章