以下语法规则:
" #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
正则表达式是错误的吗?
答案 0 :(得分:2)
您的模式以/
开头(并且还将第二个/
转义为\/
,这是不必要的);您可能忘记在从搜索历史中复制时删除它们:
syn match tagFunction "\v\<\/?\w+\s+\w+/?>" contained
您可以先轻触模式yi"
,然后将其分配给搜索注册:let @/ = @@
,轻松验证模式。然后n
命令将跳转到下一个匹配项(并:set hlsearch
)突出显示所有匹配项。
请注意,您的tagOperator
模式更为通用,并且包括(因为[^>]*
部分)任何tagFunction
部分。这种歧义是危险的,因为现在正确的匹配取决于两个:syntax
命令的顺序。在这种情况下,我认为您可以在tagAttribute
中创建一个tagOperator
,并将其大致定义为:
:syn match tagAttribute "\w\+={[^}]*}" contained