9

我刚开始使用 ctags 并非常感谢该工具,但我管理标签文件的方式在我看来有点麻烦而且非常不灵活。

我目前如何管理我的标签文件:

  1. 我有一个整体标签文件存储在我的主文件夹中~/.vim/tags
  2. 当我更新我的代码或更改项目时,我运行一个删除旧标记文件并重新生成整体标记文件的脚本(当你更改项目时,你必须更改 ctags 的执行位置)

拥有一个整体标记文件对我有用,因为它可以让我跳转到我正在处理的当前项目的所有相关符号。

单个整体标签文件是否不适用于大型/巨大的代码库?为什么巨大的标签文件不能在大型/巨大的代码库上工作?

管理标签文件(或复数标签文件)的其他方法是什么?

为什么管理标签文件的新方法会更好?(可能更好的解决方案有时会更复杂。因此,如果您的解决方案更复杂,我想问您管理标签文件的更复杂方法的额外好处是什么。)


ps 我发现了一个关于 ctags 的 stackoverflow 问题,叫做“ vimctags-tips-and-tricks ”,但是这个问题没有讨论如何管理你的标签文件。

4

4 回答 4

10

我最近喜欢的一种方法是使用 VCS(版本控制系统)挂钩来生成 ctags 文件。即使对于小型项目等,我也在本地使用 git,因此每次提交时都会更新 ctags(显然,这对于所有其他 VCS 都是可能的)。

我个人喜欢将 ctags 文件放在每个项目的目录中,但这种方法应该在全局范围内同样有效。

编辑:VCS 挂钩是在执行某些操作时自动运行的脚本或程序,例如签出、提交、还原等。
为了进一步阅读,我建议以下链接:

Hooks 在我遇到的所有 VCS 中通常都可用,我相信您将能够找到您选择使用的文档。

于 2009-08-11T12:17:52.357 回答
7

我把我的tags文件放在项目目录中。这样可以使每个项目的标签分开。

对于大型代码库,我只是降低了更新它的频率。我通常只在我尝试跳转到某个关键字并且由于某种原因它不存在时才更新它。毕竟,目的是快速到达代码的其他部分,如果它通过任何方式到达那里,那么即使标记文件已过期,它也能正常工作。

于 2009-08-10T19:34:38.070 回答
1

就像 Greg 一样,我将标记文件保存在项目目录中。然后我使用带有它的标签的项目插件in=来设置标签文件位置以及在重新生成时是否使用递归tags以及cscope.out针对不同的项目。

我通常只在发生重大变化时更新标签文件,因为标签通常会让你找到正确的行(或至少接近正确的行),即使它已经过时了。我更新的主要原因是如果我添加了一个新的枚举、结构或类似的,并且我希望更新标记语法突出显示

于 2009-08-11T07:02:21.250 回答
0

除了我只有一个标签文件的 vim 插件外,每个项目我还有一个 ctags 数据库。

这意味着两件事:

  1. 一种检测“项目”并相应地设置 vim 设置的方法。有很多插件可以做到这一点。
  2. 一种同时为不同项目设置不同设置的方法。这就是setlocal tags=...(/ setlocal tags+=) 发挥作用的地方。

大多数时候项目不共享标签。因此,我很高兴检测当前项目以自动定义更新标签的位置以及读取标签的位置。这是两个不同的用例,vim 只处理(本机)最后一个。处理第一个用例的插件需要指定一个(缓冲区本地)变量来存储信息。

实际上,虽然保存文件应该只更新一个特定的标签数据库,但我们可能必须一次获取多个碱基的标签。这是我在处理相互依赖的库/项目时遇到的一个用例:我经常需要检查我导入的(~第 3 方)代码中的某些内容。我本可以使用全局&tags选项,但我选择(现在)在不同的缓冲区中具有不同的值。再次感谢我使用的 local-vimrc 插件,这个用例得到了处理。

关于更新标签数据库,它是在一个插件中完成的(我正在维护,但存在其他具有类似功能的插件):我从关联的项目标签数据库中删除与当前文件关联的标签,然后使用-a选项进行更新,在后台。真的不需要每次保存文件时都解析完整的项目。

如果项目文件在 vim 范围之外更新,我仍然可以在整个项目上运行标签。虽然提交钩子的一切都是透明的,但我能够更新 vim 拼写检查字典,以便不将代码标识符标记为拼写错误的单词。我怀疑使用纯粹的提交挂钩方法会有点乏味。

于 2017-08-14T14:56:42.393 回答