如何讓 Vim 美觀又實用(1)

我學習計算機不久就開始用了 vim,到如今也三四年了,且算是對 vim 有了必定的控制力。在這裏分享一下使用過程當中的一些「心路歷程」,說實話,要留意的小地方有不少,可是因爲不少不可抗(_懶_)因素,本系列並不保證還有後續 :)git

如下內容適用於對 vim 有必定使用經驗的用戶,相關的具體配置參見 space-vim。有些內容我雖然給出了連接,可是可能並無完整貼出代碼,須要你自行查找,理解並抽取整合對本身有用的地方。github

project

vim 自己並無 project 的概念,只有工做目錄 working directory, :echo getcwd() 能夠查看當前的工做目錄。vim-rooter 能夠給 vim 引入 project 的概念,它會自動將 vim 的工做目錄切換到項目根目錄。在 vim-rooter 中,所謂 project,是指符合某些「特徵」的目錄,好比有些目錄含有 Rakefile,.git 等,這些目錄就會被認爲是項目的根目錄。vim

有了項目根目錄之後,咱們就可以以項目爲單位進行各類查找搜索等等。好比,因爲 fzf 的一些命令,好比 Ag 默認是在當前目錄下進行,實際就變成了在項目根目錄下搜索。固然了,也能夠顯式參考 space-vim 的 fzf 配置 指定 fzf Ag 的搜索目錄:app

call fzf#vim#ag(a:query, extend({
      \ 'dir': spacevim#util#RootDirectory(),
      \ 'options': '--prompt="'.spacevim#util#RootDirectory().'> "'},
      \ g:fzf_layout))

spacevim#util#RootDirectory() 對 vim-rooter 進行了簡單封裝,若是存在 vim-rooter 會直接進行調用,不然會進行簡單探測是不是 git 倉庫。異步

fzf

fzf 是一個命令行的模糊查找工具,用過的人應該知道,單就一個 CTRL-R 查找歷史就值得強烈推薦,更沒必要說其餘各類可以提高生產力的地方。若是使用 fzf,那麼 fzf.vim 也是必不可少。工具

fzf.vim 提供的各類功能就不細談了,這裏談一下可能出現的槽點:有人以爲 fzf.vim 的模糊查找太模糊了,候選項太多,有時候因爲對模糊查找的依賴性,致使輸入比較隨性,反而比精確查找要輸入更多字符。學習

這裏提幾個建議:優化

  1. 指定項目目錄,縮小查找範圍,好比 :FZF ~/.vim/plugged。不要上來就 :FZF 默認在用戶目錄下查找,那天然是候選項很是多。這一點只要用 vim-rooter 就能夠實現,如今大都用的都是 git,通常項目都是可識別的。
  2. 指定查找內容。好比 Ag,好比不要直接 :Ag 打開 fzf 再輸入想要查找的內容,交互式地查詢雖然比較酷,可是通常沒有在調用時就指定查找字符串更加高效。好比一個比較實用的就是用 Ag 查找當前光標下的詞。
call fzf#vim#ag(expand('<cword>'), extend({
      \ 'dir': spacevim#util#RootDirectory(),
      \ 'options': '--prompt="'.spacevim#util#RootDirectory().'> "'},
\ g:fzf_layout))

fzf

  1. 升級電腦 :)。這一點我深有感觸,14 款 13 寸的 MBP 我用了好幾年,雖然內存 16 G,可是雙核四線程仍是有些捉襟見肘,使用 fzf 在用戶目錄下查找感受仍是要些時間的。可是換了 18 款 的 15 寸 MBP,六核十二線程就連用戶目錄查找都是快的飛起。

狀態欄

不少人的狀態欄一開始大都只是爲了看起來酷而已,我也不能免俗 :)。最先的 space-vim 狀態欄效果是仿 spacemacs ,裏面顯示了各類信息。spa

eleline

後來狀態欄部分被提取成了一個獨立的插件 eleline.vim。隨着時間的推移,我愈來愈以爲顯示的不少信息其實有點多餘,因而就有了下面的精簡模式。插件

精簡模式

安裝 eleline.vim 並在 .vimrc 中設置:

let g:eleline_slim = 1

就可使用精簡模式,只顯示 buffer number, window number, filename 還有一些插件的信息。

let g:eleline_slim = 1

若是想要在精簡模式查看多一些信息的話,能夠用 CTRL-G,見 :h CTRL-G。若是對默認的 CTRL-G 不滿意,也能夠參考 space-vim CTRL-G 進行加強.

nnoremap <silent> <C-G> :call spacevim#vim#file#CtrlG()<CR>

默認的 CTRL-G:

"/usr/local/etc/profile.d/z.sh" 243 lines --65%--

加強後:

"/usr/local/etc/profile.d/z.sh" 243 lines --65%-- Cursor 159:1 8.6K TOT:2 [sh]

異步獲取 git branch

eleline.vim 如今採用異步的方式獲取 git branch 信息,代碼參考了 chemzqm 的 statusline.vim。由於 chemzqm 在 V2EX 的一個帖子提到,經過系統調用,也就是直接依賴 vim-fugitive 獲取 git branch 可能會對啓動時間有幾十毫秒的影響。不過他可能以 neovim 爲主,並無支持 vim8,我在他的基礎上加入了 vim8 的支持 :)。

更多關於 vim 的啓動優化,有興趣能夠查看 chemzqm 的這篇文章:vim 啓動速度優化的一些經驗

今天就先講這麼多了,下一篇可能更多講講如何配置更美觀的一些小細節。由於我高中是學美術的,大學也在傳播學院呆過一年多,因此對審美有必定要求,對死板的界面實在看不下去 :(。

總之,happy vimming :)

相關文章
相關標籤/搜索