VHDL标签在带有ctags + taglist的vim中效率不高

VHDL tags not efficient in vim with ctags+taglist

我使用带有ctags和Taglist插件的Vim。 编辑.vhd文件时,标签非常差(仅显示实体)。

我不知道ctags对VHDL的支持是否很弱,或者Taglist是否正在无效地读取ctags创建的文件。

我该如何解决这个问题? 是否有另一种解决方案可以使用ctags / taglist为vhdl创建更好的标记?

非常感谢。


我已根据您建议的原始.ctags文件为端口定义添加了'variable','signal'和:( in | out)。 我发现匹配那些也更方便

1
2
3
4
5
6
7
8
9
10
11
12
13
--langdef=vhdl
--langmap=vhdl:.vhd;.VHD
--regex-vhdl=/^[ \t]*signal[ \t]*([^ ]+)/\1/s,signals/i
--regex-vhdl=/^[ \t]*([^ ]+)[ \t]*:[ \t]*(in|out)/\1/p,ports/i
--regex-vhdl=/^[ \t]*variable[ \t]*([^ ]+)/\1/v,variable/i
--regex-vhdl=/^[ \t]*package[ \t]+([^ ]+) is/\1/d,package declarations/i
--regex-vhdl=/^[ \t]*package[ \t]+body[ \t]+([^ ]+) is/\1/b,package bodies/i        
--regex-vhdl=/^[ \t]*architecture[ \t]+([^ ]+) of/\1/a,architecture specifications/i
--regex-vhdl=/^[ \t]*entity[ \t]+([^ ]+) is/\1/e,entities/i                
--regex-vhdl=/^[ \t]*([^ \t:]+)[ \t]*:[ \t]*process[ \t]*\(/\1/p,processes/i
--regex-vhdl=/^[ \t]*function[ \t]+([a-z0-9_]+)/\1/f,functions/i  
--regex-vhdl=/^[ \t]*procedure[ \t]+([a-z0-9_]+)/\1/r,procedures/i
--regex-vhdl=/^[ \t]*type[ \t]+([^ ]+) is/\1/t,type declarations/i

如果你发现ctags支持不足的东西,可以通过在主目录中的.ctags文件中添加一系列声明来扩展它。 例如,对于VHDL,您可以使用此处的代码:

1
2
3
4
5
6
7
8
9
10
--langdef=vhdl
--langmap=vhdl:.vhd
--regex-vhdl=/^[ \t]*package[ \t]+([^ ]+) is/\1/d,package declarations/i
--regex-vhdl=/^[ \t]*package[ \t]+body[ \t]+([^ ]+) is/\1/b,package bodies/i
--regex-vhdl=/^[ \t]*architecture[ \t]+([^ ]+) of/\1/a,architecture specifications/i
--regex-vhdl=/^[ \t]*entity[ \t]+([^ ]+) is/\1/e,entities/i
--regex-vhdl=/^[ \t]*([^ \t:]+)[ \t]*:[ \t]*process[ \t]*\(/\1/p,processes/i
--regex-vhdl=/^[ \t]*function[ \t]+([a-z0-9_]+)/\1/f,functions/i
--regex-vhdl=/^[ \t]*procedure[ \t]+([a-z0-9_]+)/\1/r,procedures/i
--regex-vhdl=/^[ \t]*type[ \t]+([^ ]+) is/\1/t,type declarations/i


Ctags从根本上被打破,因为它没有考虑VHDL中的名称范围和重载。 只是不要使用它。

您可以在此博客文章中找到更多信息。