如何让cscope在cscope.out文件中使用绝对路径?

时间:2010-02-02 22:54:56

标签: vim cscope

每次在Vim中加载cscope.out后,我都需要将Vim的“pwd”更改为与cscope.out文件相同的目录,这可能是因为cscope在生成标记文件时使用了相对路径。因此,如果有办法迫使cscope在其标记文件中使用绝对路径 - cscope.out,那么无论您的Vim会话的pwd是否与cscope.out文件所在的目录相同,它都将是。< / p>

6 个答案:

答案 0 :(得分:12)

您可以通过设置cscoperelative选项,让vim将cscope.out relative 中的路径解释为cscope.out文件的位置。 来自:help csre

  

如果设置了'cscoperelative',那么在没有给出前缀的情况下   cscope(前缀是cscope的-P选项的参数),basename   将使用cscope.out位置(通常是项目根目录)   作为构造绝对路径的前缀。默认为关闭。   注意:此选项仅在cscope(cscopeprg)时有效   初始化没有前缀路径(-P)。

     

实施例

     

:设置csre
    :set nocsre

答案 1 :(得分:11)

导入cscope.out时,可以提供前缀,即

:cscope add /path/to/cscope.out /path/to/src/code

然后你的搜索会变成:

Cscope Tag: foobar
    #   line  filename / context / line
    1     21 /path/to/src/code/foobar_file.c

答案 2 :(得分:4)

cscope tutorial针对此问题提供了一个非常简单的解决方法:

  

11.尝试将$CSCOPE_DB环境变量设置为指向您创建的Cscope数据库,这样您就不会总是需要启动Vim   与数据库相同的目录。这对于特别有用   将代码拆分为多个子目录的项目。注意:for   要实现这一点,您应该使用绝对路径名构建数据库:   cd到/,然后执行

find /my/project/dir -name '*.c' -o -name '*.h' > /foo/cscope.files
     

然后在与cscope.files文件相同的目录中运行Cscope(或使用   &#39; cscope -i /foo/cscope.files'),然后设置并导出$ CSCOPE_DB   变量,将其指向导致的cscope.out文件:

cd /foo
cscope -b
CSCOPE_DB=/foo/cscope.out; export CSCOPE_DB   
     

(上面的最后一个命令是Bourne / Korn / Bash炮弹:我已经忘记了   如何在基于csh的shell中导出变量,因为我避免使用它们   瘟疫)。

     

你现在应该可以运行&#39; vim -t foo&#39;在你的任何目录中   机器并让Vim直接跳到'foo&#39;的定义。我倾向于   编写小shell脚本(只定义和导出CSCOPE_DB)   我所有不同的项目,让我用它们之间切换   简单的源项目A&#39;命令。

答案 3 :(得分:3)

您可以使用文件的绝对路径创建cscpoe.files,这是我生成cscope数据库的脚本

#!/bin/sh

find $PWD -name '*.[ch]' -exec echo \"{}\" \; | sort -u > cscope.files
cscope -bvq

然后只是vim cscope.files并且可能:cs添加cscope.out,虽然我的cscope插件会自动执行此操作。然后我搜索我感兴趣的文件并用gf跳转到它们。

答案 4 :(得分:1)

@Aaron H.是对的。

对于我的配置,我使用了cscope_maps.vim插件并修改了以下行:

  40     " add any cscope database in current directory
  41     if filereadable("/usr/project/cscope.out")
  42         cs add /usr/project/cscope.out /usr/project
  43     " else add the database pointed to by environment variable 
  44     elseif $CSCOPE_DB != ""
  45         cs add $CSCOPE_DB
  46     endif

其中“/ usr / project”是cscope.out文件的位置和我想要使用的绝对路径。

答案 5 :(得分:1)

注意:由于我还不够高级,无法添加评论: Aaron和Neha的答案对我来说对于了解整个系统更有帮助,但对这个问题的最好和最直接的答案目前排在第三位,而且是Shayan的。

提问者更多地要求通过cscope获取绝对路径名,而不是使用(功能强大且功能强大的)vim来解决它。

注2:还有另一种方法可以在vim中进行单一更改,并完成与Neha所做的相同的操作。

:set cscopeprg=cscope -P path_to_relative_base

我喜欢Neha更好,但这种方式更接近于修改cscope而不是vim设置,如果这是你想要的。这是允许您将cscope数据库移动到任何位置的唯一方法。