Vim:为什么这个高亮定义抵消了另一个?
Vim: why is this highlight definition neutralizing the other?
我构建了以下突出显示定义(感谢 问题中的回答):
" #a6e22e
syntax match tagFunctionDefinition "\v\<"
syntax match tagFunctionDefinition "\v\>"
syntax match tagFunctionDefinition "\v/"
hi def link tagFunctionDefinition Function
" #f6266e
syntax match tagOperator "\v\<\/?\zs\w+\ze\/?>"
hi def link tagOperator Operator
首先是高亮文件中的<
>
和/
。第二个突出显示 <
>
s.
之间的字符
出于某种原因,第一个突出显示定义中和了第二个(如果我注释掉第一个,则第二个有效)。
可能是什么原因?
(我试过调换他们的位置,但什么也没做。)
语法突出显示有点不同。特别是, \zs
/ \ze
部分会掩盖这些位置的匹配项,即使它们不是(突出显示的)匹配项的一部分也是如此。这就是你所看到的。一种解决方案是退回到(较慢的)前瞻/后视,但我认为这里采用不同的解决方案更合适。
就目前而言,您的 tagFunctionDefinition
也将匹配独立的 <
或 >
字符;那可能不是你想要的。要仅在完整标记内匹配它们,请将这些语法定义为 contained
:
syntax match tagFunctionDefinition "\v\<" contained
syntax match tagFunctionDefinition "\v\>" contained
syntax match tagFunctionDefinition "\v/" contained
hi def link tagFunctionDefinition Function
然后,删除匹配限制 \zs
和 \ze
,以及上面的 contains
定义:
syntax match tagOperator "\v\</?\w+/?\>" contains=tagFunctionDefinition
hi def link tagOperator Operator
备注
- 你不需要在这里转义文字
/
(因为你选择的分隔符是"
);仅在 /
搜索中。
- 如果您的语法与 HTML / XML 相似,请查看相应的
$VIMRUNTIME/syntax/html.vim
语法脚本以获取灵感。
- 您对
\v
的关注是什么?在此特定示例中,它们使模式更加复杂!
我构建了以下突出显示定义(感谢
" #a6e22e
syntax match tagFunctionDefinition "\v\<"
syntax match tagFunctionDefinition "\v\>"
syntax match tagFunctionDefinition "\v/"
hi def link tagFunctionDefinition Function
" #f6266e
syntax match tagOperator "\v\<\/?\zs\w+\ze\/?>"
hi def link tagOperator Operator
首先是高亮文件中的<
>
和/
。第二个突出显示 <
>
s.
出于某种原因,第一个突出显示定义中和了第二个(如果我注释掉第一个,则第二个有效)。
可能是什么原因?
(我试过调换他们的位置,但什么也没做。)
语法突出显示有点不同。特别是, \zs
/ \ze
部分会掩盖这些位置的匹配项,即使它们不是(突出显示的)匹配项的一部分也是如此。这就是你所看到的。一种解决方案是退回到(较慢的)前瞻/后视,但我认为这里采用不同的解决方案更合适。
就目前而言,您的 tagFunctionDefinition
也将匹配独立的 <
或 >
字符;那可能不是你想要的。要仅在完整标记内匹配它们,请将这些语法定义为 contained
:
syntax match tagFunctionDefinition "\v\<" contained
syntax match tagFunctionDefinition "\v\>" contained
syntax match tagFunctionDefinition "\v/" contained
hi def link tagFunctionDefinition Function
然后,删除匹配限制 \zs
和 \ze
,以及上面的 contains
定义:
syntax match tagOperator "\v\</?\w+/?\>" contains=tagFunctionDefinition
hi def link tagOperator Operator
备注
- 你不需要在这里转义文字
/
(因为你选择的分隔符是"
);仅在/
搜索中。 - 如果您的语法与 HTML / XML 相似,请查看相应的
$VIMRUNTIME/syntax/html.vim
语法脚本以获取灵感。 - 您对
\v
的关注是什么?在此特定示例中,它们使模式更加复杂!