插件使用 vim-plug 管理。很長一段時間,我都在用 Vundle,切換到 vim-plug 並不是徹底必要。javascript
" 插件定義開始 call plug#begin('~/.vim/plugged') " 在此添加插件... " 插件到此結束 call plug#end()
不得不認可,vim-plug 用起來確實比 Vundle 簡單。php
下面來看看有哪些插件。html
做爲一個編輯器,顏值比什麼都重要,Vim 也不例外。
Vim 自帶的配色方案(Color Scheme),我用得最多的就是 desert
和 ron
。
最近,發掘了下面幾個:java
Plug 'morhetz/gruvbox' Plug 'ayu-theme/ayu-vim' Plug 'drewtempelmeyer/palenight.vim' " 基於 Onedark,效果差很少 Plug 'joshdick/onedark.vim' " Atom Onedark 的復刻
目前用的是 gruvbox
,算是比較完善的一個配色,和狀態欄插件 airline
整合得也不錯。python
狀態欄是一個大有做爲的地方。airline
是大名鼎鼎的 powerline
的輕量版,我沒用過 powerline
,從介紹來看,顯示效果更好,也稍爲笨重,依賴於 Python。git
Plug 'vim-airline/vim-airline' " 主題,由於 gruvbox 對 airline 的支持不錯,暫時就不須要了。 " Plug 'vim-airline/vim-airline-themes'
目前使用 indentLine
插件,顧名思義,就是給縮進畫線,讓代碼塊更明顯。
對 Python 這種以縮進組織代碼塊的語言來講,猶如神助。github
Plug 'Yggdroot/indentLine' let g:indentLine_noConcealCursor = 1 let g:indentLine_color_term = 0 let g:indentLine_char = '|'
目前使用 tabular
。vim
Plug 'godlygeek/tabular'
假若有一段 JS:session
var video = { metadata: { title: "Aligning assignments" h264Src: "/media/alignment.mov", oggSrc: "/media/alignment.ogv" posterSrc: "/media/alignment.png" duration: 320, } }
選中要對齊的行,執行 :Tab/:
,結果以下:異步
var video = { metadata: { title : "Aligning assignments" h264Src : "/media/alignment.mov", oggSrc : "/media/alignment.ogv" posterSrc : "/media/alignment.png" duration : 320, } }
此外,junegunn/vim-easy-align
彷佛也是個不錯的選擇。暫時還何嘗試。
樹形結構的文件管理器,目前使用 nerdtree
。
操做並不侷限於瀏覽,刪除、重命名等操做也支持,雖然我不多使用。
Plug 'scrooloose/nerdtree' " F2 快速切換 nmap <F2> :NERDTreeToggle<CR>
Vim 自帶的 netrw
也不錯,命令爲 :Vex
,效果以下:
體驗跟 nerdtree
比仍是有很多差距的。
之前用 taglist,如今用 tagbar
。
它們都基於 ctags,目前比較好用的 ctags 是 universal-ctags,在 Linux 上很容易編譯安裝。
不要安裝 Linux 系統自帶的 ctags,通常爲 exuberant-ctags,最後更新於 2009 年,好久沒有維護了。
Universal-ctags 源自 exuberant-ctags,作了很多更新和改進。
Plug 'majutsushi/tagbar' nmap <F8> :TagbarToggle<CR>
JS 的 tagbar 擴展:hushicai/tagbar-javascript.vim
其餘還有 Markdown / CSS 等擴展,可能須要依賴外部程序,我本身用不到,就再也不贅述了。
Vim 優秀的註釋插件不止一個,目前在用 EnhancedCommentify
。
快捷鍵嘛,通常 <leader>x
就夠了。
Plug 'hrp/EnhancedCommentify' let g:EnhCommentifyRespectIndent = 'Yes' let g:EnhCommentifyPretty = 'Yes'
可是也有不爽的地方,好比下面這種多行註釋沒法對齊:
// if (!ec) { // HttpSessionPtr session{ // new HttpSession(std::move(socket), GetRequestHandler()) // }; // session->Start(); // }
因此就在剛剛,我試了一下 tcomment
,效果不錯:
// if (!ec) { // HttpSessionPtr session{ // new HttpSession(std::move(socket), GetRequestHandler()) // }; // session->Start(); // }
Plug 'tomtom/tcomment_vim'
然而 tcomment 的快捷鍵是硬傷,一時半會很難適應。
當括號嵌套時,很難辨識。彩虹括號就是爲了解決這個問題。
不一樣層次的括號顏色不同,以下圖:
" Parentheses enhancements. Plug 'kien/rainbow_parentheses.vim' let g:rbpt_colorpairs = [ \ ['brown', 'RoyalBlue3'], \ ['Darkblue', 'SeaGreen3'], \ ['darkgray', 'DarkOrchid3'], \ ['darkgreen', 'firebrick3'], \ ['darkcyan', 'RoyalBlue3'], \ ['darkred', 'SeaGreen3'], \ ['darkmagenta', 'DarkOrchid3'], \ ['brown', 'firebrick3'], \ ['gray', 'RoyalBlue3'], \ ['black', 'SeaGreen3'], \ ['darkmagenta', 'DarkOrchid3'], \ ['Darkblue', 'firebrick3'], \ ['darkgreen', 'RoyalBlue3'], \ ['darkcyan', 'SeaGreen3'], \ ['darkred', 'DarkOrchid3'], \ ['red', 'firebrick3'], \ ] let g:rbpt_max = 8 let g:rbpt_loadcmd_toggle = 0 au VimEnter * RainbowParenthesesToggle au Syntax * RainbowParenthesesLoadRound au Syntax * RainbowParenthesesLoadSquare au Syntax * RainbowParenthesesLoadBraces au Syntax * RainbowParenthesesLoadChevrons
然而這些彩虹括號插件,都免不了與 CMake 衝突——會使 CMake 語法高亮失效,只好放棄了。
不得不說,基於關鍵字和模式匹配的語法高亮已經落後於時代了。
Vim 的語法高亮,有這樣幾種方式:
分別舉幾個例子。
基於關鍵字和模式:
Plug 'justinmk/vim-syntax-extra' Plug 'octol/vim-cpp-enhanced-highlight'
基於 libclang:
Plug 'jeaye/color_coded'
基於 ctags:
Plug 'vim-scripts/TagHighlight' Plug 'xolox/vim-misc' Plug 'xolox/vim-easytags'
分別看一下效果。
vim-cpp-enhanced-highlight:
TagHighlight:
color_coded:
目前,我比較傾向於第一種,簡單高效,效果雖然不怎麼完美,可是能夠接受。
固然,vim-cpp-enhanced-highlight
只針對 C/C++,其餘語言就不行了。
Plug 'hdima/python-syntax' let python_highlight_all = 1
幾個簡單補全插件,不須要安裝外部程序。
輸入左括號時,自動補全右括號。
Plug 'Raimondi/delimitMate' " For Python docstring. au FileType python let b:delimitMate_nesting_quotes = ['"']
Plug 'docunext/closetag.vim' let g:closetag_html_style=1
首推 ALE (Async Lint Engine)。
Syntastic 也不錯,可是 Vim 8 以後,由於異步接口的引入,ALE 逐漸佔了上風。
Plug 'w0rp/ale'
ALE 的特色是異步調用,不影響主界面。
ALE 跟其餘插件好比 airline 整合得比較好。
ALE 依賴於大量的外部工具(cpplint, eslint, etc.),這些工具纔是幕後的功臣。
ALE 做用於 C++ 代碼的效果:
這裏列舉的插件,只是冰山一角。
諸如 YCM 這種級別的插件,其代碼補全的水平幾乎能夠與重量級 IDE 相匹敵了。
可是,編輯器畢竟只是編輯器,用 Vim 作它最擅長的事就能夠了,硬是要跟什麼什麼作比較,不必。
有時候我不由自問:究竟是插件幫我節省的時間多,仍是我尋找、配置插件的時間多?
也許我並不在意答案。
<全文完>