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

8
我目前有一个像这样的项目目录:
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 .

由此产生的标签文件在每个项目中都会生成。我的问题是如何指定要生成标签文件的位置。在这种情况下,所有的标签文件将会在一起,希望这样可以解决此问题。
3个回答

4
最简单的解决方案是生成一个单独的tags文件:
$ cd MainProject
$ ctags -R .

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

set tags=./tags;,tags;

3
我建议使用gutentags vim插件来处理标签文件的生成。Gutentags通过查找SCM文件夹(如.git)来定位项目根目录,并为整个项目生成标签文件。
除了可以指定另一个缓存目录(g:gutentags_cache_dir)外,不需要进行其他配置。有关更多配置选项,请参阅帮助文件help gutentags

1

满足你需求的方法不止一种。答案也可能取决于其他具体情况,或者取决于你准备做什么。

例如,如果你所有的项目都是在版本控制系统中独立管理的(也就是说,它们的根目录下有一个.git/.svn/),你将可以使用自动化解决方案。其中之一是gutentags -- 参见@apparat的答案。还存在一些与vim无关的解决方案,它们监听已提交的文件或修改后的文件 -- @romainl昨天在reddit上介绍了其中的几个, 我相信它们已经在SO上被描述过了。还有我的lh-tags插件,它与gutentags非常相似,并自动为属于项目的每个缓冲区设置&tags -- 我还没有检查gutentags在这个主题上的表现。

如果您的项目不在版本控制系统下,您需要另一种方法来说明:“这是项目foo”,“这是项目bar”。这个SO Q/A讨论了这个话题。从那里开始,您应该能够为每个项目设置(本地)l:&tags,甚至调整生成标签的vim插件的操作方式--我对我的插件中的项目意识非常(最?)着迷。注意:在lh-tags的情况下,您只需告诉插件标签文件应该生成在哪里,它就会相应地更新&tags

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接