在vim匹配中创建新语法#而不是#{

时间:2014-01-22 23:45:19

标签: regex vim syntax

我想为vim创建一个新语法来突出显示注释。此语法使用#作为注释,但#(例如#{foo = 5})之后的大括号用于编程,不会以与注释相同的方式突出显示。我知道#comment的语法是

syntax match newComment '\v#.*$'
highlight link newComment Comment

那么如果我想要

,应该在正则表达式部分
#foo=5

作为评论突出显示,但

#{foo=5}

被视为正常线?

2 个答案:

答案 0 :(得分:3)

正如你所说的要求,@ Conner的答案很有效。如果是该行的最后一个字符,则不匹配,这可能是您想要的,也可能不是。

如果你确实希望尾随匹配,或者你后来改变主意并决定# {bar}(注意空格)也应该是正常的,那么我建议使用负,零宽度\@!模式:

:syn match newComment '#{\@!.*'

如果您愿意,可以将{替换为\(\s*{\),或者如果您想为vim省去后续参考的麻烦,请使用\%(\s*{\)。如果您更喜欢使用\v,那么它看起来像是

:syn match newComment '\v#%(\s*\{)@!.*'

与使用\v一样长(计算\v)。

答案 1 :(得分:2)

您可以确保模式匹配中的#不会立即跟{。而不是\v#.*$使用\v#[^{].*$。请参阅:help pattern.txt|1053