Skip navigation.

Fat R笔记……与减肥无关

Fat awful terrible Rubbish-bin

cscope & taglist

cscope的编译和安装没有特别之处,./configure - make - make install即可。
安转完毕后先阅读说明: 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>

选项说明可以在文档中查到:

'csto' 的值决定 |:cstag| 命令查找的次序。如果 'csto' 被设为 0,cscope 数据库先
被搜索,搜索失败的情况下在搜索标签文件。如果 'csto' 被设为 1,标签文件会在
cscope 数据库之前被搜索。缺省值为 0。
例:
:set csto=0
:set csto=1

这样就会先用cscope搜索,如果失败了再用tag搜索。

若设定了 'cscopetag' 选项,":tag" 命令,CTRL-] 以及 "vim -t" 都会使用 |:cstag|
而不是缺省的 :tag。也就是说,设定 'cst' 选项意味着你总同时搜索 cscope 数据库和
标签文件。缺省值为关。例如:
:set cst
:set nocst

设置了这个选项后,tag的功能就会替换成cstag了(tag命令和cstag命令变成了同一个命令,因此ctrl+]实际上也是调用cstag来处理)

如果 '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和代码窗口间切换。

摸了一下hharm-2410核心板The magic behind TaskSwitchXP

Comments

Anonymous 9. May 2007, 06:28

Tony writes:

你好,我在win32下使用vim+cscope,请问每次程序改变的时候,是不是都要断开cscope连接重新更新数据库后才能反映更新?

Anonymous 9. May 2007, 06:29

Tony writes:

有没有办法像source insight一样,光标定位到哪里,窗口实时显示调用关系?

Returner 10. May 2007, 14:48

cscope的数据库应该是不会动态更新的吧..有没有插件可以实现动态更新就不知道了
第二个问题……我也不太清楚-.- 找找有没有相关的插件吧……

How to use Quote function:

  1. Select some text
  2. Click on the Quote link

Write a comment

Comment
(BBcode and HTML is turned off for anonymous user comments.)

If you can't read the words, press the small reload icon.


Smilies