vim ctags cscope 配置

  • 综述
    • 配置vimrc文件
      • 指定cscope文件
      • 添加键盘映射
    • 生成cscope相应文件
    • 大功告成

综述

在上一篇博文 将Vim配置成为一款强大的编辑工具之 ctags的安装和使用 详细介绍了ctags的使用;在配合介绍一下cscope的安装和使用。
在使用cscope之前,要确认vim是否支持cscope,确认方式如下:
:version 查看cscope表之前是否有+号,有+号表示支持cscope,反之不支持
vim ctags cscope 配置_第1张图片

配置vimrc文件

指定cscope文件

这里需要注意set csprg=~/bin/cscope 该行指定了cscope文件的位置;通常情况是不需要指定的。

"-- Cscope setting --
" 添加cscope数据库到当前vim
if has("cscope")
    set csprg=~/bin/cscope " 指定用来执行cscope的命令
    set csto=0 " 设置cstag命令查找次序:0先找cscope数据库再找标签文件;1先找标签文件再找cscope数据库
    set cst " 同时搜索cscope数据库和标签文件
    set cscopequickfix=s-,c-,d-,i-,t-,e- " 使用QuickFix窗口来显示cscope查找结果
    set nocsverb
    if filereadable("cscope.out") " 若当前目录下存在cscope数据库,添加该数据库到vim
        cs add cscope.out
        "elseif $CSCOPE_DB != "" " 否则只要环境变量CSCOPE_DB不为空,则添加其指定的数据库到vim
        "    cs add $CSCOPE_DB
    endif
    set csverb
endif

我们在添加这段配置文件之后,若出现了了如下错误:
cscope配置错误
我们需要将该配置文件注释掉,因为系统已经自动为我们添加了cscope的相关文件

添加键盘映射

通常情况,我们可以通过cscope的帮助信息查看cscope的使用方法;但是使用起来相当的不方便,当我们要搜索某个函数的时候需要手动的输入。例如:
查看aFunc() 函数调用了哪些函数需要输入:cs find c aFunc
cscope帮助信息:

cscope commands:
add  : Add a new database             (Usage: add file|dir [pre-path] [flags])
find : Query for a pattern            (Usage: find c|d|e|f|g|i|s|t name)
       c: Find functions calling this function
       d: Find functions called by this function
       e: Find this egrep pattern
       f: Find this file
       g: Find this definition
       i: Find files #including this file
       s: Find this C symbol
       t: Find this text string
help : Show this message              (Usage: help)
kill : Kill a connection              (Usage: kill #)
reset: Reinit all connections         (Usage: reset)
show : Show connections               (Usage: show)

我们可以使用键盘映射来解决这个问题,当要针对某个函数/变量进行搜索的时候,将光标移动到当前函数/变量上;在按下对应的按键即可。
添加按键映射;网上常见的映射是

    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-@>s :scs find s <C-R>=expand("<cword>")<CR><CR>    
    nmap <C-@>g :scs find g <C-R>=expand("<cword>")<CR><CR>

将Ctrl +@或者Ctrl+\等按键映射起来;但是Ctrl+\按起来在按下sgc等。但是这样比较不方便。。
这里我参照cscope的帮助信息,做到见名知意的原则,进行如下映射:

nmap css :cs find s <C-R>=expand("<cword>")<CR><CR>    
nmap csg :cs find g <C-R>=expand("<cword>")<CR><CR>    
nmap csc :cs find c <C-R>=expand("<cword>")<CR><CR>    
nmap cst :cs find t <C-R>=expand("<cword>")<CR><CR>    
nmap cse :cs find e <C-R>=expand("<cword>")<CR><CR>    
nmap csf :cs find f <C-R>=expand("<cfile>")<CR><CR>    
nmap csi :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
nmap csd :cs find d <C-R>=expand("<cword>")<CR><CR>   

同事设置按键的timeout信息,这里设置为3s
set timeoutlen=3000

生成cscope相应文件

详细的信息可以参考http://blog.csdn.net/peng_cao/article/details/48522383#高效的ctags使用方法

ctags -R --c++-kinds=+p --fields=+iaS --extra=+q -L ${OUT_PATH}/names.file -f ${OUT_PATH}/tags
echo "for create cscope databases.."
cscope -Rbq -i names.file 

大功告成

csc –> 搜索哪里调用getWebViewPackageName()这个函数
csd –> 搜索getWebViewPackageName这个函数调用了哪些函数!
cst –> 搜索getWebViewPackageName这个字符串

你可能感兴趣的:(vim,vim,cscope)