誰說Vim不是IDE?(一)

池建強發表於2012-10-30

話說作業系統、程式語言和編輯器似乎是程式設計師永恆的吐槽話題,技術發展了幾十年,大家討論起這幾個“之爭”還是充滿憤怒、津津樂道。有人描述過Emacs和VI程式設計師,大家沿著不同的道路和目標前進,但總是會在某個點交叉相遇,互相扔石頭,砸到對方鼻青臉腫,然後收拾心情又繼續前行。

前一陣子我在微博上寫了一條微博回覆,是關於Vim和IDE討論的:Vim和那些IDE的應用場景還是有區別的,在我看來Vim也是IDE,是程式設計師的必備技能之一。這基本表達了我的觀點。

微博@玉伯也叫射鵰釋出的,這條微博轉發了評論了幾百次。其實表達的意思很清楚,而且主要是針對前端開發的,但是140個字實在是太少了,以至於還沒來得及解釋,很多服務端程式設計師已經擼著胳膊衝上去了,玉伯後來還是在Github上寫了片長文,才算告一段落。文章很好,有興趣的童靴就別看微博了,累,直接看這篇文章就好。

這件事的直接後果,或者說給我留下的後遺症就是,每次自己使用Vim的是總會琢磨一下這檔子事,都是程式設計師,都是編輯器,怎麼就那麼大的區別呢?有那麼大的區別嗎?越琢磨越覺得該寫篇文章說說Vim這點事。非爭論,僅闡述和分享,因為工作十幾年來我從來就不是用一種程式設計工具搞定一切的主兒,不同場景下各種編輯器都用過。用錯過,也用對過,能在最合適的場景使用最合適的工具已經是了不起的成就了。每種優秀的編輯器都有一些傳奇的故事,都值得大書特書,但這次我只想聊一聊Vim。

很多人把Vim和Emacs相提並論,有人說Emacs這貨就是個捆綁了文字編輯器的作業系統,我很少用Emacs,不熟,但感覺這話大氣磅礴。Vim雖比不了作業系統,但也形成了自己的生態環境。看似簡單的工具,似乎就是個充滿快捷鍵和速度感的文字編輯器而已,一旦深入進去,卻充滿了無窮的樂趣......

至於為什麼給這篇文章起這麼個名字,讀者就當做是個噱頭好了。其實Vim、Emacs、ST2等已經和IDE沒有太大區別了。

程式設計人生

我個人接觸vim從2000年開始,當時正值第一波網際網路浪潮,我剛畢業不久,一如現在的熱血青年,投身到網際網路的大熔爐中(當然和現在的網際網路弄潮兒不一樣的,當年我們大部分都被熔掉了),我參與的第一款網際網路產品是洪恩線上。

當時洪恩聚集了很多清華北大的學子,有很多技術牛人,比如Baby、Star、Panpan等等,都是響噹噹的人物,後來這些人有的離開開創了自己的事業,有的留在洪恩組成了完美世界遊戲平臺的技術班底。在當時都是需我仰望的角色,他們清一色都使用Vim在伺服器端程式設計,連語法高亮都不設定,搭建的BBS也是當年水木清華那種,通過終端Telnet訪問。一進辦公室,清一色都是黑漆漆的螢幕,黑地綠字,噼噼啪啪的在那裡敲鍵盤,非常有韻律,我想,這簡直酷斃了。

那會兒用的伺服器端作業系統記得是Redhat Linux和FreeBSD,程式語言是Perl、HTML4和Javascript。在這種的環境下,對我這樣一個常年使用Editplus的菜鳥來說壓力非常大,別人的開發、編譯和釋出環境都在伺服器端,而我則需要在本地編寫好程式,通過Editplus的ftp功能上傳到伺服器端,再進行除錯、測試和釋出,非常麻煩。所以我的工作除了學習程式設計技巧,還需要掌握Linux操作和Vim編輯器。當時吃住都在公司,時間充裕到讓你不學習都不好意思,於是很快掌握了Linux和Vim的基本操作,編碼時雙手在鍵盤上下翻飛非常有成就感。我對語法高亮情有獨鍾,經常把自己的介面配置的花花綠綠,沒事看看也是一種樂趣。

自此以後,十幾年過去了,自己的工作一直沒有離開過Vim,2001年開始使用Java、Jsp,當時Eclipse、IDEA、Netbeans這樣的“神器”還未崛起,大家依舊在伺服器端程式設計,通過make編譯和除錯,通過編寫Shell指令碼進行整合測試和釋出,包括產品安裝。後來隨著這些牛IDE的發展,JavaEE相關的工作大部分轉移到IDE中完成,接著寫了兩年Python等指令碼,又開始大量使用Vim,程式設計環境是Solaris。此後的工作涉及了很多技術,Vim斷斷續續一直在用。到了2009年,我開始把工作環境完全切換到了Mac上,記得當時開啟Mac的終端,欣喜若狂的想,這不就是Vim、Shell和IDE的完美集合麼?後來還專門寫了一篇部落格來介紹這段經歷。

直到現在,Vim依然是我工作和學習中不可缺少的一個工具平臺,單單就Vim來說,還有太多東西要學...

使用場景

我提倡在不同的場景下采用最合適的工具,這一點和 @玉伯也叫射鵰 是一致的。那麼就有人問,Vim適合什麼場景呢?簡單說,Vim比較適合Unix/Linux伺服器端程式設計,當然這因人而異。我個人使用Vim主要用來進行Shell/Python/C程式設計。Ruby也寫,但更多使用Textmate。在Unix/Linux伺服器端編輯和修改檔案也離不開Vim,另外由於我個人工作環境是Mac,所以改個文字檔案什麼的,也就用Vim順手做了。

和現實中很多程式設計師交流時,大家會認為不用Vim一樣能修改伺服器端的檔案,ftp拉下來,改好了再傳上去。這當然是一種方案,但不是最優方案。而且極端情況下需要直接在客戶伺服器上解決問題,你總不能說對不起我不會在Linux下編輯檔案,Down一份下來先?這就像用Vim編寫Markdown檔案一樣,能不能用,當然可以,甚至有人已經為Vim開發了MD外掛,可以編寫時通過快捷鍵檢視轉換的HTML文字,但是這顯然不如Mou+Byword。

編寫JavaEE、HTML/CSS/JS、Objective-C,最優方案可能是Eclipse、IDEA、XCode等,這些優秀的工具可以幫助我們提升效率,減少錯誤,但是如果你還想更進一步,那麼Vim絕對值得你擁有。

Vim用了很多年,一直沒有總結過(這個人很懶),我想正好用這篇文章分享一下心得和用法。網路上介紹Vim的文章浩如煙海,各種精巧的用法數不勝數,看起來還是比較費時費力。Vim本身開箱即用,什麼都不配置也可以使用其基本功能,如果大家掌握了基本操作,以下內容可以幫助提升效率,打造你的專屬Vim。

<待續,下一篇介紹VIM的基礎概念和配置,然後是外掛,然後是VIM程式設計......>

相關文章