Vim 插件管理

来源:互联网 发布:金庸群侠传网络单机版 编辑:程序博客网 时间:2024/04/29 15:21

从git上看到的一篇文档 https://github.com/MerlinFeng/use_vim_as_ide
正好在研究VIM 所以分享下

.vim/ 目录是存放所有插件的地方。vim 有一套自己的脚本语言 vimscript,通过这种脚本语言可以实现与 vim 交互,达到功能扩展的目的。一组 vimscript 就是一个 vim 插件,vim 的很多功能都由各式插件实现。此外,vim 还支持 perl、python、lua、ruby 等主流脚本语言编写的插件,前提是 vim 源码编译时增加 —enable-perlinterp、–enable-pythoninterp、–enable-luainterp、–enable-rubyinterp 等选项。vim.org 和 github.com 有丰富的插件资源,任何你想得到的功能,如果 vim 无法直接支持,那一般都有对应的插件为你服务,有需求时可以去逛逛。

vim 插件目前分为 .vim 和 .vba 两类,前者是传统格式的插件,实际上就是一个文本文件,通常 someplugin.vim(插件脚本)与 someplugin.txt(插件帮助文件)并存在一个打包文件中,解包后将 someplugin.vim 拷贝到 ~/.vim/plugin/ 目录,someplugin.txt 拷贝到 ~/.vim/doc/ 目录即可完成安装,重启 vim 后刚安装的插件就已经生效,但帮助文件需执行 :helptags ~/.vim/doc/ 才能生效,可通过 :h someplugin 查看插件帮助信息。传统格式插件需要解包和两次拷贝才能完成安装,相对较繁琐,所以后来又出现了 *.vba 格式插件,安装便捷,只需在 shell 中依次执行如下命令即可:

vim someplugin.vba
:so %
:q
不论是直接拷贝插件到目录,还是通过 *.vba 安装,都不便于插件卸载、升级,后来又出现了管理插件的插件 vundle。

后面就正式开始了喽,文中前后内容顺序敏感,请依次查阅。

1 源码安装编辑器 vim

发行套件的软件源中预编译的 vim 要么不是最新版本,要么功能有阉割,有必要升级成全功能的最新版,当然,源码安装必须滴:

git clone git@github.com:vim/vim.git
cd vim/
./configure –with-features=huge –enable-pythoninterp –enable-rubyinterp –enable-luainterp –enable-perlinterp –with-python-config-dir=/usr/lib/python2.7/config/ –enable-gui=gtk2 –enable-cscope –prefix=/usr
make
make install
其中,–enable-pythoninterp、–enable-rubyinterp、–enable-perlinterp、–enable-luainterp 等分别表示支持 ruby、python、perl、lua 编写的插件,–enable-gui=gtk2 表示生成采用 GNOME2 风格的 gvim,–enable-cscope 支持 cscope,–with-python-config-dir=/usr/lib/python2.7/config/ 指定 python 路径(先自行安装 python 的头文件 python-devel),这几个特性非常重要,影响后面各类插件的使用。注意,你得预先安装相关依赖库的头文件,python-devel、python3-devel、ruby-devel、lua-devel、libX11-devel、gtk-devel、gtk2-devel、gtk3-devel、ncurses-devel,如果缺失,源码构建过程虽不会报错,但最终生成的 vim 很可能缺失某些功能。构建完成后在 vim 中执行

:echo has(‘python’)
若输出 1 则表示构建出的 vim 已支持 python,反之,0 则不支持。

2 插件管理

既然本文主旨在于讲解如何通过插件将 vim 打造成中意的 C/C++ IDE,那么高效管理插件是首要解决的问题。

vim 自身希望通过在 .vim/ 目录中预定义子目录管理所有插件(比如,子目录 doc/ 存放插件帮助文档、plugin/ 存放通用插件脚本),vim 的各插件打包文档中通常也包含上述两个(甚至更多)子目录,用户将插件打包文档中的对应子目录拷贝至 .vim/ 目录即可完成插件的安装。一般情况下这种方式没问题,但我等重度插件用户,.vim/ 将变得混乱不堪,至少存在如下几个问题:

插件名字冲突。所有插件的帮助文档都在 doc/ 子目录、插件脚本都在 plugin/ 子目录,同个名字空间下必然引发名字冲突;
插件卸载易误。你需要先知道 doc/ 和 plugin/ 子目录下哪些文件是属于该插件的,再逐一删除,容易多删/漏删。
我希望每个插件在 .vim/ 下都有各自独立子目录,这样需要升级、卸载插件时,直接找到对应插件目录变更即可;另外,我希望所有插件清单能在某个配置文件中集中罗列,通过某种机制实现批量自动安装/更新/升级所有插件。vundle(https://github.com/VundleVim/Vundle.vim )为此而生,它让管理插件变得更清晰、智能。

vundle 会接管 .vim/ 下的所有原生目录,所以先清空该目录,再通过如下命令安装 vundle:

git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
接下来在 .vimrc 增加相关配置信息:

” vundle 环境设置
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
” vundle 管理的插件列表必须位于 vundle#begin() 和 vundle#end() 之间
call vundle#begin()
Plugin ‘VundleVim/Vundle.vim’
Plugin ‘altercation/vim-colors-solarized’
Plugin ‘tomasr/molokai’
Plugin ‘vim-scripts/phd’
Plugin ‘Lokaltog/vim-powerline’
Plugin ‘octol/vim-cpp-enhanced-highlight’
Plugin ‘nathanaelkane/vim-indent-guides’
Plugin ‘derekwyatt/vim-fswitch’
Plugin ‘kshenoy/vim-signature’
Plugin ‘vim-scripts/BOOKMARKS—Mark-and-Highlight-Full-Lines’
Plugin ‘majutsushi/tagbar’
Plugin ‘vim-scripts/indexer.tar.gz’
Plugin ‘vim-scripts/DfrankUtil’
Plugin ‘vim-scripts/vimprj’
Plugin ‘dyng/ctrlsf.vim’
Plugin ‘terryma/vim-multiple-cursors’
Plugin ‘scrooloose/nerdcommenter’
Plugin ‘vim-scripts/DrawIt’
Plugin ‘SirVer/ultisnips’
Plugin ‘Valloric/YouCompleteMe’
Plugin ‘derekwyatt/vim-protodef’
Plugin ‘scrooloose/nerdtree’
Plugin ‘fholgado/minibufexpl.vim’
Plugin ‘gcmt/wildfire.vim’
Plugin ‘sjl/gundo.vim’
Plugin ‘Lokaltog/vim-easymotion’
Plugin ‘suan/vim-instant-markdown’
Plugin ‘lilydjwg/fcitx.vim’
” 插件列表结束
call vundle#end()
filetype plugin indent on
其中,每项

Plugin ‘dyng/ctrlsf.vim’
对应一个插件(这与 go 语言管理不同代码库的机制类似),后续若有新增插件,只需追加至该列表中即可。vundle 支持源码托管在 https://github.com/ 的插件,同时 vim 官网 http://www.vim.org/ 上的所有插件均在 https://github.com/vim-scripts/ 有镜像,所以,基本上主流插件都可以纳入 vundle 管理。具体而言,仍以 ctrlsf.vim 为例,它在 .vimrc 中配置信息为 dyng/ctrlsf.vim,vundle 很容易构造出其真实下载地址 https://github.com/dyng/ctrlsf.vim.git ,然后借助 git 工具进行下载及安装。

此后,需要安装插件,先找到其在 github.com 的地址,再将配置信息其加入 .vimrc 中的call vundle#begin() 和 call vundle#end() 之间,最后进入 vim 执行

:PluginInstall
便可通知 vundle 自动安装该插件及其帮助文档。比如,我在 .vimrc 中添加了 4 个插件:

Plugin ‘VundleVim/Vundle.vim’
Plugin ‘altercation/vim-colors-solarized’
Plugin ‘Lokaltog/vim-powerline’
Plugin ‘octol/vim-cpp-enhanced-highlight’
当前,.vim/ 为空,当我在 vim 中执行 :PluginInstall 时,整个自动安装过程便开始了:

(vundle 批量安装插件)
要卸载插件,先在 .vimrc 中注释或者删除对应插件配置信息,然后在 vim 中执行

:PluginClean
即可删除对应插件。插件更新频率较高,差不多每隔一个月你应该看看哪些插件有推出新版本,批量更新,只需执行

:PluginUpdate
即可。

你得注意插件的下载源。同名插件在 github.com 上可能有多个,比如,indexer 插件,至少就有 https://github.com/vim-scripts/indexer.tar.gz 、https://github.com/everzet/vim-indexer 、https://github.com/shemerey/vim-indexer 等三个,到底应该选哪个呢?以我的经验来看,对于钟意的插件,我会先找其作者的个人网站,上面通常会罗列出托管在 github.com 的具体地址;若没有,我会找该插件在 vim.org 的页面,上面也会有 github.com 托管地址;若还是没有,再以 github 和插件名作为关键字搜索,点赞数多的,通常是你想找的。为节约你找插件地址的时间,本文中出现的每个插件我都会附上其地址。非特殊情况,后文介绍到的插件不再累述如何安装。

通过 vundle 管理插件后,切勿通过发行套件自带的软件管理工具安装任何插件,不然 .vim/ 又要混乱了

1 0