Vim:难以设置ctags.子目录中的源不会在项目根目录中看到标记文件

Tho*_*mas 61 vim ctags

我今天正试图在Vim上设置(旺盛)ctags并且很难让它正常工作.我在命令行上使用以下命令生成我的ctags文件:

cd myproj
ctags -R
Run Code Online (Sandbox Code Playgroud)

这会将标记文件放在myproj根目录中.但是,当我处理驻留在root中的源时,Vim似乎只读取此标记文件.当我导航到更深层的目录时,如果我尝试使用跳转到标签<C-]>,我得到:

E433: No tags file
E426: tag not found: MyClassName
Run Code Online (Sandbox Code Playgroud)

我已经验证了MyClassName在tags文件中确实有一个标记,只是Vim没有看到它.有人可以解释如何配置Vim引用根的标签文件?

谢谢.

Amj*_*ith 120

将此添加到.vimrc文件 set tags=tags;/

这将检查当前文件夹中的标签文件,并继续向上一个目录一直到根文件夹.

因此,您可以在项目的任何子文件夹中,它将能够找到标签文件.

  • 如果你到了这里,和我一样,对`标签; /`感到困惑,`; /`后缀指示vim从包含标签的目录向上搜索到stop目录,在本例中为/.如果要将主目录用作stop目录,请使用`set tags + = tags; ~`或`set tags + = tags; $ HOME`.或者您可以使用项目树的顶级目录作为停止目录.(参见`:help file-searching`来理解分号.)另请注意,搜索标签文件会受到autochdir的影响.我在.vimrc中使用`set tags =./ tags,./ TAGS,tags;〜,TAGS; ~` (34认同)
  • 如果你有其他标签文件,你可能想要'set tags + = tags; /` (3认同)

Xav*_* T. 15

有一个选项告诉Vim在哪里查找标签文件.

我使用以下配置:

" search first in current directory then file directory for tag file
set tags=tags,./tags
Run Code Online (Sandbox Code Playgroud)

从帮助中提取:

当标记文件名以"./"开头时,"." 被替换为当前文件的路径.这使得可以在当前文件所在的目录中使用标记文件(无论当前目录是什么).使用"./"的想法是你可以定义首先搜索哪个标记文件:在当前目录("tags,./ tags")或当前文件的目录("./tags,tags")中.

例如:: set tags =./ tags,tags,/ home/user/commontags

我将当前的工作目录保存在tags生成文件的顶层项目目录中.

使用:pwd然后:cd myproj(在Vim内)转到包含标记文件的目录.

有关:help tags-option标记路径的更多信息,请参阅.

您的问题可能是您在错误的目录中,或者您的tags选项未正确设置.