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

Vim 如何让cscope在cscope.out文件中使用绝对路径?,vim,cscope,Vim,Cscope,每次在Vim中加载一个cscope.out之后,我都需要将Vim的“pwd”更改为与cscope.out文件所在的目录,这可能是因为在生成标记文件时,cscope使用相对路径。因此,如果有办法强制cscope在其标记文件-cscope.out中使用绝对路径,那么无论您的Vim会话的pwd是否与cscope.out文件所在的目录相同。导入cscope.out时,您可以提供前缀,即 :cscope add /path/to/cscope.out /path/to/src/code 然后,您的搜索结

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

导入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
@艾伦·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文件的位置和我想要使用的绝对路径。

对于这个问题有一个非常简单的解决方法:

11.尝试将
$CSCOPE\u DB
环境变量设置为指向您创建的CSCOPE数据库,这样您就不必总是在中启动Vim 与数据库相同的目录。这对于我们的客户尤其有用 将代码拆分为多个子目录的项目。注:适用于 要实现这一点,应使用绝对路径名构建数据库: cd到/,然后执行

find /my/project/dir -name '*.c' -o -name '*.h' > /foo/cscope.files
然后在与Cscope.files文件相同的目录中运行Cscope(或使用 “cscope-i/foo/cscope.files”),然后设置并导出$cscope_DB 变量,将其指向产生以下结果的cscope.out文件):

(上面最后一个命令是针对Bourne/Korn/bashshells的:我忘了 如何在基于csh的shell中导出变量,因为我像 瘟疫)

您现在应该能够在计算机上的任何目录中运行'vim-tfoo' 机器和Vim直接跳转到“foo”的定义。我倾向于 编写一些shell脚本(只定义和导出CSCOPE_DB)用于 我所有不同的项目,这让我可以用 简单的“sourceprojecta”命令


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

#!/bin/sh

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

然后就是vim cscope.files,也许还有:cs add cscope.out,尽管我的cscope插件会自动完成。然后我搜索我感兴趣的文件并使用gf跳转到它们。

您可以通过设置
cscoperactive
选项,让vim解释cscope.out中与cscope.out文件位置相对的路径。 从
:帮助csre

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

例子

:设置csre
:设置nocsre


注意:由于我还没有足够的资历添加评论: Aaron和Neha的回答对我了解整个系统很有帮助,但对这个问题最好、最直接的回答目前排在第三位,是Shayan的

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

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

:set cscopeprg=cscope -P path_to_relative_base

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

此外,在脚本运行的同一目录上运行
export cscope_db=$(pwd)/cscope.out
。从vim+cscope的角度来看,这应该是最容易的解决方案。谢谢你的回答!
:set cscopeprg=cscope -P path_to_relative_base