3

我正在尝试创建一个 vim 语法文件,并且我想匹配以下文本:

@[one two three four]

基本上,我想匹配oneandtwo作为两个单独的匹配,我不关心threeand four(或它们之后的任何东西)。我也不想@[在表达式的开头包含分隔符。

我尝试对区域执行此操作,如下所示:

syn region langParamOne matchgroup=langListStart start=/@\[/ end=/\s\|\]/
syn region langParamTwo matchgroup=langListStart start=/@\[\S\+\s\+/ end=/\s\|\]/

不幸的是,这不仅看起来很乱,而且 vim 只会匹配其中一个区域,因为一个包含另一个。

如何为此语法设置匹配,但不包括@[匹配中的开头?

4

1 回答 1

1

这个怎么样:

syn region langParam matchgroup=langListStart start=/@\[/ end=/\]/ contains=langParamOne,langParamTwo
syn match langParamOne /\(@\[\)\@<=\S\+/ contained
syn match langParamTwo /\(@\[\S\+\s\)\@<=\S\+/ contained
于 2012-12-28T07:35:12.880 回答