提高语法匹配正则表达式的性能
Improving performance of syntax match regular expression
我正在通过添加对自动折叠的支持来改进 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 大幅增加。
对于如何改进此表达式以获得更好的性能,有没有人有任何想法?
是的,正面回顾 可能会很慢。在最近的 Vim 7.4 版本中,您可以将搜索限制为 4 个字节(通过 \@4<=
),但我认为在这种情况下,最好删除单独的关键字定义并为区域开始和结束着色通过 matchgroup
:
syn region verilogFold matchgroup=verilogStatement start="\<task\>" end="\<endtask\>" transparent keepend fold
如果这不起作用,请尝试删除 transparent
属性;我不确定这是否适用于 matchgroup
,但我想不是。
我正在通过添加对自动折叠的支持来改进 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 大幅增加。
对于如何改进此表达式以获得更好的性能,有没有人有任何想法?
是的,正面回顾 可能会很慢。在最近的 Vim 7.4 版本中,您可以将搜索限制为 4 个字节(通过 \@4<=
),但我认为在这种情况下,最好删除单独的关键字定义并为区域开始和结束着色通过 matchgroup
:
syn region verilogFold matchgroup=verilogStatement start="\<task\>" end="\<endtask\>" transparent keepend fold
如果这不起作用,请尝试删除 transparent
属性;我不确定这是否适用于 matchgroup
,但我想不是。