Vim:匹配html个属性名
Vim: matching html attribute names
语法规则如下:
" #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
命令的顺序。在这种情况下,我认为你可以在tagOperator
中包含一个tagAttribute
,并大致这样定义它:
:syn match tagAttribute "\w\+={[^}]*}" contained
语法规则如下:
" #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
命令的顺序。在这种情况下,我认为你可以在tagOperator
中包含一个tagAttribute
,并大致这样定义它:
:syn match tagAttribute "\w\+={[^}]*}" contained