10

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

4

6 回答 6

16

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

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

例子

: 设置 csre
: 设置 nocsre

于 2015-04-13T11:46:50.193 回答
12

导入 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
于 2010-07-07T17:14:33.357 回答
4

cscope 教程有一个非常简单的解决方法来解决这个问题:

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

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

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

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

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

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

于 2012-01-05T22:17:28.753 回答
3

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

#!/bin/sh

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

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

于 2013-02-05T10:14:43.470 回答
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 文件的位置和我要使用的绝对路径。

于 2010-12-14T06:07:59.680 回答
1

注意:由于我还不够资深,无法添加评论:Aaron 和 Neha 的回答对我了解有关整个系统的更多信息很有用,但该问题的最佳和最直接的答案目前排在第三位,并且是 Shayan 的。

提问者更多地询问通过 cscope 获取绝对路径名,而不是使用(非常有能力和强大的)vim 解决它。

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

:set cscopeprg=cscope -P path_to_relative_base

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

于 2016-11-17T19:43:39.837 回答