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

时间:2017-07-23 08:59:32

标签: vim ctags exuberant-ctags

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

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 个答案:

答案 0 :(得分:3)

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

$ cd MainProject
$ ctags -R .

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

set tags=./tags;,tags;

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

例如,如果您的所有项目都是在VCS中独立管理的(IOW,如果他们的根目录中有.git/.svn/),您就可以访问自动化解决方案。 gutentags就是其中之一 - 请参阅@ apparat的回答。还存在独立于vim的解决方案,用于侦听已提交的文件或已修改的文件 - @romainl has just presented a few of them on reddit yesterday,并且我非常有信心他们已经在SO上进行了描述。还有我的lh-tags plugin,它与gutentags非常相似,并且会自动为属于项目的每个缓冲区设置&tags - 我还没有检查过gutentags在这个主题上做了什么。

如果你的项目不在VCS下,你需要另一种说法:&#34;这是项目foo&#34;,&#34;这是项目栏&#34; 。 This SO Q/A addresses this topic。从那里你应该能够(本地)l:&tags设置最适合每个项目的内容,甚至可以调整生成标签的vim插件如何运行 - 我是一个(?)monomaniac关于我的插件中的project awareness。注意:在lh-tags的情况下,你只需要告诉插件应该生成标签文件的位置,它会相应地更新&tags