前言
我使用vim已經有七八年了。我覺得vim帶給我最大的好處就是一次學習終生使用,vim基本上可以用來流暢編寫任意語言的程式碼(除了java和iOS開發這種),省去了切換IDE的麻煩。另外很重要的一點就是程式設計師可能對黑白的命令列有一種信仰,能用鍵盤解決的絕不會動滑鼠。而要達到純命令列編碼的效果,這個世界上除了編輯器之神vim剩下的可能就是神之編輯器emacs了吧。所以我覺得程式設計師花一定的時間練習一下vim的使用是很划算的。
好了,說了這麼多,這篇文章其實並不是介紹vim的基本使用,而是簡單總結一下使用vim這麼多年後,現在依然停留在我的配置檔案中的我最常使用的vim外掛。話不多說,下面開始列舉:
正文
vim-plug (https://github.com/junegunn/vim-plug)首先介紹的就是用來管理vim外掛的外掛。有了它,所有外掛就都可以寫在配置檔案中,安裝、更新、刪除都只需要執行一行命令來操作,十分方便。類似的外掛其實有挺多,比如Vundle.vim、vim-pathogen等。他們的功能都大同小異,我最終選擇vim-plug是因為它支援並行下載。當外掛很多的時候,我覺得它的安裝速度是最快的。
nerdtree (https://github.com/scrooloose/nerdtree)這個外掛是用來檢視檔案目錄的結構,達到類似GUI編輯器中的檔案瀏覽器的功能。我覺得一款編輯器最重要的功能之一就是如何快速定位到所需的檔案。而使用檔案樹的形式雖然不是最快速的,但絕對是最直觀的方式。這個外掛主要在我們對一個專案的目錄結構還不是很熟悉的時候比較有用,等熟悉了之後更多的就會用到下面的這個外掛
ctrlp.vim (https://github.com/kien/ctrlp.vim)這個外掛也是比較有代表性的,叫做“Fuzzy file finder",意思就是檔案的模糊查詢。當我們需要開啟一個檔案的時候,只需要按ctrl+p快捷鍵(當然可以定製),然後輸入檔案路徑中的任意字元,ctrlp就會列出所有模糊匹配到的檔案。如果找到了所需檔案,直接回車即可開啟。通常如果檔案路徑重名的情況比較多,則需要輸入比較精確的名字,如果重名的情況少,則簡單輸入幾個字元即可找到所需檔案。這個應該是開啟檔案的最快方式之一了。
但是這裡有個問題需要注意下,就是這個外掛開啟一次之後就會快取當前專案的目錄樹。所以當你新增或刪除了檔案之後,需要清空它的快取才能在下一次查詢的時候更新查詢結果。清空快取的命令是:
ctrlp-py-matcher (https://github.com/FelikZ/ctrlp-py-matcher)這個外掛其實是上邊ctrlp外掛的一個補充,它主要是提升了檔案查詢的速度。
vim-colors-solarized (https://github.com/altercation/vim-colors-solarized)這個外掛主要是提供了vim的配色方案。Solarized配色方案應該是一個系列,iTerm2什麼的都有它的配色方案,我覺得總體來說還是比較舒服的。
vim-commentary (https://github.com/tpope/vim-commentary)這個外掛主要是幫助我們更快速的註釋程式碼。不管是在寫程式碼還是除錯過程中,我們經常需要註釋掉一些程式碼。這個外掛可以非常快速的幫我們註釋和取消註釋,不管是單行還是多行都可以很好的工作,而且各種檔案格式基本都是支援的,可以根據檔案型別來插入不同的註釋程式碼。用習慣了根本離不開。
vim-surround (https://github.com/tpope/vim-surround)我平時會用到比較多的di(delete in)或ci(change in)之類的vim命令,比如刪除括號內的內容就是ci(。但是vim內建可以識別的`surroundings`只包括括號之類的少數字符,比如當我們想刪除引號內的內容時,用原生vim是無法做到的。當我們安裝了vim-surround外掛後,就可以輕鬆的執行di"來刪除引號內的內容了。
vim-textobj-entire (https://github.com/kana/vim-textobj-entire)在vim中有一個text object的概念,比如一個單詞就算是一個text object。然後我們就可以用一些vim命令來操作一個text object。比如刪除一個單詞就是dw,替換一個單詞就是cw。而vim-textobj-entire這個外掛就是將整個檔案內容變為了一個`text object`。它允許我們執行比如dae三個字元來刪除整個檔案的內容。某些情況下用起來還是挺爽的。
vim-fugitive (https://github.com/tpope/vim-fugitive)這個外掛允許在vim中做一些git操作。我覺得最好用的兩個功能就是:Gblame和:Gbrowse。
:Gblame其實就是執行git blame命令,然後直接在vim中將git的輸出結果與原始碼一一對應起來。這樣當你讀團隊程式碼的時候發現了一個坑,然後想知道是誰寫的這個坑的時候,只需要:Gblame一下,結果立馬呈現。
:Gbrowse是當你想分享一段程式碼給別人的時候,可以直接選中你想分享的程式碼,可以是單行也可以是多行,然後執行:Gbrowse,它就會幫你在瀏覽器中開啟github的地址,然後直接定位到你所選的程式碼行數。被選中的程式碼會被高亮顯示。用這種方式分享程式碼可比截圖或複製貼上優雅多了。但是它只支援存放在github中的程式碼倉庫,如果你的程式碼放在gitlab或其他倉庫中,這個外掛是無法開啟的。
ale (https://github.com/dense-analysis/ale)這個外掛主要是提供Syntax Check(語法檢查)的。這方面之前比較流行的外掛是syntastic。但因為ale支援非同步的語法檢查,所以我很早就切到ale了。其實非同步檢查這個非常重要,因為如果沒有非同步,當語法檢查程式在跑的時候編輯器總是會卡一下,非常非常的不爽
總結
我曾經為了學習vim的基本操作閱讀過很多相關的電子書,以及vim本身的文件,越學越覺得這個東西簡直用一輩子都學不完。在這裡先對創造vim的前輩們表示深深的敬意~
上面主要列舉了一些通用的外掛,還有其他一些是語言相關的,主要提供每種語言的語法高亮、語法檢查等功能。其實寫這篇文章的過程中,我又把自己的.vimrc檔案捋了一遍,發現真正每天都在用的外掛已經非常少了。記得剛開始學習vim的時候花了很多的時間折騰各種配置和外掛,裝了很多,但大部分後來都被卸掉了。因為vim本身的功能真的已經非常強大,很多外掛其實實屬多餘~用好vim的核心功能才是根本。我上面列舉的這些基本都是對核心功能的補充,而不是像一些外掛做的,試圖將vim打造成一個類似於GUI IDE的"強大"編輯器,那不是vim所擅長的。