排除vim语法高亮显示的模式

时间:2018-12-11 15:48:15

标签: regex vim vim-syntax-highlighting

我正在尝试调整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

1 个答案:

答案 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