主要就是记录一下linux下vim关于cscope更新数据库的配置。
平时使用cscope/ctags的时候查看代码还是比较方便的,但是编辑文件的时候就比较鸡肋了,原因在于cscope和ctags没有集成自动更新,其实这些在配置文件中添加简单的几句话就能实现了,笔者经过测试,认为在大项目中cscope增量更新的方式速度还是可以接受的(原理是不是搜索目录下文件的时间戳?没研究过)。
整个过程其实就是用了几条简单的shell命令,下面看看我的vim跟cscope相关的配置
if has("cscope") && filereadable("/usr/bin/cscope")
set csprg=/usr/bin/cscope
set csto=0
set cst
set nocsverb
" 添加cscope数据库
if filereadable("cscope.out")
cs add cscope.out
" 添加环境变量中的cscope数据库
elseif $CSCOPE_DB != ""
cs add $CSCOPE_DB
endif
set csverb
endif
" 适用于cscope的常规键位映射
nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-@>i :cs find i <C-R>=expand("<cfile>")<CR><CR>
nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>
" 笔者自己添加的键位映射
" 关闭数据库连接
nmap <C-@>k :cs kill cscope.out <CR>
" 打开数据库连接
nmap <C-@>o :cs add cscope.out <CR>
" 保存文件并且更新数据库
nmap <C-@>w :w<CR>:!cscope -bqR<CR><CR>
" 保存文件并且更新ctags
nmap <C-@>u :w<CR>:!ctags -R<CR><CR>
" 保存文件更新全部
nmap <C-@>a <C-@>w <C-@>u
最后提一下,cscope和ctags的局限性也比较明显,但是配置起来是非常方便的,所以笔者的各个工作机上都使用了这些设置。
如果是长期使用的工作环境,建议配置一下clang编译器,该编译器的词法分析功能开放得比较好,可以到网上搜索一些相应的vimscript,也许对你有用。只是clang安装起来比较麻烦而且依赖项比较多。