提高语法匹配正则表达式的性能

时间:2015-01-05 19:26:55

标签: vim

我正在通过添加对自动折叠的支持来改进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处理每个文件的时间大大增加。

是否有人对如何改进此表达式以获得更好的性能有任何想法?

1 个答案:

答案 0 :(得分:2)

是的,积极的背后隐藏可能很慢。在最近的Vim 7.4版本中,您可以将搜索限制为4​​个字节(通过\@4<=),但我认为在这种情况下,最好删除单独的关键字定义,然后为区域的开始和结束着色通过matchgroup

syn region verilogFold matchgroup=verilogStatement start="\<task\>" end="\<endtask\>" transparent keepend fold

如果这不起作用,请尝试删除transparent属性;我不确定这是否适用于matchgroup,但我猜不是。