我正在通过添加对自动折叠的支持来改进Verilog语法。 最初我做了以下事情:
syn region verilogFold start="\<task\>" end="\<endtask\>" transparent keepend fold
但由于task
也用作syntax keyword
,因此未检测到折叠。
因此,要避免匹配我正在使用的task
关键字:
syn region verilogFold start="\(^\s*task\)\@<=\s\+\w\+" end="\<endtask\>" transparent keepend fold
不幸的是,这会导致vim处理每个文件的时间大大增加。
是否有人对如何改进此表达式以获得更好的性能有任何想法?
答案 0 :(得分:2)
是的,积极的背后隐藏可能很慢。在最近的Vim 7.4版本中,您可以将搜索限制为4个字节(通过\@4<=
),但我认为在这种情况下,最好删除单独的关键字定义,然后为区域的开始和结束着色通过matchgroup
:
syn region verilogFold matchgroup=verilogStatement start="\<task\>" end="\<endtask\>" transparent keepend fold
如果这不起作用,请尝试删除transparent
属性;我不确定这是否适用于matchgroup
,但我猜不是。