内容简介: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
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 分离Webpack开发环境与生产环境的配置
- Xcode配置测试环境和线上环境
- Linux环境centos7 配置java环境
- hadoop地址配置、内存配置、守护进程设置、环境设置
- 配置lisp开发环境
- 配置lisp开发环境
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
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)》 这本书的介绍吧!