我想为vim创建一个新语法来突出显示注释。此语法使用#作为注释,但#(例如#{foo = 5})之后的大括号用于编程,不会以与注释相同的方式突出显示。我知道#comment的语法是
syntax match newComment '\v#.*$'
highlight link newComment Comment
那么如果我想要
,应该在正则表达式部分#foo=5
作为评论突出显示,但
#{foo=5}
被视为正常线?
答案 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
。