如何在Vim标签文件中找到违规格式错误

时间:2014-12-05 10:47:11

标签: vim tags

每当我点击Vim中的自动完成宏(例如ctrl-n)时,我最近都会看到此错误:

E431: Format error in tags file "tags"

标签文件是使用Exuberant Ctags生成的,大约是1MB。如何找到触发此错误的错误?

9 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:4)

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

/^[^\t]{50,}

答案 3 :(得分:3)

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

ctags -R --exclude=*.js .

答案 4 :(得分:2)

仅通过为git文件生成标签来解决此问题。

git ls-files | ctags --links=no --languages=javascript,java,python -L- 

答案 5 :(得分:1)

除了jaster的答案:

我发现了这一点,它指出行长超过512个字符会破坏vim: 1. Keep the text short, because: - The line length that Vi can handle is limited to 512 characters. http://ctags.sourceforge.net/FORMAT

编辑:更新源:https://neovim.io/doc/user/vi_diff.html Maximum length of a line in a tags file: 512 bytes.

我确实有一个标记行,该标记行的长度超过512个字符-删除该行对我来说解决了这个问题。

答案 6 :(得分:0)

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

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

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

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

答案 7 :(得分:0)

我遇到了同一问题,似乎并非所有文件格式都得到很好的支持。我使用选项-L仅为c和c ++文件创建标签,问题消失了。 您可能想尝试以下方法,只需将* .postfix替换为所需的相应格式即可。

ctags -L $(find . -name *.c -or -name *.cpp -or -name *.h -or -name *.lua )

答案 8 :(得分:-1)

删除不符合ctags标准的额外行为我解决了这个问题。