話說操作系統、編程語言和編輯器似乎是程序員永恆的吐槽話題,技術發展了幾十年,大家討論起這幾個“之爭”還是充滿憤怒、津津樂道。有人描述過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編程......>