vim基本教程之vim插件
vim作为一个编辑器,有一个很NB的地方在于,它有一个对应的vimscript脚本语言,用于对vim的超高灵活度的配置。但是刚开始使用vim不久的,又要学习一个语言,未免太过了。然而,幸运的是,vim插件的存在使得我们不需要预先学习vimscript,就可以拥有一个可以灵活配置的vim编辑器。(注意:这里不是说学习vimscript无用,只是对于初学者而言,如果要配置一个vim,需要预先学习vimscript,未免付出的代价太大了。但是如果你已经使用vim很挺久了的,那么学习vimscript则是你进阶的一个方向。)
vim插件是用编程语言编写一个小程序,通过vimscript封装后,一个具有独立功能的模块,可以直接插装在vim中。只要我们配置一些选项,它就能为我们提高工作效率和舒适度做出贡献了。
下面是一些插件的介绍和使用
1. 插件管理
使用一个专门管理插件的插件vundle,可以让你日后对于插件的添加、更新、删除这些操作更加方便。
vundle是一个功能比较全面的管理插件的插件,安装流程如下
vundle 会接管~/.vim 下的所有原生目录,所以先清空该目录
-
通过以下命令安装vundle
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
-
接下来在.vimrc中添加如下内容:(.vimrc文件,如果是linux系统的话,存在于主目录中,即”~"目录。如果文件不存在,创建一个命名为.vimrc文件即可)
" vundle 环境设置 filetype off set rtp+=~/.vim/bundle/Vundle.vim " vundle 管理的插件列表必须位于 vundle#begin() 和 vundle#end() 之间 call vundle#begin() Plugin 'VundleVim/Vundle.vim' " 插件列表结束 call vundle#end() filetype plugin indent on
-
此后,需要安装插件,先找到其在 github.com 的地址(推荐一个找vim插件的网站:VimAwesome),再将配置信息其加入 .vimrc 中的call vundle#begin() 和 call vundle#end() 之间,最后进入 vim 执行以下命令
:PluginInstall
要卸载插件,先在 .vimrc 中注释或者删除对应插件配置信息(就是上一步添加的那些。如果看不懂不要紧,后面会有举例的),然后在 vim 中执行 :PluginClean 即可删除对应插件。
批量更新插件,只需执行 :PluginUpdate 。
是不是相当地方便。其实插件管理不只有vundle,还有vim-plug,大家有兴趣的可以去弄一下。
2. 自动编译,并输出到quickfix
虽然我们写完程序之后,可以打开一个新的终端窗口或者在vim中使用shell命令来编译,但是始终要离开当前页面,比较麻烦。
而asyncrun插件,它可以让你在 Vim 里面异步运行各种 Shell 指令并且把结果实时输出到 Quickfix。
看图:
下面以安装这个插件为例,说明插件安装具体流程
将Plugin 'skywind3000/asyncrun.vim放到.vimrc 中的call vundle#begin() 和 call vundle#end()之间
保存文件
-
执行以下命令
:PluginInstall
vundle开始安装asyncrun
-
配置asyncrun
将以下内容放入 .vimrc文件的最后面
" asyncrun let g:asyncrun_open = 15 "above zero to open quickfix window at given height after command starts let g:asyncrun_save = 1 "non-zero to save current(1) or all(2) modified buffer(s) before executing let g:asyncrun_timer=100 "how many messages should be inserted into quickfix every 100ms interval.
具体的配置大家自行在其github项目上或者VimAwesome上看吧,其实挺简单的。
3. 代码自动补全
代码自动补全分为两种,一种是类似于普通编辑器的智能补全,另一种是模板补全。
-
智能补全可以让我们不用每次都要敲入长长的函数名,非常有效率。这里推荐youcompleteme
-
我们如果是编写程序的话,经常要写for循环之类的这种有固定格式的结构。而模板补全则是可以生成这种固定结构,非常方便。这里推荐ultisnips。但是模板要自己定义,太麻烦了,我个人比较喜欢用vim-snippets提供的默认模板,有什么不顺眼的就去改一下。
4. 显示目录树
vim的内置插件netrw可以让我们像用其他的一些IDE一样,可以显示目录树。但是netrw无法删除非空目录,想要netrw可以删除非空目录也不是不可以,只是只能在vim7生效,我们现在用的基本是vim8了,弄起来有点麻烦。
其实可以用另一插件来实现目录浏览,大名鼎鼎的nerdtree插件。
5. 快速编辑结对符(或者说结对符自动补全)
当我们键入一个“{”时,如果可以自动补全“}”就非常好了,而delimitmate插件搞定它。
6. vim中英文输入法流畅转换
其实不能说流畅,还是会有点问题的,后面再说。
在我们用vim写中文的时候,如果切换到normal模式,那么,我们还要先切换输入法为英文,才可以正常键入命令。而通常,会忘记切换输入法,这个时候,体验相当不好。完了回到insert模式后,又要切换回中文输入法,相当相当麻烦。
而fcitx插件则可以实现当我们切换到normal模式时,如果当前输入法为中文,则自动切换到英文输入,而换回到insert模式后,又自动切换回中文输入法。这样就比较方便了。
弊端在于这个插件优化不是很好,切换时会卡一下。
7. 代码折叠
代码折叠可以让代码没有那么乱,可以用插件simpylfold实现。
8. 项目级查找
在我的上一篇vim教程(vim教程之基本使用)中,提到了,vim中难以在这个工程文件中查找内容,而这个插件ctrlsf.vim则可以补全这一遗憾。