git 仓库地址
安装Vim8
参见文章:安装vim8
使用 Vim-plug 管理插件
方案使用vim-plug来管理插件,和Vundle的区别这里就不讲了,网上可以搜到很多文章。
项目的 git 主页
安装:
curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
配置插件:
call plug#begin('~/.vim/plugged')
Plug 'XXX/XXX' (Note: plugin git repo name)
call plug#end()
常用命令(在vim中输入):
:PlugStatus # 检查状态
:PlugInstall # 安装配置的插件
:PlugUpdate # 更新插件
:PlugClean # 卸载注释掉的插件
:PlugUpgrade # 升级 vim-plug 本身
插件选择和配置
符号索引
Plug 'universal-ctags/ctags'
Plug 'ludovicchabant/vim-gutentags'
" gutentags 搜索工程目录的标志,碰到这些文件/目录名就停止向上一级目录递归
let g:gutentags_project_root = ['.root', '.svn', '.git', '.hg', '.project']
" 所生成的数据文件的名称
let g:gutentags_ctags_tagfile = '.tags'
" 将自动生成的 tags 文件全部放入 ~/.cache/tags 目录中,避免污染工程目录
let s:vim_tags = expand('~/.cache/tags')
let g:gutentags_cache_dir = s:vim_tags
" 配置 ctags 的参数
let g:gutentags_ctags_extra_args = ['--fields=+niazS', '--extra=+q']
let g:gutentags_ctags_extra_args += ['--c++-kinds=+px']
let g:gutentags_ctags_extra_args += ['--c-kinds=+px']
" 检测 ~/.cache/tags 不存在就新建
if !isdirectory(s:vim_tags)
silent! call mkdir(s:vim_tags, 'p')
endif
函数列表 LeaderF
这里定义了 CTRL+p 在当前项目目录打开文件搜索,CTRL+f 打开函数搜索,CTRL+b 打开 Buffer 搜索,CTRL+t 打开 Tag 搜索。
Plug 'Yggdroot/LeaderF', { 'do': './install.sh' }
let g:Lf_ShortcutF = '<c-p>'
let g:Lf_ShortcutB = '<c-n>'
" noremap <c-m> :LeaderfMru<cr>
noremap <c-f> :LeaderfFunction!<cr>
noremap <c-t> :LeaderfTag<cr>
noremap <c-b> :LeaderfBuffer<cr>
let g:Lf_StlSeparator = { 'left': '', 'right': '', 'font': '' }
let g:Lf_RootMarkers = ['.project', '.root', '.svn', '.git']
let g:Lf_WorkingDirectoryMode = 'Ac'
let g:Lf_WindowHeight = 0.30
let g:Lf_CacheDirectory = expand('~/.vim/cache')
let g:Lf_ShowRelativePath = 0
let g:Lf_HideHelp = 1
let g:Lf_StlColorscheme = 'powerline'
let g:Lf_PreviewResult = {'Function':0, 'BufTag':0}
google 代码风格 和 常用插件
Plug 'vim-scripts/google.vim'
Plug 'vim-scripts/a.vim'
Plug 'octol/vim-cpp-enhanced-highlight'
let c_no_curly_error = 1
Plug 'justinmk/vim-dirvish'
Plug 'scrooloose/nerdtree'
" 使用 NERDTree 插件查看工程文件。设置快捷键,速记:file list
nmap fl :NERDTreeToggle<cr>
" 设置NERDTree子窗口宽度
let NERDTreeWinSize=32
" 设置NERDTree子窗口位置
" let NERDTreeWinPos="right"
" 显示隐藏文件
let NERDTreeShowHidden=1
" NERDTree 子窗口中不显示冗余帮助信息
" let NERDTreeMinimalUI=1
" 删除文件时自动删除文件对应 buffer
let NERDTreeAutoDeleteBuffer=1
let NERDTreeChDirMode=1
let NERDTreeDirArrows=1
YCM
参考文档来安装,参照官方文档 YouCompleteMe#linux-64-bit 安装好依赖包,然后不需要安装,直接使用plug的安装就可以了,内存记得要大于1.5G,不然编译过程会报错。
Plug 'Valloric/YouCompleteMe', { 'do': 'YCM_CORES=1 python3 ./install.py --clang-completer' }
let g:ycm_global_ycm_extra_conf='~/.vim/plugged/YouCompleteMe/third_party/ycmd/examples/.ycm_extra_conf.py'
let g:ycm_add_preview_to_completeopt = 0
let g:ycm_show_diagnostics_ui = 0
let g:ycm_server_log_level = 'info'
let g:ycm_min_num_identifier_candidate_chars = 2
let g:ycm_collect_identifiers_from_comments_and_strings = 1
let g:ycm_complete_in_strings=1
let g:ycm_key_invoke_completion = '<c-z>' " 使用 Ctrl+Z 主动触发语义补全
noremap <c-z> <NOP>
set completeopt=menu,menuone
" 修改补全列表配色
highlight PMenu ctermfg=0 ctermbg=242 guifg=black guibg=darkgrey
highlight PMenuSel ctermfg=242 ctermbg=8 guifg=darkgrey guibg=black
" 对指定源文件,输入两个字母后即触发语义补全
let g:ycm_semantic_triggers = {
\ 'c,cpp,python,java,go,erlang,perl': ['re!\w{2}'],
\ 'cs,lua,javascript': ['re!\w{2}'],
\ }
let g:ycm_filetype_whitelist = {
\ "c":1,
\ "cpp":1,
\ "go":1,
\ "python":1,
\ "sh":1,
\ "zsh":1,
\ }
let g:ycm_filetype_blacklist = {
\ 'markdown' : 1,
\ 'text' : 1,
\ 'pandoc' : 1,
\ 'infolog' : 1,
\}
YCM-Generator <我自己的大项目没有跑通这个插件>
YCM的代码搜索是需要配置的,具体是一个.ycm_extra_conf.py 的文件,如果每个项目都需要自己配置,还是很麻烦的,有一个工具可以很好的帮助我们完成这件事,远离也比较简单,这个工具会fake编译一遍工程,找到所有的依赖路径,再添加到conf.py文件中
# 加到 ~/.vimrc中:
Plug 'rdnetto/YCM-Generator', { 'branch': 'stable'}
# 加到 ~/.bashrc中:
alias config_gen="/home/xxx/.vim/plugged/YCM-Generator/config_gen.py"
# 使用是在后面跟工程的根目录: config_gen ./work
ctrlsf
很多时候我们不仅需要跳转到一个identifier的定义,还需要跳转到他的所有引用位置。在vimrc中添加:
" ctrlsf
Plug 'dyng/ctrlsf.vim'
let g:ctrlsf_position = 'right'
let g:ctrlsf_regex_pattern = 1
let g:ctrlsf_case_sensitive = 'yes'
let g:ctrlsf_default_root = 'project'
let g:ctrlsf_auto_close = 0
let g:ctrlsf_winsize = '30%'
nmap <Leader>f :CtrlSF<CR>
nmap <C-f> <Plug>CtrlSFPrompt
使用\键+f,可以立即跳转到光标所在iditenfier的所有引用处。
使用command+F可以呼出搜索框,使用起来非常方便。
网友评论