在 Vim 中,为什么搜索“/A\n\zsB”有效,但语法高亮“:syn match Statement 'A\n\zsB'”无效?

在 Vim 中,为什么搜索“/A\n\zsB”有效,但语法高亮“:syn match Statement 'A\n\zsB'”无效?

假设有以下文本文件:

A
B

或者换句话说,一个仅包含字符串的文件A\nB

让我们看看我是否可以匹配任何BA和换行符开头的字符。很简单。我可以使用/-search 成功完成此操作:/A\n\zsB.B现在突出显示。

但我真正想要做的是将语法突出显示应用于B。因此,我尝试了:syn match Statement 'A\n\zsB',但这没有任何效果。有人知道为什么吗?

(并且只是为了抢先提出建议,我可能没有正确打开语法突出显示::syn match Statement 'A\n\B' 按预期工作:AB改变颜色。)

答案1

这是有记录的行为。请参阅:help :syn-multi-line此处引用的内容:

When using a start pattern with an offset, the start of the match is not
allowed to start in a following line.  The highlighting can start in a
following line though.  Using the "\zs" item also requires that the start
of the match doesn't move to another line.

解决方案是指定突出显示的开始位置,而不是匹配的开始位置。例如:

:syn match Statement 'A\nB'hs=e-1

:help :syn-pattern-offset

相关内容