vim插件基础介绍

辣鸡微信!

这是我给大学班里童鞋写的一篇入门级vim插件推送,其实就是简单翻译了一下文档(扔掉不少看不懂的东西
然后这个其实是原生版本,我本来就用markdown写的,由于辣鸡微信平台不支持,公众号上的其实是粗鄙的阉割版。
不当之处敬请指出。

1.Vundle——插件管理工具

github地址
Vundle是一个基于git的vim插件管理工具,对于绝大多数插件,只要安装vundle并在vimrc中正确填写插件名
字就能用vundle自动安装插件,保持了只要携带vimrc就能重现开发环境的优良传统。

安装与使用

参考github上面的文档

对于Linux&mac

首先执行
$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
然后在.vimrc的最上面添加:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
set nocompatible " be iMproved, required
filetype off " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
" The following are examples of different formats supported.
" Keep Plugin commands between vundle#begin/end.
" plugin on GitHub repo
Plugin 'tpope/vim-fugitive'
" plugin from http://vim-scripts.org/vim/scripts.html
Plugin 'L9'
" Git plugin not hosted on GitHub
Plugin 'git://git.wincent.com/command-t.git'
" git repos on your local machine (i.e. when working on your own plugin)
Plugin 'file:///home/gmarik/path/to/plugin'
" The sparkup vim script is in a subdirectory of this repo called vim.
" Pass the path to set the runtimepath properly.
Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
" Install L9 and avoid a Naming conflict if you've already installed a
" different version somewhere else.
Plugin 'ascenator/L9', {'name': 'newL9'}
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
" To ignore plugin indent changes, instead use:
"filetype plugin on
"
" Brief help
" :PluginList - lists configured plugins
" :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate
" :PluginSearch foo - searches for foo; append `!` to refresh local cache
" :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line

阅读注释可以知道注意事项。中间那些以Plugin开头的行是示例,可以删掉,想要安装插件就需要在这个位置添加对应的代码(一般格式都是Plugin xxxxxxxx)
之后想要安装插件只需要打开vim然后输入:PluginInstall就好了。

对于windows

首先还是建议在Linux/Mac环境下使用vim,windows下gvim的体验不太好,而且包括git在内的这一套常用软件在windows下使用都有些麻烦。
所以可以参考windows安装指南
简单来讲就是先安上git然后用不同的方式改一下_vimrc

2.YouCompleteMe——自动补全神器

github地址
YouCompleteMe GIF demo
这张图片可以展示YCM的强大功能,就是用多种方式自动补全你敲进去的代码再也不用担心长变量名了合理使用可以极大地提高开发效率。
在许多自动补全插件中,YCM可以说是表现最好的一个,同时也是我见过的最难安装的vim插件,因为它不仅需要用Vundle从github上clone下来,还需要自行编译。下面介绍YCM的安装方法(英文阅读能力强的同学可以自行看github上的文档)。

安装

Linux(以ubuntu为例)

首先保证vim版本号大于7.4.143,ubuntu版本号大于14.10。
然后使用Vundle安装YCM,方法就是在.vimrc对应位置加入Bundle 'Valloric/YouCompleteMe',并且执行:PluginInstall
接下来安装编译YCM必须的包CMake和python,命令:

1
2
sudo apt-get install build-essential cmake
sudo apt-get install python-dev python3-dev

之后进行编译,开发者已经写好了python脚本,只需要执行就好了。

1
2
cd ~/.vim/bundle/YouCompleteMe
./install.py --clang-completer

如果不需要对C系列语言(C,C++,Objective C,Objective C++)的补全支持,不需要–clang-completer参数。这样就算安装完成了,但还需要一些配置才能愉悦使用,在下一部分介绍。

Mac

需要最新版的MacVim和Xcode,如果不想使用GUI的MacVim好像需要一些操作,我没太看懂,参见文档的Mac OS X安装第三段。
然后用Homebrew安装Cmake,之后就和Linux安装完全一样了,Vundle安装后执行Install.py

Windows

需要先安装Python、CMake、7-Zip和Visual Studio社区版(这么复杂为啥不直接装个Linux一劳永逸)
之后的自己看文档吧233丢地址跑

可能遇到的问题

安装后发现出现错误 YouCompleteMe unavailable no module named frozendict或者YouCompleteMe unavailable no module named future可能是由于网络原因没有下全,进入~/.vim/bundle/YouCompleteMe执行git submodule update –init –recursive命令即可。
如果出现什么莫名奇妙的错误死活无法安装,就完全编译安装吧,
这个链接
UPD 17-8-2: let g:ycm_server_python_interpreter = ‘/usr/bin/python2’

使用

YCM的使用还需要一个叫做.ycm_extra_conf.py的自定义配置文件,需要将它放在开发目录并自己进行配置,可以更好地进行补全。
生成一份这样的文件可以自己手写,也可以使用生成器,地址
没有这份文件也是可以工作的,虽然会出一个错误提示,而且一般情况下我们只需要一份全局的配置文件,对每份代码都采用同样的方式就够了。
一份参考配置文件在这里
可以将它保存到本地某处并且在.vimrc中添加一行代码指定它为全局配置文件。比如我的是:
let g:ycm_global_ycm_extra_conf = '~/.vim/Data/YouCompleteMe/.ycm_extra_conf.py'地址可以自己改。
YCM的默认使用方式是tab键向前翻,shift+tab键向后翻,需要更多配置可以在vimrc中加入相应内容,像我的配置就是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
"Configure YCM
let g:ycm_global_ycm_extra_conf = '~/.vim/Data/YouCompleteMe/.ycm_extra_conf.py'
set completeopt=longest,menu "让Vim的补全菜单行为与一般IDE一致(参考VimTip1228)
autocmd InsertLeave * if pumvisible() == 0|pclose|endif "离开插入模式后自动关闭预览窗口
inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>" "回车即选中当前项
"上下左右键的行为 会显示其他信息
inoremap <expr> <Down> pumvisible() ? "\<C-n>" : "\<Down>"
inoremap <expr> <Up> pumvisible() ? "\<C-p>" : "\<Up>"
inoremap <expr> <PageDown> pumvisible() ? "\<PageDown>\<C-p>\<C-n>" : "\<PageDown>"
inoremap <expr> <PageUp> pumvisible() ? "\<PageUp>\<C-p>\<C-n>" : "\<PageUp>"
" 不显示开启vim时检查ycm_extra_conf文件的信息
let g:ycm_confirm_extra_conf=0
" 开启基于tag的补全,可以在这之后添加需要的标签路径
let g:ycm_collect_identifiers_from_tags_files= 1
"注释和字符串中的文字也会被收入补全
let g:ycm_collect_identifiers_from_comments_and_strings = 0
" 输入第 2 个字符开始补全
let g:ycm_min_num_of_chars_for_completion= 2
" 禁止缓存匹配项,每次都重新生成匹配项
let g:ycm_cache_omnifunc=0
" 开启语义补全
let g:ycm_seed_identifiers_with_syntax= 1
"在注释输入中也能补全
let g:ycm_complete_in_comments = 1
"在字符串输入中也能补全
let g:ycm_complete_in_strings = 1
" 设置在下面几种格式的文件上屏蔽ycm
let g:ycm_filetype_blacklist = {
\ 'tagbar' : 1,
\ 'nerdtree' : 1,
\}
"End of YCM

在vim使用中输入:YcmDiags 可以打开location-list查看YCM的警告和错误信息。

3.vim-airline 状态栏增强插件

这个插件可以给你的vim添加一个状态栏,方便了解光标位置等信息。
可以用Vundle安装,Plug 'vim-airline/vim-airline'
vimrc中的配置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
"Configure airline
"主题,自选
let g:airline_theme="molokai"
"这个是安装字体后 必须设置此项"
let g:airline_powerline_fonts = 1
"始终显示状态栏
set laststatus=2
"打开tabline功能,方便查看Buffer和切换,省去了minibufexpl插件
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#buffer_nr_show = 1
"设置切换Buffer快捷键"
nnoremap <C-tab> :bn<CR>
nnoremap <C-s-tab> :bp<CR>
" 关闭状态显示空白符号计数
let g:airline#extensions#whitespace#enabled = 0
let g:airline#extensions#whitespace#symbol = '!'
" 设置consolas字体"前面已经设置过
"set guifont=Consolas\ for\ Powerline\ FixedD:h11
if !exists('g:airline_symbols')
let g:airline_symbols = {}
endif
"End

然而容易遇到的问题是一些符号不能正确显示,需要安装打过powerline补丁的字体,可以安装这里的字体。指令如下:

1
2
3
git clone https://github.com/ryanoasis/nerd-fonts
cd fonts
./install.sh

然后就可以正常显示了,更多调整可以自己搜索相关资料。

结语

vim中好用的插件远不止这几个,著名的nerdtree、ctrlp等插件都是对提高开发效率很有帮助的,不过有了Vundle之后这些插件的安装方式大同小异,都很简单,而配置个人有个人的喜好,就不一一介绍了,有兴趣的同学可以自己搜索相关资料进行安装(亲测最靠谱的还是github上面的文档)。
所以我们为什么要采用安装插件的方式来增强vim而不是直接使用现代IDE呢,因为信仰

  • vim是一个轻量级编辑器而又能通过插件达到现代IDE同样的体验,比起VS等大型IDE,vim的响应速度和可迁移性无疑是优秀的。
  • vim可以享受更高程度的个性化,如上面所见,vim中各插件的配置都可以通过修改vimrc来高度定制,这是一些集成度很高的IDE万万做不到的(你看定制Emacs还得写lisp)
  • vim原生的操作方式效率极高,就像前面毛毛介绍的,vim的操作方式可以抛弃鼠标,是广受欢迎的高效写代码方式,导致很多现代IDE都有vim模式,然而还是vim原生的支持更好,通过插件添加自动补全等功能后,vim可以说没有什么弱点了(就是麻烦了点还有时候需要修bug)
恭喜你!<br><br>发现了一条咸鱼=w=