cscope & taglist
Friday, 22. September 2006, 07:53:36
安转完毕后先阅读说明: vi /usr/share/vim/vim63/doc/if_cscop.txt.gz
网上也有中文版本:http://vcd.gro.clinux.org/doc/if_cscop.html
在vim中使用并不需要进行太多的设置,不过首先vim编译时必须加入了cscope的支持
$ vim --version | grep cscope +cryptv +cscope +dialog_con +diff +digraphs -dnd -ebcdic +emacs_tags +eval
嗯,我用的这个版本的vim是支持cscope的。
根据文档的建议,在~/.vimrc中加入以下内容:
if has("cscope")
set csto=0
set cst
set nocsverb
if filereadable("cscope.out")
cs add cscope.out
elseif $CSCOPE_DBPATH != ""
cs add $CSCOPE_DBPATH $CSCOPE_DBPATH
endif
set csverb
endif
nmap <C-[>s :scs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-[>g :scs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-[>c :scs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-[>t :scs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-[>e :scs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-[>f :scs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-[>d :scs find d <C-R>=expand("<cword>")<CR><CR>
选项说明可以在文档中查到:
这样就会先用cscope搜索,如果失败了再用tag搜索。'csto' 的值决定 |:cstag| 命令查找的次序。如果 'csto' 被设为 0,cscope 数据库先
被搜索,搜索失败的情况下在搜索标签文件。如果 'csto' 被设为 1,标签文件会在
cscope 数据库之前被搜索。缺省值为 0。
例:
:set csto=0
:set csto=1
设置了这个选项后,tag的功能就会替换成cstag了(tag命令和cstag命令变成了同一个命令,因此ctrl+]实际上也是调用cstag来处理)若设定了 'cscopetag' 选项,":tag" 命令,CTRL-] 以及 "vim -t" 都会使用 |:cstag|
而不是缺省的 :tag。也就是说,设定 'cst' 选项意味着你总同时搜索 cscope 数据库和
标签文件。缺省值为关。例如:
:set cst
:set nocst
如果 'cscopeverbose' 没有被设定 (缺省情况),当添加一个数据库时,成功与否不会被
显示。理想的情况是,你先在 |.vimrc| 文件中复位该选项,再添加 cscope 数据库,然
后再置位。这样,如果你在使用 vim 当中动态添加数据库,你就会被 vim 告知结果。例
如:
:set csverb
:set nocsverb
cs add $CSCOPE_DBPATH $CSCOPE_DBPATH这行是我自己改的。因为我的cscope.out放在项目的根目录里,不指定pre-path的话cs就会在当前目录下使用相对路径查找文件,指定了pre-path就会使用绝对路径了(或者说把相对路径的参考点指定为了pre-path)。另外,不能写成:
cs add cscope.out $CSCOPE_DBPATH
因为这样cscope会在当前目录下寻找cscope.out
现在可以开始使用了。
跟使用tag一样,要先建立一个数据库:
cd /project_root_dir/ cscope -Rb
如果是kernel源代码,最好加上-k选项来忽略/usr/include(因为kernel不会使用这个目录)
然后就可以vi source.c阅读代码了。
加入vi后,用cs help可以查看帮助,cs show可以查看当前打开的数据库。由于上面对几个cscope命令进行了键绑定,因此可以用ctrl+[,后面跟一个字母键来执行对应的操作。如在函数名foo上按ctrl+[,c,就可以看到调用了这个函数的所有函数。
taglist也是一个有用的插件,可以用来查看tags。安装如下:
# cd /usr/share/vim/vim63/ # unzip taglist_41.zip # cd doc # vim
然后在vim中
:helptags .
编辑~/.vimrc,加入:
map <F3> :TlistToggle<cr>
这样,就可以在vim中用[F3]打开taglist窗口,察看tags并在tags间跳转了。按ctrl+w,w(或者连按两下ctrl+w)可以 在taglist和代码窗口间切换。









Anonymous # 9. May 2007, 06:28
你好,我在win32下使用vim+cscope,请问每次程序改变的时候,是不是都要断开cscope连接重新更新数据库后才能反映更新?
Anonymous # 9. May 2007, 06:29
有没有办法像source insight一样,光标定位到哪里,窗口实时显示调用关系?
Returner # 10. May 2007, 14:48
第二个问题……我也不太清楚-.- 找找有没有相关的插件吧……