vim作为Linux系统下的开发神器,历史悠久. 在今天,vim还能不能继续发扬光大,这个不是这篇文章讨论的话题。 本文主要是记录在Linux下围绕vim的开发环境的配置,以便自己以后查询,也方便需要的朋友借鉴。
vim的插件是vim生态系统的重要组成部分, 它的重要性就不说了。 一直以来vim都没有能够形成官方的统一的插件管理机制。取而代之的是, 用户首先将插件下载解压到 ~/.vim 目录下,然后再在~/.vimrc文件中配置和启用。 这一做法随着Pathogen的引入有了一定的改善。 Pathogen提倡标准的插件目录结构, 安装流程来简化新插件的安装。Pathogen是vim下的第一个插件管理系统, 今天我们介绍的主角叫Vundle, 它是在Pathogen的基础上改进而来的插件管理系统。
Vundle是Vim bundle的缩写, Vundle可以帮助你:
1. 在.vimrc中配置及管理插件
2. 流水线式安装插件
3. 自动升级插件
4. 在插件仓库中搜索插件
5. 卸载不用的插件
6. 以上命令除了通过命令行完成外,Vundle也提供交互模式来完成相关动作。
一句话概括,就是vim模式下的apt系统。
>>git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
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
set rtp+=~/.vim/bundle/Vundle.vim
设置了rtp
变量,是vim下插件的运行时路径(Runtime Path),有点类似于$PATH
环境变量,这里首先将Vundle自身添加进运行时路径,这样vim启动的时候就能够运行Vundle的命令。
call vundle#begin()
和 call vundle#end()
这两个调用之间列出所有需要Vundle管理的插件。 Plugin 'VundleVim/Vundle.vim'
把Vundle自身列入其中,因为Vundle本身也是vim插件,也需要升级维护。 下面注释掉的部分是一些vim插件,每一个插件是一行, 由Plugin
命令起始, 参数是URI
,以及少量可选参数, 以键值对的形式出现:
>> Plugin 'URI' [{'key' : 'value'}]
这里的'URI'
是插件所在的路径, 可以是online 仓库的相对地址,也可以是本地地址。对于online仓库, 目前主要是两个:
1 当Plugin
命令中的 URI
是以 user/repo
的形式出现的时候, 表示使用Github仓库:
Plugin 'VundleVim/Vundle.vim' => https://github.com/VundleVim/Vundle.vim
2 如果出现的URI
是一个不包含"/"
的单词,表示是一个vim-scripts插件。注意这里的vim-scripts仓库实际上也是映射到Github路径:
Plugin 'ctrlp.vim' => https://github.com/vim-scripts/ctrlp.vim
3 还有一种形式的online仓库是一个git 地址,此时Vundle只会原封不动的使用这个地址来clone插件:
Plugin 'git://git.wincent.com/command-t.git'
4 最后你还可以使用本地插件, 使用绝对路径指向插件所在的路径:
Plugin 'file:///path/from/root/to/plugin'
解释完URI,再来看看可选的键值对选项是什么?
Plugin 'git_URI', {'trp' : "some/subdir/'}
Plugin 'git_URI', {'name': 'newPluginName'}
Plugin 'mylocalplugin', {'pinned': 1}
:PluginInstall
安装.vimrc中指定的所有插件, 并自动启用。
:PluginInstall unite.vim
安装指定的插件, 类似于apt-get install,在仓库中搜索插件。支持Tab键自动补齐。通过这种方式安装的插件并不是永久性的,需要在~/.vimrc中指定,才能够永久安装并自动被Vundle管理。
:PluginInstall unite.vim tpope/vim-surround tpope/vim-fugitive
安装多个插件,中间使用空格分隔。
:PluginUpdate
安装或者更新.vimrc中指定的所有插件。
:PluginUpdate vim-surround vim-fugitive
指定更新插件。
:PluginSearch foo
在Vim-scripts中搜索插件并显示结果。 要求系统安装了curl
命令。
:PluginSearch! foo
先更新插件列表再搜索
:PluginList
显示安装插件列表
:PluginClean
删除所有在插件安装路径下但并没有在.vimrc下使用的插件,删除前需要用户确认。
:PluginClean!
删除所有在插件安装路径下但并没有在.vimrc下使用的插件, 无确认。
所有罗列Vundle插件的命令在执行之后都会在分隔页面显示一个列表,这时Vundle进入交互模式.比如,使用PluginSearch命令搜索cscope:
>>:PluginSearch! cscope
"Keymap: i - Install plugin; c - Cleanup; s - Search; R - Reload list "Search results for: cscope
Plugin 'cscope.vim'
Plugin 'cscope_plus.vim'
Plugin 'cscope-wrapper'
Plugin 'cecscope'
Plugin 'ACScope'
Plugin 'cscope_win'
Plugin 'cscope-quickfix'
Plugin 'cscope-menu'
Plugin 'autoload_cscope.vim'
Plugin 'cscope_macros.vim'
要安装某个插件,将光标移动到相应位置,按’i’键开始自动安装。
关于ctags的作用就不多说了,直接上配置方式:
sudo apt-get install exuberant-ctags
cd prj/src
ctags -R .
vim 打开任意源文件
使用ctags命令开始浏览代码
:PluginSearch Taglist
"Keymap: i - Install plugin; c - Cleanup; s - Search; R - Reload list "Search results for: Taglist
Plugin 'taglist-plus'
Plugin 'taglist.vim'
在交互模式下安装'taglist-plus'