2013年7月

  gtags的确比cscope好用,但是有一个问题,因为GTAGS文件一般在根目录会产生一份,但是如果你的vim设置了autochdir,而且在代码的子目录打开文件查找函数的话,gtags就找不到对应的文件了,因为gtags认为自己还在根目录。
  怎么解决呢, gtags的命令行程序其实有指定绝对路径的办法,比如:

$ global -x finish_task
finish_task        61 libs/beanstalk.inc.php function finish_task($task){
$ global -xa finish_task
finish_task        61 /home/jgao/api/libs/beanstalk.inc.php function finish_task($task){

明显能看出区别了吧。
   唯一有问题的是,在vim中无法应用这个-a参数,所以只能另辟蹊径。cs add 来添加tag的时候其实可以有一个prepend path的:
cscope 命令:
add  : 添加一个新的数据库             (Usage: add file|dir [pre-path] [flags])
而gtags的这个选项默认为空:

 # pid    数据库名                            prepend path
 0 26612  GTAGS                               (none)
 1 26613  cscope.out                          /home/jgao/api

因此可以在vimrc中指定一个:

  if filereadable("/usr/bin/gtags-cscope")
    set csprg=/usr/bin/gtags-cscope
    cscope reset
    cscope add GTAGS  $PWD
  endif


增加一个$PWD的绝对路径,然后在vim中调用cs find就能找到对应的文件了。