VIM 插件
一、Vundle 插件管理
配置
$ cd ~/.vim/bundle
$ git clone git@github.com:VundleVim/Vundle.vim.git
$ vim ~/.vimrc
" 插件管理
set nocompatible " 关闭兼容模式
filetype off
set rtp+=~/.vim/bundle/Vundle.vim/
call vundle#begin()
"Bundle 'gmarik/vundle'
"Bundle 'taglist.vim'
"Bundle 'scrooloose/nerdtree'
"Bundle 'kien/ctrlp.vim'
"Bundle 'Yggdroot/LeaderF'
"Bundle 'fholgado/minibufexpl.vim'
"Bundle 'winmanager'
"Bundle 'Valloric/YouCompleteMe'
"Bundle 'scrooloose/syntastic'
call vundle#end()
filetype on
命令
:PluginInstall 安装在.vimrc文件中列出来的所有插件。
:PluginInstall <plugin-name> 安装指定的插件
:PluginClean 清理未用插件
:PluginUpdate
:PluginList
:PluginSearch
二、Ctags 建立标签索引
配置
$ sudo apt-get install ctags
$ vim ~/.vimrc
" Ctags 设置
set tags=./tags:,tags " ./tags: 向上找直到根
使用
$ ctags -R --c++-kinds=+px --fields=+iaSKz --extra=q
命令
:tag tag Find a tag.
Ctrl-] Find the tag under the cursor.
Ctrl-t Return to previous location before jump to tag
三、cscope 查询调用关系
配置
$ sudo apt-get install cscope
$ vim ~/.vimrc
" cscope 设置
set cscopequickfix=s-,c-,d-,i-,t-,e- " quickfix窗口显示
if has("cscope")
set csprg=/usr/bin/cscope
set csto=1 " tags优先查找,0则反之
set cst " 同时使用tags
set nocsverb
if filereadable("cscope.out")
cs add cscope.out
endif
set csverb
endif
使用
$ cscope -Rbq
命令
Ctrl-] & Ctrl-t
:cs find c/d/e/f/g/i/s/t
四、Taglist 基于ctags的symbol窗口
配置
$ vim ~/.vimrc
" Taglist 设置
let Tlist_Auto_Open=0 " 默认关
let Tlist_Ctags_Cmd='/usr/bin/ctags'
let Tlist_Show_One_File=1 " 只显示当前文件的TagList
let Tlist_File_Fold_Auto_Close=0 " 不关闭其他文件tags
let Tlist_Enable_Fold_Column=0 " 不显示折叠树
let Tlist_Exit_OnlyWindow=1 " 如过是最后一个窗口,则退出
let Tlist_Sort_Type="name" " 按照名称排序
" let Tlist_Close_On_Select=1 " 选中tag后自动关闭
命令
:TlistOpen 打开taglist窗口
:TlistClose 关闭taglist窗口
:TlistToggle 在打开和关闭间切换
五、NERDTree 树状目录
配置
$ vim ~/.vimrc
" NERDTree 设置
let NERDTreeWinPos='left' " 左侧显示窗口
let NERDTreeShowHidden=1 " 显示隐藏文件
命令
:NERDTree 打开
:NERDTreeClose 关闭
:NERDTreeToggle 在打开和关闭间切换
六、FileExplore 多文件操作
配置
" FileExplore 设置
let g:miniBufExplMapWindowNavVim = 1 " <C-h,j,k,l>切换到上下左右的窗口
let g:miniBufExplMapWindowNavArrows = 1 " <C-箭头键>切换到上下左右窗口
let g:miniBufExplMapCTabSwitchBufs = 1 " 支持Ctal-Tab键切换
let g:miniBufExplModSelTarget = 1
let g:miniBufExplMoreThanOne = 0
命令
:bn 下一个buf
:bp 上一个buf
七、Winmanager 窗口管理
配置
" Winmanager 设置
" let g:AutoOpenWinManager = 1 " 打开vim自动打开WM
let g:NERDTree_title="[NERDTree]"
let g:winManagerWindowLayout="NERDTree|TagList"
function! NERDTree_Start()
exec 'q' " 打开WM会有空buf,退出
exec 'NERDTree'
endfunction
function! NERDTree_IsValid()
return 1
endfunction
" nmap <F8> :WMToggle<CR>
function! <SID>ToggleWindowsManager()
if IsWinManagerVisible()
call s:CloseWindowsManager()
else
call s:StartWindowsManager()
exec 'q' " 打开WM会有空buf,退出
end
endfunction
命令
:WManager 打开
:WMClose 关闭
:WMToggle 切换
八、ctrlp 文件搜索
命令
Ctrl-p
九、leaderF 文件搜索
十、Syntastic 语法检查
配置
" Syntastic 设置
" let g:syntastic_ignore_files=[".*\.py$"] " 禁止对python检测以加快速度
let g:syntastic_check_on_open=1
let g:syntastic_enable_signs=1
十一、YouCompleteMe 补全
环境搭建
$ apt install libclang-dev cmake python-dev clang llvm
配置
" YouCompleteMe 设置
" let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'
" set completeopt=longest,menu " 补全行为与IDE一致
" autocmd InsertLeave * if pumvisible() == 0|pclose|endif " 离开插入模式关闭预览窗口
" let g:ycm_confirm_extra_conf=0 " 打开vim不咨询是否加载ycm
" let g:ycm_collect_identifiers_from_tags_files=1 " YCM 基于ctags引擎
" let g:ycm_min_num_of_chars_for_completion=2 " 从第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 " 字符串也能补全
" let g:ycm_key_invoke_completion='<C-Space>' " 直接触发自动补全
" inoremao <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>" " 回车选中当前项
十二、建立索引和调用关系
$ ctags -R --c++-kinds=+px --fields=+iaSKz --extra=q
$ cscope -Rbq