每当我点击Vim中的自动完成宏(例如ctrl-n)时,我最近都会看到此错误:
E431: Format error in tags file "tags"
标签文件是使用Exuberant Ctags生成的,大约是1MB。如何找到触发此错误的错误?
答案 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标准的额外行为我解决了这个问题。