2014-12-05 46 views
7

我最近看到了这个错误得罪格式错误,每当我打自动完成宏在Vim中(例如,CTRL-N):如何找到Vim的标签文件

E431: Format error in tags file "tags"

的标签文件与旺盛的产生Ctags,大约1MB。我如何找到引发此错误的错误?

+3

就我而言,就在'E431'错误消息的下面,还有另一条消息指出标签文件中发生错误的位置,例如, '在字节63964633'之前。所以解决这个问题是用Vim打开标签文件并输入':go 63964633'来转到发生错误的字节。这恰好是一条1404字节长的行。删除这条线解决了这个问题。 – 2016-03-08 15:21:06

回答

4

真正长的函数名称可能会导致此错误。您可以通过在vim中打开标签文件并查找超过50个字符的方法名称来查找这些功能。

/^[^\t]{50,} 
+0

谢谢。仍然想知道是否有办法处理它们。另外,我猜你的50值是任意的。都很奇怪。 – mahemoff 2015-06-12 11:00:57

3

标签数据库是面向行的;在标题(以!_TAG_FILE_...开始的行)之后,每行对应于标签。

通过使用二进制搜索,您应该可以快速找到有问题的行:保存标签文件的副本,删除一半,测试。如果仍然出现错误,请重复(直到您下降到一行)。否则,请拿出另一半并重复。

这是一般的故障排除技术;例如,在Vim插件中查找问题(通过禁用其中的一半)也很有帮助。

+0

我发现它。对于其他人阅读,标签每次都读取,因此只需在保存文件后执行ctrl-p或ctrl-n即可。我结束了去标签文件的顶部,删除了一半的文件,并尝试在Vim。我发现这个错误是由于在开发过程中生成了Rails资产文件,如果我目测检查了标记文件,我会发现它是一个非常长期的文字(255个以上的字符)。 – mahemoff 2014-12-05 14:30:08

+0

标签 - 皮棉工具仍然不错,但似乎没有。 – mahemoff 2014-12-05 14:30:35

9

我在生成的标签文件中发现了一些额外的行!_TAG_FILE_FORMAT行。当我删除这些额外的行时,vim开始工作。

+2

这确实有点奇怪,现在问题是这些线是如何在那里结束的。如果我们每次创建新的标签文件时都必须删除这些内容,那么这并不是什么工作流程。你有幸找到原因吗? – Thomas 2015-05-21 15:29:34

-1

删除不符合ctags标准的多余行解决了我的问题。

+2

是不是循环逻辑,即导致有效的相同的问题,我怎么知道哪些行是非确认? – mahemoff 2015-07-02 11:07:00

0

我通过重建标签解决了这个问题。

首先删除所有标签文件,然后重建项目中的标签。

我认为原因是我建立标签文件两次,第一次为子目录建立标签,然后建立父目录。

因此,子目录标记不能包含一些父目录信息。

1

我认为ctags在解析java脚本文件时存在问题。从标记中排除它为我解决了这个问题。

ctags -R --exclude=*.js .