Vim 中cscope的用法

ctags与cscope的区别: ctags是跳转到标签定义的地方,但是如果查找函数在哪里定义过或标签在哪里出现过那么ctags就无能为力了。这时就需要功能强大的cscope了。

 

如何查看有没有安装cscope:打开vim然后输入: cs show

如果显示:no cscope connections 则表示你装了cscope,只是没有添加cscope的数据库。


所以一般你要先建立自己的cscope的数据库:一般用find命令:

find . -name ”*.h” -o -name ”*.c” -o -name ”*.cc” > cscope.files
cscope -bkq -i cscope.files


以下是我在工作中常用到的,比如可执行程序由cleartool的make命令编译而成,那么用一下命令就可以找出这个程序要用到所有的相关文件:

c catcr -rec TEST  | sed 's/^ *//g'| sed 's/^[0-9]*//g' | awk'(/\.c/||/\.C/||/\.cpp/||/\.h/||/\.inl/||/\.cc/||/\.CC/||/\.H/||/\.hpp/)&&\!/\.common/&&\!/\.HPUX/{print $1;}' | sed -e 's/@@\/[a-zA-Z\/_0-9\.\-]*//g' -e 's/@@[a-zA-Z\/_0-9\:\.\-]*//g'|sort -u > cscope.txt

 

cscope -bkq -i cscope.txt  


 

在vim中使用cscope非常简单,首先启动vim,调用以下命令添加一个cscope数据库

:cs add cscope.out

 

这时你输入cs show则会显示你设置的cscope数据库

 

但是这种方法,每次打开一个文件就要设置一下,比较麻烦。

 

建议的使用方法             

将下面的设定加入到你的 .vimrc 里 (根据你的情况调整文件路径): >

 

    if has("cscope")

        setcsprg=/usr/local/bin/cscope

        set csto=1

        set cst

        setnocsverb

        " addany database in current directory

        iffilereadable("cscope.out")

           cs add cscope.out

        " elseadd database pointed to by environment

        elseif $CSCOPE_DB != ""

           cs add $CSCOPE_DB

        endif

        set csverb

    endif

 

 

 

下表中列出了cscope的常用选项:

-R: 在生成索引文件时,搜索子目录树中的代码

-b: 只生成索引文件,不进入cscope的界面

-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度

-k: 在生成索引文件时,不搜索/usr/include目录

-i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用”“,表示由标准输入获得文件列表。

-Idir: 在-I项指出的目录中查找头文件

-u: 扫描所有文件,重新生成交叉索引文件

-C: 在搜索时忽略大小写

-Ppath: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了。

 

:cs find g function_name  //这个是用来找函数定义的地方

:cs find c function_name  //这个是用来找函数调用的地方

 

s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方

g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能

d: 查找本函数调用的函数

c: 查找调用本函数的函数

t: 查找指定的字符串

e: 查找egrep模式,相当于egrep功能,但查找速度快多了

f: 查找并打开文件,类似vim的find功能

i: 查找包含本文件的文件

 

如果找到函数定义的地方如何在跳回原来的地方:

ctrl + t

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