我刚刚通过自制软件安装了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等等......?
感谢。
答案 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.
因此:
$HOME
将被视为标记文件所以这样做的“正确”方法是:
set tags=./tags,tags,$HOME/tags
即使你这样做,我认为它不会起作用。标签文件主要包含2个元素,搜索模式和文件名。如果您从顶部生成文件,则所有文件名都将相对于该目录。
因此,如果您在某个子目录深处,vim将尝试使用顶部的相对文件路径打开该文件,从该子目录开始。
答案 2 :(得分:0)
问题可能是由拼写错误造成的。我想
set tags=./tags,tags;$HOME
应该是
set tags=./tags;,tags;$HOME