当前位置: 首页 > Linux

如何优雅地使用Vim(二):插件介绍

时间:2023-04-07 01:34:41 Linux

如何优雅地使用Vim(二):插件介绍使用vim-plug管理插件。我已经使用Vundle很长时间了,切换到vim-plug并不是完全必要的。"Theplug-indefinitionbeginscallplug#begin('~/.vim/plugged')"Addtheplug-inhere..."Theplug-inendsherecallplug#end()不得不承认vim-plug确实比Vundle好用,我们来看看插件吧。作为一个编辑器,配色方案比什么都重要,Vim也不例外。Vim自带的配色方案(ColorScheme),我用的最多的是desert和ron,最近发现如下:Plug'morhetz/gruvbox'Plug'ayu-theme/ayu-vim'Plug'drewtempelmeyer/palenight.vim'"基于Onedark,效果类似Plug'joshdick/onedark.vim'"AtomOnedark的复杂我目前使用的是gruvbox,这是一个比较完整的配色方案,和状态栏插件airline集成的很好。状态栏是一个可以做很多事情的地方。airline是大名鼎鼎的powerline的轻量版,我没用过powerline,从介绍上看,显示效果比较好,但是也有点笨重,依赖Python。Plug'vim-airline/vim-airline'”主题,因为gruvbox对airline的支持很好,所以暂时不用。”Plug'vim-airline/vim-airline-themes'目前使用的是indentLine插件缩进。顾名思义,就是画线进行缩进,让代码块更加明显。对于Python,一种通过缩进组织代码块的语言来说,就像天赐之物。Plug'Yggdroot/indentLine'letg:indentLine_noConcealCursor=1letg:indentLine_color_term=0letg:indentLine_char='|'代码对齐目前使用表格。Plug'godlygeek/tabular'如果有一段JS:varvideo={metadata:{title:"Aligningassignments"h264Src:"/media/alignment.mov",oggSrc:"/media/alignment.ogv"posterSrc:"/media/alignment.png"duration:320,}}选中要对齐的行,执行:Tab/:,结果如下:varvideo={metadata:{title:"Aligningassignments"h264Src:"/media/alignment.mov",oggSrc:"/media/alignment.ogv"posterSrc:"/media/alignment.png"duration:320,}}此外,junegunn/vim-easy-align似乎是一个不错的选择。还没试过呢。文件管理器树形结构的文件管理器,目前使用的是nerdtree。操作不限于浏览,也支持删除、重命名等操作,虽然我很少用到。Plug'scrooloose/nerdtree'"F2快速切换nmap:NERDTreeToggleVim自带的netrw也不错,命令为:Vex,效果如下:还是有很多区别的经验和nerdtree,代码大纲以前用taglist,现在用tagbar,都是基于ctags的,目前比较好用的ctags是universal-ctags,在linux上编译安装方便Linux系统自带的,通常是exuberant-ctags,最后一次更新是2009年,很久没有维护了,universal-ctags是exuberant-ctags派生出来的,做了很多更新和改进。Plug'majutsushi/tagbar'nmap:TagbarToggleJStagbarextension:hushicai/tagbar-javascript.vim等Markdown/CSS等扩展,可能需要依赖外部程序。如果我自己不会使用它,我不会更多。评论Vim的优秀评论插件不止一款,目前使用的是EnhancedCommentify。快捷键,一般x即可。plug'hrp/EnhancedCommentify'letg:EnhCommentifyRespectIndent='Yes'letg:EnhCommentifyPretty='Yes'但是也有一些不舒服的地方,比如下面的多行注释无法对齐://if(!ec){//HttpSessionPtr会话{//newHttpSession(std::move(socket),GetRequestHandler())//};//会话->开始();//}所以刚才,我尝试了tcomment,它成功了://if(!ec){//HttpSessionPtrsession{//newHttpSession(std::move(socket),GetRequestHandler())//};//会话->开始();//}Plug'tomtom/tcomment_vim'但是tcomment的快捷键有缺陷,一时半会很难适应。当括号嵌套时,彩虹括号很难阅读。彩虹括号就是为了解决这个问题。不同级别的括号有不同的颜色,如下图所示:"'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'],\]letg:rbpt_max=8letg:rbpt_loadcmd_toggle=0auVimEnter*RainbowParenthesesToggleauSyntax*RainbowParenthesesLoadRoundauSyntax*RainbowParenthesesLoadSquareauSyntax*RainbowParenthesesLoadBracesauSyntax*RainbowParenthesesLoadChevrons另见:luochen1990/rainbow然而这些彩虹括号插件,都不用了与CMake冲突-会使CMake语法高亮失效,只好作罢。语法高亮不得不说,基于关键字和模式匹配的语法高亮已经落伍了。Vim的语法高亮有几种方法:基于关键字和模式匹配,效率高,但对语义的理解不多。基于libclang等现代编译器提供的丰富语义,效率很差,往往无法接受。基于ctags索引的符号,效率介于上述两者之间,配置比较麻烦。举几个例子。基于关键字和模式:Plug'justinmk/vim-syntax-extra'Plug'octol/vim-cpp-enhanced-highlight'基于libclang:Plug'jeye/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++的,其他语言是行不通的。Python高亮增强Plug'hdima/python-syntax'letpython_highlight_all=1简单补全几个简单的补全插件,无需安装外部程序。完成括号输入左括号时,右括号会自动完成。Plug'Raimondi/delimitMate'"ForPythondocstring.auFileTypepythonletb:delimitMate_nesting_quotes=['"']CompleteHTML/XMLtagsPlug'docunext/closetag.vim'letg:closetag_html_style=1代码检测(Lint)第一推ALE(异步Lint引擎)。Syntastic也不错,但是在Vim8之后,因为异步接口的引入,ALE逐渐占了上风。plug'w0rp/ale'ALE的特点是异步调用,不影响主界面。ALE与航空公司等其他插件更好地集成。ALE依赖于大量的外部工具(cpplint、eslint等)来完成幕后工作。ALE对C++代码的影响:结论这里列出的插件只是冰山一角。YCM等插件的代码补全水平几乎可以媲美重量级IDE。不过,编辑器终究只是编辑器,你可以用Vim做它最擅长的事情。没有必要将它与某物进行比较。有时我会忍不住问自己:是插件为我节省了更多时间,还是我花更多时间寻找和配置插件?也许我不在乎答案。<全文>