繁体   English   中英

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

[英]How to find offending format error in Vim tags file

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

E431: Format error in tags file "tags"

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

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

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

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

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

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

/^[^\t]{50,}

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

ctags -R --exclude=*.js .

除了jaster的回答:

我发现了这一点,它表明1. Keep the text short, because: - The line length that Vi can handle is limited to 512 characters.个字符打破了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 Maximum length of a line in a tags file: 512 bytes.

我确实有一个超过512个字符的标记行 - 删除该行为我解决了问题。

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM