我有一个项目如下:
/dir
dir1
dir2 -> symbolic-link to /otherdir
file1
tags *
- 我希望 vim 使用这个标签文件,其中包含 dir1 和 dir2 中文件的标签。当我编辑 file1 时,VIM 找不到正确的标签文件。
我在 .vimrc 中有以下设置:
set tags=tags;/
有没有办法在不明确告诉 VIM标签的绝对路径的情况下保持这个文件结构?
您可以将其他标签附加到相同的 ctags 中,例如,如果您想 ctag dir1 中的所有内容,您将执行:
ctags -R *
如果您想从目录二添加一些其他标签:
ctags -R -a ~/path/to/dir2/*
-a 用于追加。
现在,无论我在哪里打开我的 vim,为了始终拥有我的 ctags,我所做的就是在我的.vimrc
:
set tags+=./tags;$HOME
这将在当前目录中查找标签,并将递归到您的主文件夹,如果您希望它搜索到根文件夹或更少,只需$HOME
更改/
或/path/to/root/project/
在我的这一行以及与~/.vimrc
您的布局相似的情况下,tags
相关功能(:ts
、<C-]>
等)使用tags
位于 、 和 根部dir
的相同文件。dir1
dir2
set tags=./tags,tags;$HOME
该tags
文件首先在当前文件的目录中搜索,然后在cwd
, 然后向上直到到达$HOME
.
:echo tagfiles()
编辑时说什么file1
?这里说['/home/romainl/Desktop/dir0/tags']
。
编辑
抛出一个符号链接似乎并没有改变任何东西。
结束编辑
我认为这只是在正确的目录中的问题。当你开始在这个项目中工作时,使用:cd /dir
进入带有标签文件的目录,并确保该autochdir
选项已关闭。然后当你在 dir2 中编辑一个文件时,工作目录仍然是 dir,它仍然会找到相同的标签文件。
另一方面,如果你最终将 dir/dir2 作为你的工作目录,那实际上意味着你在 /otherdir,所以当 Vim 从那里查找标签文件时,它在那个目录中找不到它或在 / 中。我怀疑这就是你现在正在发生的事情。
您可以随时使用该:pwd
命令查看您所在的目录,就像在 shell 中一样。