我正在尝试调整vim中突出显示的重组文本语法。我已经尝试了几个vim正则表达式来突出显示以下两个示例,但是我无法这样做。如果我使用搜索/突出显示功能,则下面所有的正则表达式都可以完成此工作,但是对于荧光笔(同步匹配),则无法正常工作。也许我需要将syn match更改为其他内容?
这是我在第一个文件中查看的文本示例:
.. item:: This is the title I want to highlight
there is some text here which I do not care
.. item-matrix:: This is the title I want to highlight
:source: XX
:target: YY
与文本匹配的正则表达式:
[.+].*[:+] \zs.*
\(.. .*:: \)\zs.*
将其与同义词匹配时不起作用(.vim):
syn match rstHeading /[.+].*[:+] \zs.*/
我知道我已经接近了,因为上面的示例匹配
..:: This is highlighted as rstHeading
答案 0 :(得分:1)
与现有语法脚本(此处为$VIMRUNTIME/syntax/rst.vim
)集成时,您需要考虑现有语法组。 :syn list
显示所有活动的组,但是安装SyntaxAttr.vim - Show syntax highlighting attributes of character under cursor插件更容易。 (我维持着extended fork。)
在您的示例标题上,我看到.. item::
部分与rstExplicitMarkup
匹配,其余部分(您要突出显示的部分)与rstExDirective
匹配。
假设您要与这些语言集成(而不是完全覆盖),则需要在后者中包含 语法组。可以通过containedin=rstExDirective
完成。
另一个陷阱是\zs
限制了突出显示,但是内部仍然匹配整个文本。结合语法突出显示,这意味着现有的rstExplicitMarkup
会阻止您的模式匹配。如果改用正向后看(:help /\@<=
),它将起作用:
syn match rstHeading /\%([.+].*[:+] \)\@<=.*/ containedin=rstExDirective
当然,要真正看到任何突出显示,您还需要定义突出显示组或将其链接到新的语法组:
hi link rstHeading Title