3

我将 Vim 与 ctags 和 Taglist 插件一起使用。编辑 .vhd 文件时,标签很差(仅显示实体)。

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

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

非常感谢。

4

3 回答 3

4

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

--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
于 2013-08-26T03:08:12.963 回答
3

我根据您建议的原始 .ctags 文件为端口定义添加了“变量”、“信号”和 :(in|out)。我发现匹配那些也更方便

--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
于 2016-02-03T21:06:44.910 回答
0

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

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

于 2013-08-26T10:35:04.107 回答