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

Vim 提高语法匹配正则表达式的性能,vim,Vim,我正在通过添加对自动折叠的支持来改进Verilog语法。 最初,我做了以下工作: syn region verilogFold start=“\”end=“\”透明keepend fold 但由于任务也用作语法关键字,因此未检测到折叠。 因此,为了避免匹配我现在使用的任务关键字: syn region verilogFold start=“\(^\s*task\)\@是的,正向查找可能会很慢。在最新的Vim 7.4版本中,您可以将搜索限制为4个字节(通过\@4查看一下使用\zs,:h/\zs。文

我正在通过添加对自动折叠的支持来改进Verilog语法。 最初,我做了以下工作:

syn region verilogFold start=“\”end=“\”透明keepend fold

但由于
任务
也用作
语法关键字
,因此未检测到折叠。 因此,为了避免匹配我现在使用的
任务
关键字:


syn region verilogFold start=“\(^\s*task\)\@是的,正向查找可能会很慢。在最新的Vim 7.4版本中,您可以将搜索限制为4个字节(通过
\@4查看一下使用
\zs
:h/\zs
。文档中提到在atom文档后面的积极查找中使用
\zs
提高速度,
:h/\@这是一个好主意,事实上速度更快。但显然,它并没有回避这样一个事实,即
任务
语法关键字
组的一部分,如n所示检测到o fold。只是为了确认我是否正确理解了解决方案:这需要我从verilogStatement关键字列表中删除
task
endtask
。我试图扩展现有的
syntax/verilog.vim
,而不通过在语法文件中读取来直接修改它。是否可以删除indi组中的单个关键字?使用
matchgroup
可以将所有旧的
verilogStatement
关键字复制回我的语法文件,因为现在它有了正确的突出显示。遗憾的是,语法关键字没有什么比
-=
更好的了。
syn region verilogFold matchgroup=verilogStatement start="\<task\>" end="\<endtask\>" transparent keepend fold