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

栏目: C++ · 发布时间: 5年前

内容简介:4年前写过一篇《VIM8满足了我的需求,除了不能绘制引用关系图。从

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,
        \}
来自于

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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Pro Git (Second Edition)

Pro Git (Second Edition)

Scott Chacon、Ben Straub / Apress / 2014-11-9 / USD 59.99

Scott Chacon is a cofounder and the CIO of GitHub and is also the maintainer of the Git homepage ( git-scm.com ) . Scott has presented at dozens of conferences around the world on Git, GitHub and the ......一起来看看 《Pro Git (Second Edition)》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具