Vim - 從廝守到分開

在我剛開始以寫程式為工作時,一開始想學的其實是 Emacs。當時的主管把 Emacs 用得滾瓜爛熟,常常在他旁邊看他一下執行 Makefile 編譯,一下啟動程式,然後 gdb 除錯、trace、看 memory dump —— 所有的這一切都是在 Emacs 中完成。

我當時也強迫自己練習了一陣子,可是 Emacs 豐富的組合鍵似乎就是與我格格不入。從最初彆扭的縮小指去按 Ctrl,到後來學主管直接用小指腹按,儘管有所進展,但仍舊覺得卡手,有些指令需要按兩組複合鍵,讓我覺得很困惑,貧弱的腦袋無法將其消化轉換成身體記憶。也是在差不多同樣的時間,我又開始用起了 Vim,這個我在大學時只知道 :wqa, i 幾個指令的編輯器。

Vim 的指令多,又有模式切分,乍看起來複雜許多。但是搭配一些指令背後的邏輯,倒是也不難記,一但記住了也很難忘掉;切分模式,讓你在非輸入模式下可以直接用一個按鍵去作 Navigation,更不用去煩惱什麼時候複合鍵是 Ctrl,什麼時候是 Alt。

好像有點離題了,本來想聊的是 Emacs 與 Vim 給我的概念上的哲學感受。不過我後來接觸 Emacs 少,這部分比較片面,所以姑且是個人感覺,說不得準。先說 Emacs,Emacs 給我的感覺像是一個萬能的 IDE,甚至超過 IDE,用它來看圖、逛網頁、收發信件、列待辦清單或甚至泡咖啡 (RFC2324) 都不成問題 —— 有種極端的 Emacs 使用者,開機後第一件事情就是開 Emacs,然後所有在電腦裡處理的工作都是在裏頭完成,一直到關機,才又回到作業系統。雖然這有點誇大,但也說明了 Emacs 的訴求,就是將你的工作全部都集中在這一站裏頭完成。

Vim 則是相反,他就做好編輯器這件事,除此之外都是半調子。我曾經為了讓 Vim 能與 gdb 好好地整合在一起,折騰過好一陣子,但最後效果總是沒有我在 Emacs 上體驗到的美好。從一個 IDE 的角度來看,Vim 也欠缺了許多東西。但回歸到編輯上,Vim 的 Navigation 模式著實能讓人感受到編輯器的強大,在手不需要離開鍵盤的情況下,可以輕易選取/刪除你想要的文字、段落、區塊,就像任意地在文件中飛舞跳躍一般。

但老實說,這一兩年我使用 Vim 的比率也下滑了許多。以前只要是編輯文件第一個就開 Vim,現在則是手邊剛好有啥就用啥。但這不代表我離開了 Vim,反而 Vim 的操作更內化了:遇到一個新的編輯器,我首先找的就是它有沒有「Vi Mode」(這裡順便罵一下 Mono Develop 的 Vi Mode 超爛),我雖然不用 Vim 看網頁,但是我用 Vimperator, Vimium,這讓我在看網頁時與我在 Vim 下編輯時有一致的操作體驗,類似的 Flow。

所以,Emacs 是個萬能助手,你越使用它就越了解它,越瞭解它就越調教它,讓 Emacs 更適合你,更屬於你,也更讓你無法離開。Vim 也可以調教,但他始終無法成為像 Emacs 那樣面面俱到無所不能,最初你或許期待它成為全端的 IDE,最後卻因為失望而漸漸離開。離開後卻驀然發現,原來它已在你的身上留下印記,讓你在不同的應用中追尋者它的蹤跡。