1

我刚刚ctags通过自制软件安装并在我的~/.vimrc

set tags=./tags,tags;$HOME

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

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

我还打开了hello.go位于~/go/src/github.com/user/hello,其中我已经执行了上述ctags命令,成功导入了标签文件。但是,test.rb我只是为了进行测试而将其放在 Go 目录中的文件没有正确导入标签文件。

另外,当我在 上执行命令,然后ctags打开~/another_go_workspace/src位于?~/another_go_workspace/src/hello/hello.goset tags=./tags,tags;$HOME~/.vimrc

那么我错过了什么?

如果它不导入更高目录中的标签文件,我是否必须ctag在每个目录上执行命令,即 on ~/go/src/soccer_analysis, ~/go/src/coffee, ~/go/src/utility, etc, etc...?

谢谢。

4

3 回答 3

5

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

使用你的设置, Vim 将首先在当前文件的目录中set tags=./tags,tags;$HOME搜索一个文件,然后从工作目录向上搜索一个文件到.tagstags$HOME

这允许您在项目的根目录生成一个tags文件,并确保无论您在项目中的任何位置以及工作目录是什么,Vim 都会选择它。

具有以下结构和您当前的设置:

project/
    bar/
        bar.js
    foo/
        foo.js
    project.js
    tags

Vim 应该可以tags在以下所有场景及其变体中找到:

$ 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

每次向项目添加新文件或写入现有文件时,都必须重新索引整个项目。从您写的关于 ruby​​ 文件的内容来看,您似乎在添加文件后没有运行 ctags。试试这个选择你项目中的文件::echo tagfiles().

于 2013-09-03T07:57:46.950 回答
0

问题可能是由拼写错误引起的。我认为

set tags=./tags,tags;$HOME

应该

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

于 2014-08-18T08:14:00.727 回答
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将被视为标签文件

所以这样做的“正确”方法是:

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

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

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

于 2013-09-03T02:24:05.393 回答