摘要:如何優雅的使用二插件介紹插件使用管理。文件管理器樹形結構的文件管理器,目前使用。不同層次的括號顏色不一樣,如下圖另見然而這些彩虹括號插件,都免不了與沖突會使語法高亮失效,只好放棄了。
如何優雅的使用 Vim(二):插件介紹
插件使用 vim-plug 管理。很長一段時間,我都在用 Vundle,切換到 vim-plug 并非完全必要。
" 插件定義開始 call plug#begin("~/.vim/plugged") " 在此添加插件... " 插件到此結束 call plug#end()
不得不承認,vim-plug 用起來確實比 Vundle 簡單。
下面來看看有哪些插件。
配色方案作為一個編輯器,顏值比什么都重要,Vim 也不例外。
Vim 自帶的配色方案(Color Scheme),我用得最多的就是 desert 和 ron。
最近,發掘了下面幾個:
Plug "morhetz/gruvbox" Plug "ayu-theme/ayu-vim" Plug "drewtempelmeyer/palenight.vim" " 基于 Onedark,效果差不多 Plug "joshdick/onedark.vim" " Atom Onedark 的復刻
目前用的是 gruvbox,算是比較完善的一個配色,和狀態欄插件 airline 整合得也不錯。
狀態欄狀態欄是一個大有作為的地方。
airline 是大名鼎鼎的 powerline 的輕量版,我沒用過 powerline,從介紹來看,顯示效果更好,也稍為笨重,依賴于 Python。
Plug "vim-airline/vim-airline" " 主題,因為 gruvbox 對 airline 的支持不錯,暫時就不需要了。 " Plug "vim-airline/vim-airline-themes"縮進標線
目前使用 indentLine 插件,顧名思義,就是給縮進畫線,讓代碼塊更明顯。
對 Python 這種以縮進組織代碼塊的語言來說,猶如神助。
Plug "Yggdroot/indentLine" let g:indentLine_noConcealCursor = 1 let g:indentLine_color_term = 0 let g:indentLine_char = "|"代碼對齊
目前使用 tabular。
Plug "godlygeek/tabular"
假如有一段 JS:
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:NERDTreeToggle
Vim 自帶的 netrw 也不錯,命令為 :Vex,效果如下:
體驗跟 nerdtree 比還是有不少差距的。
代碼提綱以前用 taglist,現在用 tagbar。
它們都基于 ctags,目前比較好用的 ctags 是 universal-ctags,在 Linux 上很容易編譯安裝。
不要安裝 Linux 系統自帶的 ctags,一般為 exuberant-ctags,最后更新于 2009 年,很久沒有維護了。
Universal-ctags 源自 exuberant-ctags,做了不少更新和改進。
Plug "majutsushi/tagbar" nmap:TagbarToggle
JS 的 tagbar 擴展:hushicai/tagbar-javascript.vim
其他還有 Markdown / CSS 等擴展,可能需要依賴外部程序,我自己用不到,就不再贅述了。
Vim 優秀的注釋插件不止一個,目前在用 EnhancedCommentify。
快捷鍵嘛,一般
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
另見:luochen1990/rainbow
然而這些彩虹括號插件,都免不了與 CMake 沖突——會使 CMake 語法高亮失效,只好放棄了。
語法高亮不得不說,基于關鍵字和模式匹配的語法高亮已經落后于時代了。
Vim 的語法高亮,有這樣幾種方式:
基于關鍵字和模式匹配,效率高,但是對語義了解甚少。
基于 libclang 這種現代編譯器提供的豐富語義,效率差,往往難以讓人接受。
基于 ctags 索引出的符號,效率介于以上兩者之間,配置較麻煩。
分別舉幾個例子。
基于關鍵字和模式:
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 = ["""]補全 HTML/XML 標簽
Plug "docunext/closetag.vim" let g:closetag_html_style=1代碼檢測(Lint)
首推 ALE (Async Lint Engine)。
Syntastic 也不錯,但是 Vim 8 之后,因為異步接口的引入,ALE 逐漸占了上風。
Plug "w0rp/ale"
ALE 的特點是異步調用,不影響主界面。
ALE 跟其他插件比如 airline 整合得比較好。
ALE 依賴于大量的外部工具(cpplint, eslint, etc.),這些工具才是幕后的功臣。
ALE 作用于 C++ 代碼的效果:
這里列舉的插件,只是冰山一角。
諸如 YCM 這種級別的插件,其代碼補全的水平幾乎可以與重量級 IDE 相匹敵了。
但是,編輯器畢竟只是編輯器,用 Vim 做它最擅長的事就可以了,硬是要跟什么什么做比較,沒必要。
有時候我不禁自問:到底是插件幫我節省的時間多,還是我尋找、配置插件的時間多?
也許我并不在乎答案。
<全文完>
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/25002.html
摘要:如何優雅的使用一基本配置十年,青春不再轉眼間,已用了十年。對程序員來說,用制表符還是用空格,足以引發一場戰爭。 如何優雅的使用 Vim(一):基本配置 Vim 十年,青春不再 轉眼間,Vim 已用了十年。從一開始的抵觸、不解,到隨之而來的習慣、喜歡,再到近幾年編輯器層出不窮的盛況下對 Sublime Text 等短暫的嘗試,以及最后即現在的回歸,這是一個復雜的過程。目前,我對 Vim ...
摘要:歡迎來我的博客閱讀打造高效個性一之打造高效個性二之如果說塑造了一個婀娜多姿顏值高的貌美姑娘,那么就是給她塑造了一個柔情俠骨百事通的女漢子之心。一款增加了一些在上實用的命令插件。 歡迎來我的博客閱讀:「打造高效個性Terminal(一)之 iTerm」「打造高效個性Terminal(二)之 zsh」 oh-my-zsh 如果說iTerm塑造了一個婀娜多姿顏值高的貌美姑娘,那么zsh就是給...
摘要:指令這條命令是指明最后容器需要暴露哪些端口號,這樣其他系統才能使用這個端口。但是靈活性不高,后面我在編排的時候會教大家用編排來統一開發環境。更多還有更多指令大家看下官方文檔,我自己覺得上面的指令算是使用比較多的了。 前言 上一篇文章呢,我們簡單的了解了Docker的基本命令,這篇文章呢,我們來了解下Dockerfile這個文件。 一個神奇的文件:Dockerfile 我不知道有多少同學...
閱讀 1462·2021-09-02 13:57
閱讀 1877·2019-08-30 15:55
閱讀 2416·2019-08-30 15:54
閱讀 2254·2019-08-30 15:44
閱讀 2740·2019-08-30 13:18
閱讀 487·2019-08-30 13:02
閱讀 651·2019-08-29 18:46
閱讀 1670·2019-08-29 11:25