次の 3 セットのハイライト グループと構文の一致を検討してください。
hi Foo ctermfg=black ctermbg=red guifg=black guibg=red
hi Filler ctermfg=black ctermbg=green guifg=black guibg=green
hi Bar ctermfg=black ctermbg=blue guifg=black guibg=blue
syn match Foo "foo" nextgroup=Filler
syn match Filler "\_s*" nextgroup=Bar contained
syn match Bar "bar" contained
hi Baz ctermfg=black ctermbg=cyan guifg=black guibg=cyan
hi Qux ctermfg=black ctermbg=yellow guifg=black guibg=yellow
syn match Baz "baz\_s*" nextgroup=Qux
syn match Qux "qux" contained
hi Abc ctermfg=black ctermbg=magenta guifg=black guibg=magenta
hi Xyz ctermfg=black ctermbg=white guifg=black guibg=white
syn match Abc "abc" nextgroup=Xyz skipwhite skipnl
syn match Xyz "xyz" contained
Filler
;の後にBar
のみ一致します。Foo
同様に、Qux
の後のみBaz
、およびXyz
の後のみAbc
。次の例では:set list
、明確にするために、 とが末尾に空白がない限り一致しない方法Filler
を示しています。Bar
Foo
Foo
このBaz
Qux
例では、 が改行に一致することを検証していますが、が と に分割されている\_s
場合、これが機能しないのはなぜですか? からのこの引用は関連しています:Baz
Foo
Filler
:help syn-skipnl
「skipnl」が存在する場合、次の行で nextgroup と一致する場合があります。これは、現在のアイテムが現在の行の最後で終了する場合にのみ発生します! 「skipnl」が存在しない場合、nextgroup は同じ行の現在の項目の後にのみ見つかります。
Abc
Xyz
例は、完全に使用する場合と使用しskipwhite
skipnl
ない\_s
場合で、どちらの場合にも一致します。これはEOL
、「同じ行の現在の項目の後」とは見なされないということですか? 確かに、次の行の一部になることはできませんか? \_s
これは、通常の検索または同じ行\n
で文字が一致するという事実と矛盾しているようです。EOL