每次在Vim中加载cscope.out后,我都需要将Vim的“pwd”更改为与cscope.out文件相同的目录,这可能是因为cscope在生成标记文件时使用了相对路径。因此,如果有办法迫使cscope在其标记文件中使用绝对路径 - cscope.out,那么无论您的Vim会话的pwd是否与cscope.out文件所在的目录相同,它都将是。< / p>
答案 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数据库移动到任何位置的唯一方法。