2010-02-02 69 views
10

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

回答

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 
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 /项目”是我想要的cscope.out中文件的位置和绝对路径使用。

4

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

11.Try设置$CSCOPE_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中文件):

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

(最后的命令以上对于Bourne /光辉/ Bash shell:我忘记了 如何导出基于csh的shell中的变量,sin我避免他们像瘟疫 )。

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

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跳到它们。

+0

另外,在脚本运行的相同目录中运行'export CSCOPE_DB = $(pwd)/ cscope.out' – Paschalis 2015-01-22 10:13:46

10

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

如果“cscoperelative”被设置,那么在没有给予 cscope的前缀的(前缀是-P选项的cscope的参数), cscope.out中位置的基名(通常是项目根目录)将被用作前缀来构造一个绝对路径 。默认是关闭的。 注意:此选项仅在cscope(cscopeprg)为 时未使用前缀路径(-P)进行初始化时有效。

例子

:设置csre
:nocsre设置

+5

这应该是真正被接受的答案,因为从vim + cscope的角度来看是迄今为止最简单的解决方案。谢谢您的回答! – janjust 2016-02-01 17:05:46

1

注:因为我没有足够的资深添加评论: 亚伦和NEHA的答案是有用的我更多地了解了整个系统,但这个问题的最好和最直接的答案目前排在第三位,是沙燕的。

提问者更要求有关cscope的获取绝对路径,不使用(非常有能力和强大)VIM围绕它的工作。

注2:还有另外一种方法,使vim的一个变化,完成相同的东西NEHA一样。

:set cscopeprg=cscope -P path_to_relative_base 

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

相关问题