我超愛 vim der。

vim 是什麼?

vim 是一個文字編輯器。 主要的功能就是拿來打字。 對的,就像附屬應用程式裡面的記事本一樣。 但是是終極的強化版。基本上記事本之於 vim, 就像是紙飛機之於飛機一樣。

好在哪?

效率王

我覺得 vim 最大的好處 (可能也是壞處) 就是 所有的動作都只能靠鍵盤來完成

沒錯,包括移動游標、打字、刪除、複製、貼上等等。 全部由鍵盤來完成的結果就是, 如果很熟練的話,那動作會非常快。 對於某些特定的人需要長時間專注的編輯文字,像是 developer, 這整件事情最大的價值在於你的思考不會被編輯器的動作中斷
例如說你突然想到這個地方應該要怎麼做,要寫哪些東西,這個時候如果你花30秒找到你要改的地方、複製、貼上、排版等等, 可能等你搞好這些之後你就忘了你本來要幹麻。於是你又花了另外的15秒重新想一次,這是常見又惱人的狀況之一。 所以如果說我們可以找到「想法」和「執行結果」中間的最短路徑,那工作效率會大大的提升。 (就好像電競選手會狂用快捷鍵是一樣的道理)

在 server 上面可以用

有些時候我們會要在 server/工作站 上面寫 code,
這時候陪伴我們的,只有冷冰冰的 terminal 和熱情的 vim。
如果平常你就跟 vim 很熟的話,那在這種時候你就會覺得像是在自己家一樣啦!

對於一個有經驗的 vim 使用者來說,他的眼睛到哪,游標就跟著到哪

障礙:

學習曲線:

大多數人對於 vim 望之卻步的主要原因之一是它的學習曲線確實蠻高的。光是要用鍵盤移動游標這件事情,聽起來就夠嚇人。
我覺得如果要把 vim 搞會,進而發揮它的威力,第一件事情就是先學會如何打字

學會如何打字的意思是,要可以不看鍵盤打出所有的英文字母、數字、符號、ctrl、tab、shift、alt。這件事情基本上就是沒有捷徑了,就是要練習。 速度不用到超快,只要可以打字的時候不要想,這樣應該就 ok 了。

學會如何打字之後,第二步就是強迫自己用 vim 寫 code
這步聽起來有點無聊,但我自己就是用這個方法。
一開始確實有點痛苦,想說我只是要找一個關鍵字或複製一段文字,為什麼搞得像是上上下下左左右右ABAB一樣,
但漸漸地,當你發現你別人用滾輪滑了老半天,或者是在選單列找某個功能遍尋不著,而你只花了0.5秒就搞定的時候,你就會發現果然痛苦會過去,美會留下。

設定:

vim 的預設設定很難用,幾乎到了 我幹麻不用記事本 這麼難用。
但是經過好好設定過後的 vim, 就可以飛天遁地了。
vim 的設定是透過一個文字的設定檔 vimrc 來完成的。
vimrc 本身要用 vim 提供的某種 script 來完成,這件事情對我來說蠻痛苦的。
因為這種 script 本身沒有特別好懂,而且它就只是 config 檔嘛,插麻搞得這麼複雜。
所幸在現代,就有人做了一些 vim 的套件管理工具, 像是 vundlepathogen 等等, 再配合 github,可以讓設定 vim 這件事情變得容易很多。 而這樣的套件管理工具,讓原本就存在的大量 vim 使用者可以貢獻、交流自己的設定/工具,進而達到世界大同(?)的狀態。

雖然說我不會寫 vim 的 script,但我時常花很多時間看各式各樣的 plugins, 然後看看有沒有平麼好用的。
就像你有一個工具包,即使你不會自己生產工具,但你會時不時去逛工具店看看有沒有什麼稱手的新玩意兒,可以讓你的效率更高,或者在 code review 的時候更帥。

vimrc 這個檔案就會為跟著你一輩子(?)的設定檔,以後當你兒子要寫 code 的時候你就可以跟他說,「來,這是老爸的累積了二十年的 vimrc,現在交給你了」這樣。
再配合現在很方便的 github / bitbucket, 你可以把同樣的設定檔同步到每一個工作的地方 (像是公司的電腦、家裡的電腦、 server 上面等等), so sweet!

我常用的 plugins

這是 我的 vimrc

和大家分享若干我的最愛 plugins:

command-t

command-t 是一個讓你可以快速找到檔案的 plugin,
例如說我有一個檔案的路徑是 app/controllers/users_controller.rb, 利用 command-t, 我只需要打部份的路徑,好比說 "acur" 之類的, 這時候 command-t 就會很聰明的幫你找到該檔案。
這件事情對於我這種常常只記得部份的檔案名稱的人相當好用。 和 command-t 類似的還有另一個叫 ctrl-p, 但我個人覺得 ctrl-p 常常找錯檔案。

easy-motion

easy-motion 是可以讓你把游標跳到螢幕上任何地方的 plugin, 是 眼睛到哪,游標就到哪的重要關鍵之一! 用法大致上就是你按下某個快捷鍵,然後螢幕上每一個單字前面就會像中毒一樣都出現一個不同的小英文字,然後你再按該單字前面的小英文字,就可以跳到那邊。 可以參考他的 github 網站,有 gif demo

snipmate

這個應該是從 textmate 偷過來的 feature,
它的主要功能就是可以讓你少寫好多 code,
好比說時常我們要寫一個 for loop:

for (var i = 0; i < theArray.length; i ++) {
  // do something here

}

在這個例子裡面,十之八九我們要改的東西其實只有 theArray// do something here 而已。
所以透過 snipmate 就可以讓我們只打 for 然後按下某個快捷鍵, 就寫出 for loop 的 template, 並且把游標停在 theArray 的地方, 在我們改好 theArray 之後, 再按下某個快捷鍵, snipmate 又再度幫我們把游標停在 do something here 的地方。

類似的例在還有 function, 或 html 等等。

我覺得這個 plugin 的威力在於, 要增加/修改 各式的 template 相當容易,所以你可以自己定出各式各樣屬於自己的懶人組合。

結論

提升效率是一件很棒的事情,而對於工程師來說,這件事情所帶來的效益通常會比其他行業的人來得更顯著。而找到一個稱手的文字編輯器,並且熟悉它,是提升效率裡面很重要的一步。 vim 毫無疑問的是最好的文字編輯器之一,也有很穩定且強大的社群,是一個報酬率很高的投資。

happy hacking!