如何自动更新vim中的标签文件?

Can*_*pus 35 vim ctags

我使用Ctrl-]使用vim C++标记文件进行导航.问题是每当某个文件被修改,链接不再有效,我必须重新运行ctags并更新标记文件.我们的代码库很庞大,生成标记文件需要很长时间.

有没有工具在后台定期更新标签文件?我可以配置VIM来做同样的事情吗?

我在Windows下使用gvim.

DrA*_*rAl 26

继Blixtor的回答之后,你需要仔细考虑一下脚本的设计.我建议隔离设计,使自动命令使用Windows"启动"命令或类似命令在后台运行外部脚本:从而防止Vim在生成标记文件时无响应.

然后该脚本可以使用不同的文件名生成标记文件(即不是"标记" ctags -R -o newtags .:),tags并且当ctags完成时,删除并重命名newtagstags.这将防止标记文件在生成完成时在Vim中不可用.

  • 实际上,taglist插件已经具有在文件更改时自动更新其taglist的功能.我唯一找不到的是该插件如何与普通标签集成,以便^]使用该列表.也许有这样的解决方案(我会对此感兴趣).我的两分钱:) (2认同)

xol*_*lox 20

我写了vim-easytags插件来做到这一点.我通过扫描整个项目(:UpdateTags **/*.[hc]例如使用命令)初始化我的标签文件一次,然后插件将在我编辑时自动更新标签文件,并:update在Vim中自动更新源代码文件.虽然它更新了标签文件,但它会阻止Vim,但因为它只扫描当前文件所以它不需要很长时间.

更新(2014-07-30):仍在使用vim-easytags插件:-).现在它支持异步模式以避免阻塞Vim.在我写这个时,异步模式还不是默认模式,但经过一些反馈之后,我可能会切换默认模式.

  • 嗯,从未来编辑。(当我在这里...)这与 [AutoTag](http://www.vim.org/scripts/script.php?script_id=1343) 相比如何。 (2认同)

Dmi*_*ank 11

我已经用ctags编写了一个插件来完成所有艰苦的工作:Indexer.

它为整个项目提供无痛自动标签生成,并使标签保持最新.标签是在后台生成,因此,您不必等待ctags生成标签.您可以单独使用它,也可以作为另一个插件project.tar.gz的附加组件使用它.

在第一种方式中,您可以~/.indexer_files像这样声明项目:

[CoolProject]

/home/user/cool_project

[AnotherProject]
option:ctags_params = "--languages=c++"

/home/user/another_project/src
/home/user/another_project/lib 
Run Code Online (Sandbox Code Playgroud)

然后,当您打开任何文件时/home/user/cool_project,所有这个项目都将被ctags索引.当您从另一个项目打开标签时,也会为其生成标签.来自不同项目的标签永远不会混合.从项目中保存文件时,标记会以静默方式更新.你不必关心它,它只是有效.

有关详细信息,请参阅文章:Vim:项目的方便代码导航,它完全解释了Indexer + Vimprj的用法.

它已在Vim 7.3上成功通过以下系统测试:

  • 的Archlinux

  • Ubuntu 10.4

  • Windows XP

  • Mac OS X Lion


Bli*_*tor 9

一个主意:

每次使用BufWritePost事件保存缓冲区时,使用Vim自动命令(:help autocommand)来触发脚本的运行.

此脚本启动ctags生成并包含一些额外的小逻辑,以便在它已经运行时运行(或者最多每10分钟运行一次等).

编辑:

事先在这里询问了类似的事情,请参阅Vim自动生成ctags


Huy*_* Vo 5

来自其存储库:vim-gutentags是一个插件,负责 Vim 中急需的标签文件管理。它会在您工作时(重新)生成标签文件,同时完全不妨碍您。它甚至会尽力不让这些标签文件妨碍您。它没有依赖关系并且可以正常工作。

您可以在https://github.com/ludovicchabant/vim-gutentags尝试一下。