如何有一个 Vim 多行语法高亮子句?

How to have a Vim multiline syntax highlight clause?

我正在尝试为包含三种不同类型的列表元素(分别以 -、o 和 x 开头)的微型文本格式编写语法高亮模块,我想根据它们突出显示条目种类。对于单行来说很简单,我只需要使用 syn match myGroup /^\s\+- .\+/ 就可以了。

问题是,我一直在努力让没有列表标记的下一行与起始列表项行保持相同的颜色,但没有成功。我一直在尝试用语法区域来做,但我似乎无法理解它们是如何工作的。

更准确地说,这是我试图达到的输出:

如果需要对文件格式进行任何更改,使其成为easier/possible,我可以自由更改。

关于如何获得它的任何线索?

您可以按照这些思路尝试一下

syntax region Minus_Region start=/^\s\+-/ end=/;/
hi Minus_Region guifg='Yellow'

syntax region O_Region start=/^\s\+o/ end=/;/
hi O_Region guifg='Green'

syntax region X_Region start=/^\s\+x/ end=/;/
hi X_Region guifg='Gray'

无论涉及多少行,您都可以通过开始和结束来定义区域(在本例中为 ;)。

有关详细信息,请参阅帮助

如果你想在没有结束标记字符的情况下完成区域(在本例中为 ;),你可以使用结束参数上的匹配结束(me)选项来完成的区域,并让区域在下一个区域开始标记处结束。示例:

syntax region Minus_Region start=/^\s\+- / end=/^\s\+[-ox] /me=s-1

syntax region O_Region start=/^\s\+o /  end=/^\s\+[-ox] /me=s-1

syntax region X_Region start=/^\s\+x /  end=/^\s\+[-ox] /me=s-1

me=s-1部分表示"The real match ends at one character to the left of the start position of the pattern match"。