700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > vim8.0 c++开发环境配置

vim8.0 c++开发环境配置

时间:2018-07-16 04:26:43

相关推荐

vim8.0 c++开发环境配置

说明:centos8 最小安装,vim8.0

1、管理插件

vim-plug安装:

# curl -fLo ~/.vim/autoload/plug.vim --create-dirs /junegunn/vim-plug/master/plug.vim

# vim ~/.vimrc

在.vimrc文件头添加:

call plug#begin('~/.vim/plugged')

Plug 'itchyny/lightline.vim'

call plug#end()

执行:source ~/.vimrc 重新加载配置

vim-plug操作(在 vim 中使用的命令):

PlugInstall 安装

PlugUpdate 更新

PlugStatus 检查插件状态

PlugClean 清理.vimrc 里面删除或注释掉的插件

PlugUpgrade 升级自身

2、配色方案(可选)

创建~/.vim/colors目录:

# mkdir ~/.vim/colors

下载或编辑配色方案的.vim文件,保存到~/.vim/colors目录下

修改Vim配置文件~/.vimrc,添加或修改:

colorscheme gruvbox " gruvbox 为配色方案名

3、安装universal-ctags

下载:

# git clone /universal-ctags/ctags.git

安装:

# cd ctags

# ./autogen.sh

# ./configure --prefix=/usr/local/universal-ctags # 我的安装路径。你按自己的情况调整。

# make

# make install

建立新的连接

# mv /usr/bin/ctags /usr/local/ctags_bak

# ln -s /usr/local/universal-ctags/bin/ctags /usr/bin/ctags

在配置文件 ~/.vimrc 中添加:

set tags=./.tags;,.tags

set autochdir

let g:gutentags_ctags_extra_args = []

let g:gutentags_ctags_extra_args = ['--fields=+niazS', '--extra=+q']

let g:gutentags_ctags_extra_args += ['--c++-kinds=+pxI']

let g:gutentags_ctags_extra_args += ['--c-kinds=+px']

4、自动索引

在配置文件 ~/.vimrc 中增加配置项 Plug 'ludovicchabant/vim-gutentags'

在vim命令行模式下执行命令 :PlugInstall 即可完成vim-gutentags插件的安装

配置~/.vimrc 文件:

" gutentags搜索工程目录的标志,碰到这些文件/目录名就停止向上一级目录递归 "

let g:gutentags_project_root = ['.root', '.svn', '.git', '.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

" 检测 ~/.cache/tags 不存在就新建 "

if !isdirectory(s:vim_tags)

silent! call mkdir(s:vim_tags, 'p')

endif

" 如果使用 universal ctags 需要增加下面一行

let g:gutentags_ctags_extra_args += ['--output-format=e-ctags']

" 避免多个项目 数据库 相互干扰,使用plus插件解决问题

let g:gutentags_auto_add_gtags_cscope = 0

" change focus to quickfix window after search (optional).

let g:gutentags_plus_switch = 1

5、LeaderF模糊搜索

在配置文件 ~/.vimrc 中增加配置项 Plug 'Yggdroot/LeaderF'

在vim命令行模式下执行命令 :PlugInstall 即可完成LeaderF插件的安装

配置~/.vimrc 文件:

" -----------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>']],

\ }

快捷键 操作意义

ctrl+p 全project模糊查找文件名,代替NERDTree

;+ff 当前文件的函数列表,代替TagBar

;+fb 查找vim打开过的buffer,代替Tabbar

;+fl 在当前文件内容中进行search,和vim自带相比,它是异步的,单独windows中呈现结果

;+ft 从全project的tags中模糊查找函数名,刚需中的刚需

6、ALE动态检查

let g:ale_linters_expicit = 1

let g:ale_linters = {

\ 'cpp':['gcc','clang','cppcheck'],

\ 'c':['gcc','clang','cppcheck']}

let g:ale_sign_column_always = 1" 总是显示动态检查结果

let g:ale_completion_delay = 500

let g:ale_echo_delay = 20

let g:ale_lint_delay = 500

let g:ale_lint_on_text_changed = 'normal' " 代码更改后启动检查

let g:ale_lint_on_insert_leave = 1" 退出插入模式即检查

let g:airline#extensions#ale#enabled = 1

let g:ale_set_quickfix = 1

"let g:ale_open_list = 1 " 打开quitfix对话框

"let g:ale_c_gcc_options = '-Wall -O2 -std=c99'

"let g:ale_cpp_gcc_options = '-Wall -O2 -std=c++11'

"let g:ale_c_cppcheck_options = ''

"let g:ale_cpp_cppcheck_options = ''

let g:ale_echo_msg_format = '[%linter%] %code: %%s' " 告警显示格式

let g:ale_sign_error = ">>" " error 告警符号

let g:ale_sign_warning = "--"" warning 告警符号

let g:ale_echo_msg_error_str= 'E' " 错误显示字符

let g:ale_echo_msg_warning_str = 'W' " 警告显示字符

" <F9> 触发/关闭代码动态检查

map <F7> ::ALEToggle<CR>

"普通模式下,ak 前往上一个错误或警告,aj 前往下一个错误或警告

nmap ak <Plug>(ale_previous_wrap)

nmap aj <Plug>(ale_next_wrap)

" ad 查看错误或警告的详细信息

nmap ad :ALEDetail<CR>

7、代码自动补全

安装:

在配置文件 ~/.vimrc 中增加配置项

Plug 'dense-analysis/ale'

Plug 'majutsushi/tagbar', {'on': 'TagbarToggle'}

在vim命令行模式下执行命令 :PlugInstall

# cd .vim/plugged/YouCompleteMe

# python3 install.py --clang-completer

如果因 libclang-9.0.0-x86_64-unknown-linux-gnu.tar.bz2 的hash值失败,手动下载

# cd third_party/ycmd/clang_archives/

# rm -f libclang-9.0.0-x86_64-unknown-linux-gnu.tar.bz2

# wget /micbou/libclang/libclang-9.0.0-x86_64-unknown-linux-gnu.tar.bz2

返回ycm根目录,从新编译

# cd ../../../

# python3 install.py --clang-completer

编译完成后

# cp third_party/ycmd/.ycm_extra_conf.py ~/

配置~/.ycm_extra_conf.py文件:

在flags数组中添加:

'-isystem',

'/usr/include',

'-isystem',

'/usr/local/include',

'-isystem',

'/usr/include/c++/8' # 我的目录

配置~/.vimrc 文件:

" tagbar

let g:tagbar_width = 30

nmap <F8> :TagbarToggle<CR>

" YouCompleteMe

" 设置.ycm_extra_conf.py的全局路径

let g:ycm_global_ycm_extra_conf= '~/.ycm_extra_conf.py'

" 打开vim时不再询问是否加载ycm_extra_conf.py配置"

let g:ycm_confirm_extra_conf=0

" 语法关键字补全

let g:ycm_seed_identifiers_with_syntax = 1

" 使用ctags生成的tags文件

let g:ycm_collect_identifiers_from_tags_files = 1

" 每次重新生成匹配项,禁止缓存匹配项

let g:ycm_cache_omnifunc = 1

" 在注释中也可以补全

let g:ycm_complete_in_comments=1

" 字符串自动补全

let g:ycm_complete_in_strings = 1

" 错误标识符

let g:ycm_error_symbol='>>'

" 警告标识符

let g:ycm_warning_symbol='>*'

" 高亮显示代码中与诊断信息有关的文本或代码,0表示关闭

let g:ycm_enable_diagnostic_highlighting = 1

" 当光标移到所在行时显示诊断信息

let g:ycm_echo_current_diagnostic = 1

" 在强制编译后自动打位置列表并用诊断信息填充,

" 所谓位置列表就是标出各错误或警告对应在哪些行的小窗口,

" 可以实现直接跳转到错误行

let g:ycm_open_loclist_on_ycm_diags = 1

" 诊断信息关闭

let g:ycm_show_diagnostics_ui = 0

" 设置YCM的日志记录级别,可以是debug,info,warning,error或critical。debug是最详细的

let g:ycm_server_log_level = 'info'

" 收集注释中的文集来分析用于补全

let g:ycm_collect_identifiers_from_comments_and_strings = 1

" 关闭补全列表的快捷键,默认为ctrl+y

let g:ycm_key_invoke_completion = '<C-y>'

set completeopt=menu,menuone

" 使用 Ctrl+y 主动触发语义补全

noremap <C-y> <NOP>

" 为ycm服务器指定特定的python解释器,默认为空表示在系统上搜索适当的Python解释器

" let g:ycm_server_python_interpreter = '/usr/bin/python3'

" 指定用来运行jedi补全库的Python解释器。默认情况下与ycm服务器使用相同的解释器

" let g:ycm_python_binary_path = 'python3'

" 输入1个字符后开始补全

let g:ycm_min_num_identifier_candidate_chars = 1

let g:ycm_server_keep_logfiles = 1

" 为当前补全选项在vim顶部增加预览窗口,用来显示函数原型等信息

let g:ycm_add_preview_to_completeopt = 0

" 选中补全选项后自动关闭预览窗口,

" 当g:ycm_add_preview_to_completeopt设为1时或者vim的completeopt设为preview有效

let g:ycm_autoclose_preview_window_after_completion = 1

" 离开插入模式后自动关闭预览窗口,

" 当g:ycm_add_preview_to_completeopt设为1时或者vim的completeopt设为preview有效

let g:ycm_autoclose_preview_window_after_insertion = 1

" 语义补全的最大候选项数量,0表示没有限制

let g:ycm_max_num_candidates = 17

" 标识符补全的最大候选项数量,0表示没有限制

let g:ycm_max_num_identifier_candidates = 7

" 让Vim的补全菜单行为与一般IDE一致(参考VimTip1228)

nnoremap <leader>j :YcmCompleter GoToDeclaration<CR>

nnoremap <leader>k :YcmCompleter GoToDefinition<CR>

nnoremap <leader>l :YcmCompleter GoToDefinitionElseDeclaration<CR>

nnoremap <F6> :YcmForceCompileAndDiagnostics<CR>

" 在插入模式下按两下leader退出插入模式

"inoremap <leader><leader> <Esc>:w<CR>

" 在正常模式下按两下leader进入插入模式

"noremap <leader><leader> a

"inoremap <leader>x <Esc>xa

" 文件类型白名单,vim打开这些类型文件时会开启YCM。*表示所有文件类型

let g:ycm_filetype_whitelist = {

\ "c":1,

\ "cpp":1,

\ "go":1,

\ "python":1,

\ "sh":1,

\ "zsh":1,

\ }

" 文件类型黑名单,vim打开这些类型文件时会关闭YCM

let g:ycm_filetype_blacklist = {

\ 'tagbar' : 1,

\ 'nerdtree' : 1,

\}

" 语义触发器的关键字

let g:ycm_semantic_triggers = {

\ 'c' : ['->', '.'],

\ 'objc' : ['->', '.'],

\ 'cpp,objcpp' : ['->', '.', '::'],

\ 'perl' : ['->'],

\ 'php' : ['->', '::'],

\ 'cs,java,javascript,d,vim,ruby,python,perl6,scala,vb,elixir,go' : ['.'],

\ 'lua' : ['.', ':'],

\ 'erlang' : [':'],

\ 'css' : ['re!^\s{4}', 're!:\s+'],

\ 'html' : ['</'],

\ }

8、参数提示

Plug 'Shougo/echodoc.vim'

.vimrc 配置

set noshowmode

"set cmdheight=2

let g:echodoc_enable_at_startup = 1

9、代码格式化

Plug 'rhysd/vim-clang-format'

.vimrc 配置

let g:clang_format#auto_format_on_insert_leave=1 " 退出插入模式时自动格式化

.clang-format 配置

在用户跟目录下执行:

clang-format -style=google -dump-config > .clang-format

修改.clang-format文件中一下项:

AccessModifierOffset: -4

IndentWidth: 4

Standard: Cpp11

TabWidth: 4

UseTab:Always

10、其他

" 括号自动补全

Plug 'jiangmiao/auto-pairs'

" 目录结构展示插件

Plug 'scrooloose/nerdtree'

Plug 'Xuyuanp/nerdtree-git-plugin'

" 代码快速对齐

Plug 'junegunn/vim-easy-align'

" 异步执行插件

Plug 'skywind3000/asyncrun.vim'

" vim列对齐线

Plug 'Yggdroot/indentLine'

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。