GVim中的某些文件中没有标签文件,但其他文件中没有

时间:2013-09-02 23:18:00

标签: vim tags ctags

我刚刚通过自制软件安装了ctags并在~/.vimrc中附加了以下行:

set tags=./tags,tags;$HOME

然后我在我的一些目录上运行/usr/local/bin/ctags -R .并打开存储在目录中的一些文件,然后其中一些脚本成功导入了标签文件,但其他脚本没有。

例如,我在我的Python工作区上打开了test.py,我已经运行了上面的命令,然后我尝试将Ctrl+]放在我的GVim上,看起来就像是成功导入了标签文件。

我还打开了位于hello.go的{​​{1}},我已经执行了上面的~/go/src/github.com/user/hello命令,成功导入了代码文件。但是,为了进行测试,我刚放在Go目录中的ctags文件没有正确导入标记文件。

此外,当我在test.rb上执行ctags命令,然后打开位于~/another_go_workspace/src的文件时,该文件未导入标记文件...但是,因为我在~/another_go_workspace/src/hello/hello.go上添加了set tags=./tags,tags;$HOME,它是不是会自动查找更高的目录,对吧?

那么我错过了什么?

如果它没有在更高目录中导入tags文件,我是否必须在每个目录上执行~/.vimrc命令,即在ctag~/go/src/soccer_analysis,{{1等等......?

感谢。

3 个答案:

答案 0 :(得分:3)

tags选项的值是正确的,您对其行为的假设也是正确的。

通过您的设置set tags=./tags,tags;$HOME,Vim将首先在当前文件的目录中搜索tags文件,然后从工作目录中将tags文件向上搜索到{{1} }}

这允许您在项目的根目录下生成$HOME文件,并确保Vim会在您项目的任何位置以及工作目录中选择它。

使用以下结构和您当前的设置:

tags

Vim应该在以下所有方案及其变体中找到project/ bar/ bar.js foo/ foo.js project.js tags

tags

每次向项目添加新文件或写入现有文件时,都必须重新索引整个项目。根据你写的关于ruby文件的内容,看起来你在添加文件后没有运行ctags。对项目中的一系列文件进行尝试:$ vim project.js $ cd foo && vim foo.js $ cd bar && vim bar.js $ vim foo/foo.js $ vim bar/bar.js $ cd bar && vim bar.js ../project.js

答案 1 :(得分:0)

不,vim没有上去查找标签文件的目录。我建议您从顶级目录(生成标签的位置)启动vim,然后遍历到您想要的任何文件。

vim go/src/coffee

Vim能够使用:Explore等命令很好地导航文件系统。

编辑:我错了,分号可以用来向上搜索。见:help file-searching

此外,我注意到您尝试将$HOME添加到您的代码中,但由于多种原因这些代码无效。

文档(:help 'tags')说:

Filenames for the tag command, separated by spaces or commas.

因此:

  1. 分隔符不正确
  2. $HOME将被视为标记文件
  3. 所以这样做的“正确”方法是:

    set tags=./tags,tags,$HOME/tags
    

    即使你这样做,我认为它不会起作用。标签文件主要包含2个元素,搜索模式和文件名。如果您从顶部生成文件,则所有文件名都将相对于该目录。

    因此,如果您在某个子目录深处,vim将尝试使用顶部的相对文件路径打开该文件,从该子目录开始。

答案 2 :(得分:0)

问题可能是由拼写错误造成的。我想

set tags=./tags,tags;$HOME

应该是

set tags=./tags;,tags;$HOME