1. Vim插件说明
若想vim用的顺手或者想将vim打造成一个IDE。那么,vim配置和插件是两个不可或缺的部分。
在git(一个版本控制工具)出来之前,vim插件都是在http://www.vim.org/download.php中搜索想要的插件,然后下载;在安装插件安装说明放到~/.vim的相应位置。
但是在git和github流行起来之后,vim插件开发者们普遍的都使用github来管理vim插件。这样,我们在github上就可以搜索出相应的插件。
更酷的是,通过Vundle这个工具,可以实现github上vim插件的傻瓜式安装!
使用Vundle来进行安装vim插件,就是本文要介绍的重点。
2. Vundle安装
Vundle是vim插件的管理工具。有了它,我们能够非常容易的管理vim的插件。
Vundle安装步骤如下:
(01) 新建~/.vim/bundle路径
$ mkdir -p ~/.vim/bundle
(02) 克隆Vundle工程
$ git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
3. Vundle安装/卸载插件
编辑~/.vimrc,并添加以下内容。(如果没有~/.vimrc,则新建该文件即可)
set nocompatible " be iMproved, required
filetype off " required
set rtp+=~/.vim/bundle/Vundle.vim " Vundle 路径
call vundle#begin() " Vundle 开始标志
" 必要的:让Vundle管理Vundle
Plugin 'gmarik/Vundle.vim'
" ==下面是自定义插件
" ...
call vundle#end() " required
filetype plugin indent on " required
下面以nerdtree插件为例,讲解Vundle管理插件的方式。
如果要添加插件nerdtree的话,先在github上找到nerdtree的路径(即https://github.com/scrooloose/nerdtree.git)。然后计算出它的对路径scrooloose/nerdtree。最后,将相对路径scrooloose/nerdtree到~/.vimrc中的"自定义插件处"。添加的语句如下:
Plugin 'scrooloose/nerdtree'
接着,重新用vim打开~/.vimrc文件;然后输入:PluginInstall
即会自动下载nerdtree并安装。 如果想要写在nerdtree,则输入:PluginClean
即可!
4. 配置示例
下面是我自己使用的vim配置文件内容。
github上有许多vimer将自己的配置分享出来,感兴趣的话,可以到github上去搜索。
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" ==> Vundle(插件管理工具)
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set nocompatible " be iMproved, required
filetype off " required
set rtp+=~/.vim/bundle/Vundle.vim " Vundle 路径
call vundle#begin() " Vundle 开始标志
" 必要的:让Vundle管理Vundle
Plugin 'gmarik/Vundle.vim'
" ==下面是自定义插件
" 目录树
Plugin 'scrooloose/nerdtree'
" 函数变量列表
Plugin 'majutsushi/tagbar'
" 代码注释
Plugin 'tpope/vim-commentary'
" 语法检查
Plugin 'scrooloose/syntastic'
" 文件查找
Plugin 'kien/ctrlp.vim.git'
" tab扩展
Plugin 'ervandew/supertab'
" 文件浏览插件(文件缓存区)
Plugin 'vim-scripts/bufexplorer.zip'
" 最近使用文件列表
Plugin 'vim-scripts/mru.vim'
" 状态栏
Plugin 'Lokaltog/vim-powerline'
" c/c++等语言的插件
"Plugin 'WolfgangMehner/vim-plugins'
" .c/.h文件切换插件
Plugin 'vim-scripts/a.vim.git'
" 保存文件时,自动保存目录
Plugin 'DataWraith/auto_mkdir'
" 书签插件
"Plugin 'MattesGroeger/vim-bookmarks'
" 复制/粘贴工具
Plugin 'vim-scripts/YankRing.vim'
" 内置grep到vim中
Plugin 'yegappan/grep'
"Plugin 'SirVer/ultisnips'
" == plugin from http://vim-scripts.org/vim/scripts.html
" == java 插件
" 打开import 文件
"Plugin 'javaimp.vim'
" java自动补全
"Plugin 'javacomplete'
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => 通用配置
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set number " 显示行号
set autoread " 文件在Vim之外修改过,自动重新读入
set foldenable
" 搜索
set hlsearch " 搜索时,高亮显示查找内容
set ignorecase " 搜索是,忽略大小写
set smartcase " 如果搜索中有大写字符,忽略 'ignorecase' 选项"
" 语法和高亮
syntax enable
syntax on " 开启语法检验
" Tab和空格
set tabstop=4 " 设置Tab键的宽度=等同4个空格
set shiftwidth=4 " 每一级自动缩进的空格数为4个
set expandtab " 将Tab自动转化成空格(需要输入真正的Tab键时,使用 Ctrl+V+Tab)
set softtabstop=4 " 按退格键时可以一次删掉 4 个空格
" 缩进
set autoindent " 自动缩进
set smartindent " 开启新行时使用智能自动缩进"
" 编码
set encoding=utf-8 " 设置文本编码为utf-8
set fileencodings=utf-8,gb2312,gbk,gb18030,utf-16,utf-32 " 自动判断编码的编码次序
set termencoding=utf-8
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => 自定义快捷键
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" F2自动保存
map <F2> :up<CR>
" F3
map <F3> :Grep<CR>
" F4强制关闭窗口
map <F4> :q!<CR>
" F8切换NerdTree
map <F8> :NERDTreeToggle<CR>
" 设置F12为输入模式和粘贴模式的切换键
set pastetoggle=<F12>
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => 插件配置
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" vim-powerline: 状态栏
set nocompatible " Disable vi-compatibility
set laststatus=2 " Always show the statusline
set t_Co=256 " Explicitly tell Vim that the terminal supports 256 colors
" tagbar: 函数,变量等标签
filetype on
nmap <Leader>tag :TagbarToggle<CR>
" vim-commentary: 注释代码
autocmd FileType python,sh set commentstring=#\ %s
autocmd FileType java,c,cpp set commentstring=//\ %s
" Usage: (01) gcc to comment 1 line
" (02) 5gcc to comment 5 line
" (03) gcu to un-comment 1 line
" (04) 5gcu to un-comment 5 line
" syntastic: 语法检查
let g:syntastic_check_on_open = 1
let g:syntastic_ignore_files=[".java$"] " ignore java files
nmap <Leader>check :SyntasticCheck<CR>
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
" ctrlp: 搜索
let g:ctrlp_map = '<c-p>'
let g:ctrlp_user_command = 'find %s -type f' " MacOSX/Linux
set wildignore+=*/.git/*,*/.hg/*,*/.svn/* " ignore direcotries
set wildignore+=*/tmp/*,*.so,*.swp,*.zip " ignore files
" delimiteMate: 括号自动补全
autocmd FileType txt let b:loaded_delimitMate = 1 " 对于*.txt文件禁用括号自动补全
" vim-plugin
let g:C_UseTool_cmake = 'yes'
let g:C_UseTool_doxygen = 'yes'
" Snippet
let g:UltiSnipsUsePythonVersion = 2
" MRU
nmap <Leader>mru :MRU<CR>
" javaimp
let $JAVASOURCEPATH="$JAVA_HOME/src"
map H :call OpenJavaImport($JAVASOURCEPATH)<CR>
" javacomplete
" Only do this part when compiled with support for autocommands.
" autocmd Filetype java setlocal omnifunc=javacomplete#Complete
" autocmd Filetype java setlocal completefunc=javacomplete#CompleteParamsInfo
" autocmd FileType java inoremap <buffer>. .<C-X><C-O><C-P>
" vim-bookmarks快捷键
" 1. mm Add/Remove bookmark
" 2. mi Add/Edit/Remove bookmark annotation
" 3. mp :PrevBookmark
" 4. mn :Nextookmark
" 5. ma :ShowAllBookmarks
" 6. mc :ClearBookmarks
" 7. mx :ClearAllBookmarks
" YankRing
nmap <Leader>ys :YRShow<CR>
nmap <Leader>yc :YRClear<CR>
" UltiSnips
"let g:UltiSnipsUsePythonVersion = 2
"let g:UltiSnipsExpandTrigger="<tab>"
"let g:UltiSnipsJumpForwardTrigger="<tab>"
"let g:UltiSnipsJumpBackwardTrigger="<s-tab>"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" ==> cscope
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if has("cscope")
set cscopequickfix=c-,d-,e-,i-,s-,t-
set csprg=/usr/bin/cscope
set csto=0
set cst
set nocsverb
if filereadable("cscope.out")
cs add cscope.out
endif
set csverb
nmap <C-\>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-\>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-\>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-\>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-\>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-\>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-\>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
nmap <C-\>d :cs find d <C-R>=expand("<cword>")<CR><CR>
endif