以下语法规则:
" #f6266e
syntax match tagOperator "\v\<\/?\w+\s*[^>]*\>" contains=tagFunction,tagFunctionDefinition
hi def link tagOperator Operator
" #a6e22e
syntax match tagFunctionDefinition "\v\<" contained
syntax match tagFunctionDefinition "\v\>" contained
syntax match tagFunctionDefinition "\v/" contained
hi def link tagFunctionDefinition Function
产生这个:
正如你所看到的HTML属性的名称将突出显示的HTML标记(each
,onsubmit
)。所以我添加了一个语法来解决这个问题(将它们变成蓝色):
" #66d9ef
syn keyword tagFunction var this
syn match tagFunction "/\v\<\/?\w+\s+\w+\/?>" contained
hi def link tagFunction Define
但是什么也没发生,颜色保持不变。我什至用过contains
,contained
所以我不确定是什么问题。正tagFunction
则表达式错了吗?
您的图案与开始/
(以及转义第二/
为\/
,这是没有必要的); 您可能忘记了从搜索历史中进行复制时将其删除:
syn match tagFunction "\v\<\/?\w+\s+\w+/?>" contained
您可以通过首先拉动模式yi"
,然后将其分配给搜索寄存器来轻松地验证模式:let @/ = @@
。n
然后,该命令将跳至下一个匹配项,并(带有:set hlsearch
)突出显示所有匹配项。
请注意,您的tagOperator
模式更通用,包括(由于[^>]*
部分)任何tagFunction
部分。这种歧义很危险,因为现在正确的匹配取决于这两个:syntax
命令的顺序。在这种情况下,我认为您可以在中创建一个tagAttribute
contains tagOperator
,并大致定义如下:
:syn match tagAttribute "\w\+={[^}]*}" contained
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句