vim配置c语言开发环境 vim简单配置教程( 二 )


最后请更新你的 ctags,不要再使用老旧的 Exuberant Ctags,这货停止更新快十年了,请使用最新的 Universal CTags 代替之,它在 Exuberant Ctags 的基础上继续更新迭代了近十年,如今任然活跃的维护着,功能更强大,语言支持更多 。
(注意最新版 universal ctags 调用时需要加一个 –output-format=e-ctags,输出格式才和老的 exuberant ctags 兼容否则会有 windows 下路径名等小问题) 。
自动索引
过去写几行代码又需要运行一下 ctags 来生成索引,每次生成耗费不少时间 。如今 Vim 8 下面自动异步生成 tags 的工具有很多,这里推荐最好的一个:vim-gutentags,这个插件主要做两件事情:
– 确定文件所属的工程目录,即文件当前路径向上递归查找是否有 `.git`, `.svn`, `.project` 等标志性文件(可以自定义)来确定当前文档所属的工程目录 。
– 检测同一个工程下面的文件改动,能会自动增量更新对应工程的 `.tags` 文件 。每次改了几行不用全部重新生成,并且这个增量更新能够保证 `.tags` 文件的符号排序,方便 Vim 中用二分查找快速搜索符号 。
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有了上面的设置,你平时基本感觉不到 tags 文件的生成过程了,只要文件修改过,gutentags 都在后台为你默默打点是否需要更新数据文件,你根本不用管,还会帮你:setlocal tags+=… 添加到局部 tags 搜索列表中 。
为当前文件添加上对应的 tags 文件的路劲而不影响其他文件 。得益于 Vim 8 的异步机制,你可以任意随时使用 ctags 相关功能,并且数据库都是最新的 。需要注意的是,gutentags 需要靠上面定义的 project_root 里的标志,判断文件所在的工程,如果一个文件没有托管在 .git/.svn 中,gutentags 找不到工程目录的话,就不会为该野文件生成 tags,这也很合理 。想要避免的话,你可以在你的野文件目录中放一个名字为 .root 的空白文件,主动告诉 gutentags 这里就是工程目录 。
最后啰嗦两句,少用 CTRL-] 直接在当前窗口里跳转到定义,多使用 CTRL-W ] 用新窗口打开并查看光标下符号的定义,或者 CTRL-W } 使用 preview 窗口预览光标下符号的定义 。
我自己还写过不少关于 ctags 的 vimscript,例如在最下面命令行显示函数的原型而不用急着跳转,或者重复按 `ALT+;` 在 preview 窗口中轮流查看多个定义,不切走当前窗口,不会出一个很长的列表让你选择,有兴趣可以刨我的 vim dotfiles 。
编译运行
再 Vim 8 以前,编译和运行程序要么就让 vim 傻等着结束,不能做其他事情,要么切到一个新的终端下面去单独运行编译命令和执行命令,要么开个 tmux 左右切换 。如今新版本的异步模式可以让这个流程更加简化,这里我们使用 AsyncRun 插件,简单设置下:
Plug 'skywind3000/asyncrun.vim'" 自动打开 quickfix window ,高度为 6let g:asyncrun_open = 6" 任务结束时候响铃提醒let g:asyncrun_bell = 1" 设置 F10 打开/关闭 Quickfix 窗口nnoremap <F10> :call asyncrun#quickfix_toggle(6)<cr>该插件可以在后台运行 shell 命令,并且把结果输出到 quickfix 窗口:


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: