美文网首页
Vim C/C++ 开发配置(插件相关)持续更新

Vim C/C++ 开发配置(插件相关)持续更新

作者: 云石畅想 | 来源:发表于2019-09-28 14:27 被阅读0次

git 仓库地址

dev-config

安装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可以呼出搜索框,使用起来非常方便。

相关文章

网友评论

      本文标题:Vim C/C++ 开发配置(插件相关)持续更新

      本文链接:https://www.haomeiwen.com/subject/qsazectx.html