VHDL标签在使用ctags + taglist的vim中效率不高
Posted
技术标签:
【中文标题】VHDL标签在使用ctags + taglist的vim中效率不高【英文标题】:VHDL tags not efficient in vim with ctags+taglist 【发布时间】:2013-05-29 12:53:05 【问题描述】:我将 Vim 与 ctags 和 Taglist 插件一起使用。编辑.vhd文件时,标签很差(只显示实体)。
我不知道ctags对VHDL的支持是否很弱,或者Taglist是否没有有效地读取ctags创建的文件。
我该如何解决?是否有另一种解决方案可以使用 ctags/taglist 为 vhdl 创建更好的标签?
非常感谢。
【问题讨论】:
你可能想试试 Emacs,VHDL 模式非常先进。 iis.ee.ethz.ch/~zimmi/emacs/vhdl-mode.html 呃,我发现emacs很难学。我无法让简单的事情奏效,比如打开新标签。所以我放弃了它(即使我尝试了 VHDL 模式)。另外,快捷方式太多,编辑器也不是很好看……不过,感谢您提供的信息! 回想一下你从基于 GUI 的编辑器迁移到 vim 的时候,当时是不是很困难?但是一旦你习惯了它,你的工作效率就会提高。同样,Emacs 一开始可能很困难,但是一旦您了解了事物的工作方式,它就会变得直观。你只需要找到一个好的教程。你是第一个告诉我他们不想使用优秀的编辑器的人,因为它的外观。你知道 Emacs 也可以在终端中运行吗,不需要单独的丑陋窗口,也许它看起来就像 vim。对于 VHDL,您将永远不会使用任何其他编辑器。 确实,我最近从基于 GUI 的编辑器迁移到了 VIM。现在我的工作效率越来越高,我真的不愿意再改变了。我在 vim 中没有的 emacs 中有什么(除了当前的问题,我确信在某处有解决方案)? ***.com/questions/1430164/… 【参考方案1】:如果您发现 ctags 对某些内容的支持不足,您可以通过在您的主目录中的 .ctags 文件中添加一系列声明来扩展它。例如,对于 VHDL,您可以使用找到的代码 here:
--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
【讨论】:
完美,成功了!谢谢,尤其是 2 个月后。 没问题,我讨厌看到“使用 emacs”作为 vim 问题的答案。【参考方案2】:我已根据您建议的原始 .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
【讨论】:
【参考方案3】:Ctags 从根本上被破坏了,因为它没有考虑 VHDL 中名称的作用域和重载。只是不要使用它。
您可以找到更多信息in this blog post。
【讨论】:
这是您对我问题的回答:不要使用它吗?您本可以尝试提供一些有建设性的东西,而不是宣传自己的博客。以上是关于VHDL标签在使用ctags + taglist的vim中效率不高的主要内容,如果未能解决你的问题,请参考以下文章
在 vim 和 python virtualenv 中带有 taglist 的 ctags