美文网首页
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