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

Ale*_*ira 6 vim vim-syntax-highlighting

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

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

更确切地说,这是我想要达到的输出: 在此输入图像描述

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

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

ryu*_*iro 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'
Run Code Online (Sandbox Code Playgroud)

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

有关更多信息,请参阅帮助

如果你想在没有结束标记字符的情况下完成区域(在这种情况下;),你可以使用me区域的结束参数上的match-end()选项,并使区域在下一个区域结束 - 开始标记.例:

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
Run Code Online (Sandbox Code Playgroud)

me=s-1部分表示"真实匹配结束于模式匹配开始位置左侧的一个字符".

  • 非常感谢。您是否知道我是否可以在结尾处不使用分隔字符(即,在下一项开始时停止突出显示前一项)?这不是完全必要的,但会是一个不错的额外选择。 (2认同)