Emacs和Vim:神的編輯器和編輯器之神
0. 序章:神器的傳說
在這個蔚藍色的星球上,流傳著兩大神器的傳說:據(jù)說Emacs是神的編輯器,而Vim是編輯器之神。
追求獨步天下的高手和低手們爭著一睹它們的風采,可看到它們樸素單薄的界面后,不禁心下懷疑:這就是神器嗎?甚至有人生了輕視之心。
膚淺的人嗤之以鼻,說:什么年代了,還抱著這么老土的玩意不放,真他媽Geek!同學,請冷靜下來,聽我說:它們的確夠老了,都幾十年的壽命了,但你想想為什么,為什么這么古老的編輯器,卻有越來越多的人皈依它們。
Windows下用UltraEdit和Editplus的人質(zhì)問:它們到底比UltraEdit和Editplus好在哪里?我說:不可同日而語。
連UltraEdit和EditPlus都沒用過的同學問:它們就相當于Linux上的 Notepad吧?我說:請你從我的眼前消失。
一些人勇敢地拾起了Vim或Emacs,卻發(fā)現(xiàn)學習曲線陡峭而漫長,于是在沒發(fā)現(xiàn)它們的強大之前就放棄了,說:太難用了,把鍵盤當鼠標用的爛玩意,有什么好的?
還是有一些人留下來了,堅定地守護著這兩大神器。一些說葡萄太酸的人想離開又不甘心,總是問:它們到底神在哪里啊?我不禁想起了李宗盛的幾句歌詞::
有人問我你究竟是哪里好,
這么多年我還忘不掉?
春風再美也比不上你的笑,
沒見過你的人不會明了。
也許你不會明了,我還是要努力講一講。
主流編輯器學習曲線圖
1. 無敵的可擴展性
1.1 可擴展性給了軟件強大的生命
曾幾何時,Windows用戶對軟件的可擴展性沒有概念,他們只能對他們使用的軟件進行非常有限的定制。擴展軟件的權(quán)利保留在軟件開發(fā)者手中。軟件的使用者如果想要新的功能和特性,只能等待軟件的升級。有能力的用戶等不及了,為了添加自己想要的功能,從0開始寫了一款新的軟件。就這樣,新的功能意味著新的軟件,Windows下的軟件前赴后繼,迅速地更新?lián)Q代著。因此, Windows下的軟件都很短命。
Linux和開源軟件漸漸流行起來,人們才發(fā)現(xiàn):可擴展性才能給軟件強大的生命。在MS的VS橫行的今天,Eclipse為什么被評為最好的IDE?就是因為它在IDE中最具可擴展性。在IE幾乎一統(tǒng)天下的時候,為什么Firefox能奪走越來越多的用戶,也是因為它的可擴展性。提供了良好的擴展接口,用戶自然會寫出各種各樣的插件,來滿足用戶自己形形色色的要求。這樣,軟件在用戶的推動下自然變得強大了。
Emacs和Vim沒有被時代淘汰,反而越發(fā)強大,也正是因為在數(shù)不清的編輯器中,他們具有無可匹敵的可擴展性。
1.2 Emacs是偽裝成編輯器的操作系統(tǒng)
有句夸張的話說:Emacs是偽裝成編輯器的操作系統(tǒng)。細細想來,這句話并不夸張。
Emacs其實是個Lisp的解釋器,因此可以用Lisp靈活地擴展。 Lisp是什么東西,這同樣是種很有生命力的編程語言。在C語言還沒有發(fā)明的年代,MIT的人工智能實驗室寫ITS操作系統(tǒng)時,一部分用的是匯編語言,還有一部分就是用的Lisp。現(xiàn)在,Lisp仍在人工智能研究領(lǐng)域廣泛使用著。
有這么牛逼的擴展語言,注定Emacs向著無所不能的方向發(fā)展。漸漸地,人們用Emacs不再限于寫程序,寫文檔,而且在Emacs里管理文件系統(tǒng),運行終端,收郵件,上網(wǎng),聽音樂……,真是一發(fā)不可收拾。甚至,有人用Emacs控制咖啡機煮咖啡。
這種大而全的擴展,背離了“一個程序只做一件事并做好它”的 Unix哲學,被Unix的忠誠用戶所詬病??墒钦娴谋畴x了嗎? Emacs說過自己是一個編輯器嗎?
正是因為Emacs的無敵的可擴展性,人們才分不清Emacs到底是不是一個編輯器了。但,就是有人喜歡這種All-in-One的哲學,喜歡在Emacs中完成每件事。所以才會有人寫《生活在Emacs中》,所以, Emacs才會成為一種信仰。
1.3 Vim不只是Vi
Vim是Vi最受歡迎的變種之一,除了繼承了Vi迅捷的編輯方式, Vim的功能已經(jīng)比原始的Vi強大得多。這也得益于它可以用Vim腳本無限地擴展。 Vim.org 上已經(jīng)有數(shù)千個腳本了,給Vim增加各種各樣的特性和功能。
為了證明Vim的可擴展性不輸于Emacs,也有用戶寫了在Vim中玩游戲、運行Shell、和集成GDB在Vim內(nèi)部調(diào)試的插件??陀^地講,Vim的腳本語言與Emacs的ELisp相比,略顯遜色,但這絲毫不妨礙它把Vim擴展成非常優(yōu)秀的編輯器。
說到底,Vim的前身Vi和Emacs的設(shè)計采用了不同的哲學, Vi更符合Unix傳統(tǒng),它通過管道機制和系統(tǒng)內(nèi)各種積木工具打交道,它講究的是和系統(tǒng)內(nèi)的工具程序協(xié)作來完成用戶的任務。和Emacs相比,它的定位很明確,就是要做一個強大的編輯器。因此Vim的絕大部分擴展,都是為了更好地完成編輯文本的任務。
海納百川,有容乃大。Emacs和Vim通過別的編輯器無法比肩的可擴展性,不斷吸收廣大用戶的智慧,是它們能成為“神器”的原因之一。
2. 特立獨行的魅力
2.1 可擴展性讓你傾注了靈魂
一旦你意識到Vim或Emacs的強大,你就踏上了不停發(fā)掘它們潛力的漫漫長路。你不停地改進自己的配置文件,你不停地搜索更好的插件,甚至有一天你開始動手寫自己的插件。就像劍客保養(yǎng)自己的劍一樣,你也甘心花時間提升你的Vim或Emacs。經(jīng)年累月,不知不覺,你已經(jīng)在那把劍上傾注了你的靈魂。
2.2 獨特的操作方式讓你中了毒
Emacs和Vim有著迥異的操作方式,卻成了Unix/Linux世界中兩種代表性的操作方式,有些軟件的操作方式類似Vi,而有些軟件的方式類似Emacs,甚至有些軟件提供了Vi的鍵綁定和Emacs的鍵綁定讓你選擇。而無論哪種操作方式,對Windows用戶來說都是古怪的。雖說古怪,多少代人也驗證了這兩種操作方式的高效。
Emacs號稱Ctrl到死的編輯器。其實它幾乎用了所有的輔助鍵,聽說過沒有,Emacs = Esc + Meta + Alt + Ctrl + Shift。所以高德納大師說操作Emacs,就像彈奏管風琴。 Emacs使用非常多的組合按鍵,這大概也是它高效于其它無模式編輯器的原因之一。你也可以定義自己的組合鍵序列,調(diào)用自己寫的lisp函數(shù),完成自己想要的功能。
Vi一向是以快速的文本編輯聞名于世的。它的按鍵更簡潔,通常是單個字符按鍵,就實現(xiàn)某種操作。但這是以有模式為代價的。你要不停地按Esc在從它的插入模式返回Normal模式??陀^得講,在文本編輯方面, Vim比Emacs高效,因為它提供了一些Emacs沒有對應功能的操作來輔助高效的文本編輯。但它的模式切換也讓一些人受不了,于是那些人選擇了 Emacs。
不管你選擇了Vim還是Emacs,你都要為習慣它們獨特的操作方式而努力,這是一個技藝積累的過程。當你習慣了Vim或Emacs,你會有欲罷不能的感覺,你希望用它們完成盡可能多的任務,因為你再用別的編輯器也已經(jīng)不習慣。
用Vim或Emacs就像吸食毒品,慢慢地就會上癮。它們會帶給你漸漸強烈的快感,但你也向它們獻出了自己的靈魂。這時,你只能稱它們?yōu)樯衿鳌?/p>
3. 黑客的編輯器
Vim的前身Vi的作者Bill Joy和Emacs的作者Richard Stallman 都是那個時代著名的黑客,所以這兩款編輯器一開始面向的主要用戶就是寫程序的人,現(xiàn)在仍然是。它們對編程加入了越來越多的支持,如語法高亮、智能縮進、關(guān)鍵字補全甚至集成調(diào)試。也有越來越多的程序員從IDE轉(zhuǎn)向了Vim和Emacs。
用Vim和Emacs編程到底有什么好處?我想首先是它們高效的編輯操作會提高你的編程效率。其次你可以用它們完成各種語言的編程,所謂一劍在手,夫復何求。你不用再因為編程語言不同去學習不同的IDE的使用,那些龐大的IDE的升級換代也與你再不相關(guān),你把精力用于學習編程語言本身就好了。聽說Google和微軟內(nèi)部開發(fā)也都不用IDE的,他們也會用Emacs或Vim。
因為我寫的程序不多,還不能深入體會用Vim或Emacs開發(fā)程序的樂趣。我只是覺得這很酷,你看,Linux之父Linus多年來用的是一款 MicroEmacs,它比GNU Emacs或XEmacs少許多功能,但Linus就是用它在維護Linux。 微軟的大牛Don Box,Com之父,一直用Emacs,他說誰也不能奪走他的編輯器。他還在網(wǎng)上放了一段他用Emacs寫C#程序的視頻。
編程大師們的選擇,也是Emacs和Vim被追捧為神器的原因之一。
4. 神器引發(fā)的圣戰(zhàn)
Vim用戶和Emacs用戶有著旗鼓相當?shù)钠肺唬瑧摶ハ嘈蕾p才對?,F(xiàn)實卻是,忠誠于Vim的用戶和忠誠于Emacs的用戶互不相容,常常沒完沒了地打口水仗。Emacs用戶說Vim的操作方式單一而古怪, Vim用戶說Emacs體積龐大,啟動緩慢。
很有點一山不容二虎的意思,大概因為二者都處于神器的高度,才會斗爭不斷吧。也可能是因為二者截然不同的設(shè)計哲學吸引的用戶在價值觀上也互不認同。
正因為兩者難分高下,新人總是在Vim和Emacs之間猶豫不定,很難決定到底要皈依哪一個神。
【編輯推薦】