IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    vim8 C/C++ IDE开发环境配置

    OenHan发表于 2019-01-05 11:27:37
    love 0

    4年前写过一篇《如何将VIM配置成适用C语言的IDE》,现在已经老的牙都掉光了,其实在当时也是非常难用,尤其是对于经常要打开kernel代码查看函数引用关系的我而言,最终vim对于而言就是一个terminal里面使用的简单的文本编辑器了。突然看到各种VIM8的配置攻略,一时兴起,使用感受就是:

    VIM8满足了我的需求,除了不能绘制引用关系图。

    从https://github.com/oenhan/vim clone代码即可

    1. vim8 安装

    centos7下执行

    sudo curl -L https://copr.fedorainfracloud.org/coprs/lantw44/vim-latest/repo/epel-7/lantw44-vim-latest-epel-7.repo -o /etc/yum.repos.d/vim-latest.repo

    2. plugin管理

    使用plug.vim:

    curl -fLo vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

    bundle.vim保存是所有插件

    call plug#begin('~/.vim/plugged')
    
    """""""""""""""""""""""""""""""""""""""""""""""""
    """"""""""""""" IDE 界面配置插件 """"""""""""""""
    """""""""""""""""""""""""""""""""""""""""""""""""
    " 目录进退
    Plug 'justinmk/vim-dirvish'
    
    " 底层状态条
    Plug 'itchyny/lightline.vim'
    
    " 前后空格显示告警色
    Plug 'bronson/vim-trailing-whitespace'
    
    " Git命令行
    Plug 'tpope/vim-fugitive'
    
    " vim列对齐线
    Plug 'Yggdroot/indentLine'
    
    "切换当前terminal和vim的鼠标焦点,F12
    Plug 'nvie/vim-togglemouse'
    
    "unimpaired 插件定义括号开头的快捷键,官方 Vim 中丢失的快捷键
    Plug 'tpope/vim-unimpaired'
    
    """""""""""""""""""""""""""""""""""""""""""""""""
    """"""""""""""" 代码搜索配置插件 """"""""""""""""
    """""""""""""""""""""""""""""""""""""""""""""""""
    "模糊查找leaderf
    Plug 'Yggdroot/LeaderF', { 'do': './install.sh' }
    
    " 自动后台更新ctags
    Plug 'ludovicchabant/vim-gutentags'
    Plug 'skywind3000/gutentags_plus'
    
    "搜索栏预览
    Plug 'skywind3000/vim-preview'
    
    """""""""""""""""""""""""""""""""""""""""""""""""
    """"""""""""""" 代码格式配置插件 """"""""""""""""
    """""""""""""""""""""""""""""""""""""""""""""""""
    
    " 代码快速对齐
    Plug 'junegunn/vim-easy-align'
    
    " 自动进行tab2space转换
    Plug 'vim-scripts/Smart-Tabs'
    
    """""""""""""""""""""""""""""""""""""""""""""""""
    """"""""""""""" 代码编辑配置插件 """"""""""""""""
    """""""""""""""""""""""""""""""""""""""""""""""""
    " 语法检查
    Plug 'w0rp/ale'
    
    " 强化具体语言文件
    Plug 'vim-scripts/c.vim'
    Plug 'vim-scripts/a.vim'
    Plug 'octol/vim-cpp-enhanced-highlight'
    Plug 'fatih/vim-go'
    
    " 撤销记录列表
    Plug 'mbbill/undotree'
    
    " 括号补全
    Plug 'tpope/vim-surround'
    
    " 为buff自动创建不存在的目录
    Plug 'pbrisbin/vim-mkdir'
    
    " 快速补全
    Plug 'Valloric/YouCompleteMe', {'do':'./install.py --clang-completer --go-completer'}
    "函数参数提示
    Plug 'Shougo/echodoc.vim'
    
    " 异步执行插件
    Plug 'skywind3000/asyncrun.vim'
    
    """""""""""""""""""""""""""""""""""""""""""""""""
    """"""""""""""" 代码染色配置插件 """"""""""""""""
    """""""""""""""""""""""""""""""""""""""""""""""""
    Plug 'altercation/vim-colors-solarized'
    Plug 'crusoexia/vim-monokai'
    
    call plug#end()

    执行:PlugUpdate更新插件

    3. gutentags ctags管理

    centos自带的ctags太老了,直接上universal-ctags,自己编译吧:

    https://github.com/universal-ctags/ctags.git

    负责生产ctags。

    另外global另外提供了一套索引机制,即把引用关系也会加入索引中:

    yum install global-ctags

    debian系自带的太老了,自己编译安装最新的吧。 gutentags能自动生成tags,而且异步监控更新,且能自动切换tags,具体配置如下:

    " ----------gutentags.vim插件配置-----------------------------------
    "yum install -y global-ctags
    set tags=./.tags;,.tags
    let $GTAGSLABEL = 'pygments'
    let $GTAGSCONF = '/etc/gtags.conf'
    
    " gutentags 搜索工程目录的标志,当前文件路径向上递归直到碰到这些文件/目录名
    let g:gutentags_project_root = ['.git','.root','.svn','.hg','.project']
    
    " 所生成的数据文件的名称
    let g:gutentags_ctags_tagfile = '.tags'
    
    " 同时开启 ctags 和 gtags 支持:
    let g:gutentags_modules = []
    if executable('ctags')
        let g:gutentags_modules += ['ctags']
    endif
    if executable('gtags-cscope') && executable('gtags')
        let g:gutentags_modules += ['gtags_cscope']
    endif
    
    " 将自动生成的 ctags/gtags 文件全部放入 ~/.cache/tags 目录中,避免污染工程目录
    let g:gutentags_cache_dir = expand('~/.cache/tags')
    
    " 配置 ctags 的参数
    let g:gutentags_ctags_extra_args = []
    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']
    
    " 如果使用 universal ctags 需要增加下面一行
    let g:gutentags_ctags_extra_args += ['--output-format=e-ctags']
    
    " 禁用 gutentags 自动加载 gtags 数据库的行为
    " 避免多个项目数据库相互干扰,使用plus插件解决问题
    let g:gutentags_auto_add_gtags_cscope = 0
    
    "let g:gutentags_define_advanced_commands = 1
    
    " change focus to quickfix window after search (optional).
    let g:gutentags_plus_switch = 1
    
    " default keymap
    "<leader>cs   Find symbol (reference) under cursor
    "<leader>cg   Find symbol definition under cursor
    "<leader>cd   Functions called by this function
    "<leader>cc   Functions calling this function
    "<leader>ct   Find text string under cursor
    "<leader>ce   Find egrep pattern under cursor
    "<leader>cf   Find file name under cursor
    "<leader>ci   Find files #including the file name under cursor
    "<leader>ca   Find places where current symbol is assigned
    
    "----------vim-preview配置-----------------------------------------
    "P 预览 大p关闭
    autocmd FileType qf nnoremap <silent><buffer> p :PreviewQuickfix<cr>
    autocmd FileType qf nnoremap <silent><buffer> P :PreviewClose<cr>

    4. LeaderF模糊搜索

    leaderF是最惊艳的一个插件了,再也不需要各种bar了,具体功能如下:

    快捷键 操作意义
    ctrl+p 全project模糊查找文件名,代替NERDTree
    ;+ff 当前文件的函数列表,代替TagBar
    ;+fb 查找vim打开过的buffer,代替Tabbar
    ;+fl 在当前文件内容中进行search,和vim自带相比,它是异步的,单独windows中呈现结果
    ;+ft 从全project的tags中模糊查找函数名,刚需中的刚需

    具体配置如下:

    " -----------LeaderF 模糊文件查找-------------------------------
    " Ctrl + p 打开文件搜索
    let g:Lf_ShortcutF = '<c-p>'
    noremap <Leader>ff :LeaderfFunction<cr>
    noremap <Leader>fb :LeaderfBuffer<cr>
    noremap <Leader>ft :LeaderfTag<cr>
    noremap <Leader>fm :LeaderfMru<cr>
    noremap <Leader>fl :LeaderfLine<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}
    
    let g:Lf_NormalMap = {
        \ "File":   [["<ESC>", ':exec g:Lf_py "fileExplManager.quit()"<CR>']],
        \ "Buffer": [["<ESC>", ':exec g:Lf_py "bufExplManager.quit()"<CR>']],
        \ "Mru":    [["<ESC>", ':exec g:Lf_py "mruExplManager.quit()"<CR>']],
        \ "Tag":    [["<ESC>", ':exec g:Lf_py "tagExplManager.quit()"<CR>']],
        \ "Function":    [["<ESC>", ':exec g:Lf_py "functionExplManager.quit()"<CR>']],
        \ "Colorscheme":    [["<ESC>", ':exec g:Lf_py "colorschemeExplManager.quit()"<CR>']],
        \ }

    5. ycm代码补全

    :PlugUpdate后ycm就已经编译完成了,注意ycm_extra_conf.py需要自己配置,不要用编译自带的那个即可,其他参考我的配置:

    "关闭自动弹出的窗口
    "set completeopt=menu,menuone
    let g:ycm_global_ycm_extra_conf= '~/.vim/config/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-y>'
    set completeopt=menu,menuone
    " 使用 Ctrl+y 主动触发语义补全
    noremap <c-y> <NOP>
    " 修改补全列表配色
    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,
            \}

    vim8 C/C++ IDE开发环境配置来自于OenHan

    链接为:http://oenhan.com/vim8-c-ide-plugin-vimrc



沪ICP备19023445号-2号
友情链接