學Vim的啟示
談Vim
如果你是一位程式設計師,那麼你多半聽過、或碰過Vim。
這裡替沒聽過Vim的朋友解釋一下。Vim是一個編輯器程式,就跟你Windows電腦裡的記事本、Notepad++一樣,你可以用他來編輯一些文字檔案。但Vim不是設計給一般使用者使用的,他只有簡明的編輯畫面,不能用滑鼠控制,就連移動游標都是靠鍵盤來完成。Vim在程式設計師的世界裡有著編輯器之神的美譽(請不要跟我拿神之編輯器來戰,這不是重點),因為程式設計師工作一整天,幾乎每個小時都黏在編輯 器上面,有一個順手的工具是很重要的。
但Vim有一個惡名昭彰(?)的學習曲線。對初學者來說不好上手,因為不能使用滑鼠,所以每件事情都要透過敲鍵盤下指令完成。存檔敲鍵盤、搜尋取代敲鍵盤、移動游標敲鍵盤、打字刪除敲鍵盤。Vim就像一匹野馬,他必須要被程式設計師馴服,基於使用習慣,建立自訂的快捷鍵後,才會變得好用,但這也代表著必須花費很長的一段時間。
從初次接觸Vim、學習並適應Vim、到現在堪用但不擅用Vim,我對於那些常常在使用Vim的高手會有一種莫名的憧憬,我想大多數的程式設計師或是外行人都是這樣吧,看到終端機的黑畫面先敬畏三分。周遭大神的電腦多半是白Mac配終端機的黑畫面(大神的Mac一定要是Air),因為那隱約代表著我知道我他媽的在幹嘛,用純文字來操作效率更好。
Learn Vim Like a Boss
這幾天,剛好工作告一段落,稍微有些空閒,我決定研究看看如何像大神般使用Vim。我想要體會那種敲敲幾個鍵,檔案就照著我的意思修改,那種效率大增、感覺自己像個大師的感覺。或許也是潛意識吧,我隱約覺得高手們多半善用Vim,因次想變強一定要學好Vim(很經典的邏輯推論錯誤XD)。
原本的目標是我希望我的Vim 能和IDE一樣方便,於是我上網搜尋後,找到一篇談論「像IDE一樣使用Vim」的文章,但我很快就發現這篇文章對我來說太深,他使用了各種套件,致力於讓Vim達成像IDE一樣的功能。但我覺得我應該要先把Vim的基本功能學好,讓Vim所思及所得,想到什麼手指就自動修改好,再來談讓Vim像IDE一樣工作。
於是我找到一本電子書,叫做 Practical Vim: Edit Text at the Speed of Thought,我花了幾天的時間,挑選幾個章節做練習。這是一本很適合Vim初學到進階的書,每個章節都可以單獨閱讀,你可以學習到很多基本但常用的功能,例如根據需求移動游標、管理多個檔案、搜尋取代、還有很多有用的command,我相信只要把這些學好,你使用Vim的效率會大幅增加。
但學了幾個章節後我又厭倦了,因為要學的東西實在是太多,常常讀沒幾章就會想睡覺。我明白這些都是基本功,但是令人傻眼的是「怎麼那麼多基本功啊啊啊啊~~」。
剛好在搜尋問題解答的途中,我發現了一篇很棒的教學,叫做Learn Vimscript the Hard Way,這是一本免費的電子書。要知道Vim所有的外掛都是透過Vim Script寫成的,想要擅長Vim,搞懂VimScript是必須的。作者在本書的開頭開宗明義:「請一定要照著本書的範例練習一次,並且完成所有的Exercise,我保證你練習完後一定會發現自己的進步。」
天啊~一定會發現自己的進步,太帥了~於是我就很乖的把前十五個章節都看完並練習一遍。但老實說,練習的過程蠻乏味的,雖然作者盡可能的讓練習題貼近日常使用所需(例如:建立一個可以讓你迅速編輯.vimrc的快捷鍵),但是總覺得這實在是太慢了。我有感覺到自己的進步,我能夠使用並建立簡單的快捷鍵,但總覺得還少了某些東西,距離目標「讓Vim和IDE一樣方邊」還好遠。
嘗試打造自己開發環境
於是我決定先暫停下來,我想先試著打造看看自己的開發環境。因為最近我很常寫JavaScript,我就先試著打造能夠讓我日常開發JavaScript方便的環境吧。我搜尋了幾個常用的套件,嘗試裝上去看看。但是依舊充滿挫折。
挫折1: 自動換行功能
- 我希望能夠讓我打
{
的時候 - 會自動補齊右括號,且游標停留到中間
{|}
- 且按下Enter時會自動換行
{
|
}
- 再度換行後,按下backspace時,會回到上一行的縮牌位置,而不是退到該行的起頭
{
|
}
//and Press <Enter> again
//good
{
|
}
//bad
{
|
}
1,2,3都做到了,但是4不知道要怎麼做,但是IntelliJ IDE會會幫我做到第四點,可惡討厭啊啊啊(信心--
挫折2: 自動補齊功能
IDE最潮的就是要有自動補齊,既然Vim自訂性這麼高,加上自動補齊也沒什麼難度吧(?)。於是我找了個叫做YouCompleteMe的套件,才發現原來自動補齊是個背後技術涵養超級高的功能,這個套件背後竟然有一個Server/Client的架構,他還有不同的complete Engine,還會自動智能挑選Engine(實在是太潮了啊~),還會幫每個關鍵字做ranking。
幸好安裝過程並不困難,但是裝完後很快就發現問題了。竟然沒有內建支援JavaScript啊啊啊啊。(信心--
沒關係,官網說你可去找另一個叫做tern的project,他是專門為了javascript所設計的語法分析引擎,可以和YouCompleteMe順利工作。於是我把tern安裝起來,發現怎麼沒有順利工作?仔細觀察文件後才發現,tern如果要順利運作,必須要在每個project的file上建立一個config檔.tern_project
,在這個config的內必須要敘述使用的library。tern才會提供適當的補齊功能。內心OS瞬間浮現:所以我每次開一個新專案~想要自動補齊都要再另外再寫一個設定檔?!為什麼要搞這麼麻煩啊啊啊啊啊啊。
後來我還是乖乖寫了.tern_project
設定檔,好不容易讓自動補齊work了,但立刻發現tern的自動補齊會額外在你的編輯視窗上頭再開一個顯示資訊的split window,這個小視窗實在煩人,所以我最後把tern和YouCompleteMe都刪掉了。(信心-=5