Github repo連結:
寫程式工具百百種,個人在工具選擇上較偏好用多種專做一件事的工具鏈而非一個整合一切的IDE。單一工具的功能愈單純愈輕量愈好,有點像是Unix的『do one thing and one thing well』原則。愈單純通常代表了高泛用性,讓我不管在哪個平台、開發哪種語言,都可以使用同一套工具;也因此,vim一直是我慣用的文字編輯器。我知道它有點像藍紋起司或納豆,喜歡的人看到就心臟蹦蹦跳,討厭的人聞到就吐得不能自己。
vim畢竟是文字編輯器,巡覽檔案並不是它的強項;它沒有『專案』的概念,原生不帶IDE必定會有的專案內檔案快查功能。我以前靠FuzzyFinder,但它真的很慢又不穩定,後來發現了Unite,簡直是發現新大陸。Unite + unite-git用起來就如上圖,我可以透過Unite的fuzzy search來快速巡覽git ls-files --cached
的輸出,加上這個指令的輸出本身僅會列出目前所在工作目錄下的檔案,即使是像calypso這樣大型的專案也可輕鬆巡覽。
具體來說,Unite在做什麼呢?
比起FuzzyFinder,Unite在設計上把fuzzy search這件事與資料源抽開,使它更加容易擴充。也就是說,Unite本身是一個可抽換資料源的fuzzy search框架,例如內建的vim docs、file list、recursive file list、buffer、tags、git等等。上面的使用例,其實就只是把git ls-files --cached
的輸出當作資料源,導入Unite本身的fuzzy search engine而已。以前Fuzzy Finder不能做這件事是因為架構缺陷導致難度很高,倒不是真的不能做。
根據官方repository上所寫,Unite已經沒有在持續開發,後續僅會以修正bug為主,作者已將心力放在另一個類似的plugin: Denite上,但我想Unite本身的穩定性是不太需要擔心太快不能用,起碼哪天它突然爆炸的話我一定第一個上來哭。
等等…已經有git了?
Unite確實原生有一個git ls-files的資料源實作,但我以前測試的時候因為不明原因非常慢,慢到我懷疑它到底有沒有在呼叫我系統內原生的git。因此我才改用了上面的unite-git plugin,效果好非常多。git ls-files --cached
本身就快又輕量,加上可以cd到不同的子目錄來去除大量不需考慮的檔案,我個人認為巡覽效率甚至比一些我用過的IDE如Xcode、VS、eclipse等都來得好非常多。
沒vimrc沒真相
這好像是寫vim相關文章的不成文規矩了本文相關設定如下:
Plugin 'Shougo/unite.vim' Plugin 'Shougo/vimproc.vim' Plugin 'yuku-t/unite-git' nnoremap <C-f> :Unite git_cached -auto-resize -start-insert<CR>
Plugin的部分請自由帶入不同的plugin manager,我個人使用Vundle才會這樣寫。有用vimproc.vim是因為Unite可以調用它來生成process,號稱會比較有效率,但我沒有實際測試比較過就是了;最後ctrl-f熱鍵即可調用unite-git整入的Unite git_cached。找到想要的檔案後可按enter在目前tab開啟,也可以按ctrl-t在新tab開啟,如果想開啟前一次的搜尋結果,可呼叫 :UniteResume 即可。
工作上常用vim嗎?使用git當VCS嗎?快來試試看吧!