如何指定生成标签文件的位置

How to specify where to generate the tags file

我目前有这样一个项目目录

MainProject
|_ProjectA
|   |_src
|      |_file1.cpp
|      |_file2.cpp
|      |_.....
|      |_tags <---tag file generated here  
|_ProjectB
|   |_src
|      |_file3.cpp
|      |_file4.cpp
|      |_.....
       |_tags <---tag file generated here

现在 file4.cpp 使用 file1.cpp 中的项目,但似乎因为它位于不同的文件夹中,所以我收到消息

cstag - tag not found

目前我进入了我的 ProjectA 和 ProjectB 并为每个都做了这个

ctage -R .

因此在每个项目中生成了哪个标签文件。 我的问题是如何指定生成标签文件的位置。在那种情况下,所有标签文件将彼此相邻,希望这将解决这个问题

我建议使用 gutentags vim 插件来处理您的标记文件生成。 Gutentags 正在通过查找 SCM 文件夹(例如 .git)定位您的项目根目录,并为整个项目生成标签文件。

不需要其他配置,但您可以根据需要指定另一个缓存目录 (g:gutentags_cache_dir)。查看帮助文件以获取更多配置选项 help gutentags.

最简单的解决方案是生成一个 tags 文件:

$ cd MainProject
$ ctags -R .

并告诉Vim在查找tags个文件时向上递归:

set tags=./tags;,tags;

没有一种方法可以满足您的需求。答案可能还取决于其他细节,或者取决于您准备做什么。

例如,如果您的所有项目都在 VCS 中独立管理(IOW,如果它们的根目录有 .git/.svn/),您将可以访问自动解决方案。 gutentags 就是其中之一——请参阅@apparat 的回答。也存在独立于 vim 的解决方案,用于侦听已提交的文件或已修改的文件 -- @romainl has just presented a few of them on reddit yesterday, and I'm quite confident they have already been described on SO. There is also my lh-tags plugin,这与 gutentags 非常相似,并且会自动为每个缓冲区设置 &tags项目 -- 我还没有检查 gutentags 在这个主题上做了什么。

如果您的项目不在 VCS 下,您将需要另一种表达方式:"this is project foo" 和 "this is project bar"。 This SO Q/A addresses this topic. From there you should be able to set (locally) l:&tags to whatever is best for each project, and even to tune how vim plugins that generates tags shall operate -- I'm quite a (the?) monomaniac regarding project awareness 在我的插件中。注意:在 lh-tags 的情况下,你只需要告诉插件在哪里生成标签文件,它就会相应地更新 &tags