vim(编辑器之神)02配置篇(二) 插件

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
by skywang
Previous     Next