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

时间:2015-11-11 13:32:49

标签: vim vim-syntax-highlighting

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

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

更确切地说,这是我想要达到的输出: enter image description here

如果文件格式需要进行任何更改以便更容易/可能,我可以自由更改它。

我怎么能得到它的任何线索?

1 个答案:

答案 0 :(得分:7)

您可以尝试这些方面的内容

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部分表示“真正的匹配在模式匹配的起始位置左侧的一个字符处结束”。