排除 vim 语法突出显示的模式
Excluding the pattern for vim syntax highlighting
我正在尝试调整 vim 中的重组文本语法突出显示。我已经尝试了几个 vim 正则表达式来突出显示以下两个示例,但我做不到。如果我使用 search/highlight 函数,所有下面的正则表达式都可以完成这项工作,但对于荧光笔(syn 匹配)它不起作用。也许我需要将同步匹配更改为其他内容?
这是我在第一个文件中查看的文本示例:
.. 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
与现有语法脚本(此处:$VIMRUNTIME/syntax/rst.vim
)集成时,您需要考虑现有语法组。 :syn list
显示所有活动组,但安装 SyntaxAttr.vim - Show syntax highlighting attributes of character under cursor plugin. (I maintain an extended fork 后更容易。)
在您的示例标题中,我看到 .. item::
部分与 rstExplicitMarkup
匹配,其余部分(您要突出显示的内容)与 rstExDirective
匹配。
假设您想要集成(而不是完全覆盖)这些,您需要将语法组 contained 包含在后者中。这可以通过 containedin=rstExDirective
.
完成
另一个陷阱是 \zs
限制了突出显示,但在内部仍然匹配整个文本。结合语法突出显示,这意味着现有的 rstExplicitMarkup
会阻止匹配您的模式。如果你使用 positive lookbehind (:help /\@<=
),它将起作用:
syn match rstHeading /\%([.+].*[:+] \)\@<=.*/ containedin=rstExDirective
当然,要真正看到任何突出显示,您还需要定义或link一个突出显示组到您的新语法组:
hi link rstHeading Title
我正在尝试调整 vim 中的重组文本语法突出显示。我已经尝试了几个 vim 正则表达式来突出显示以下两个示例,但我做不到。如果我使用 search/highlight 函数,所有下面的正则表达式都可以完成这项工作,但对于荧光笔(syn 匹配)它不起作用。也许我需要将同步匹配更改为其他内容?
这是我在第一个文件中查看的文本示例:
.. 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
与现有语法脚本(此处:$VIMRUNTIME/syntax/rst.vim
)集成时,您需要考虑现有语法组。 :syn list
显示所有活动组,但安装 SyntaxAttr.vim - Show syntax highlighting attributes of character under cursor plugin. (I maintain an extended fork 后更容易。)
在您的示例标题中,我看到 .. item::
部分与 rstExplicitMarkup
匹配,其余部分(您要突出显示的内容)与 rstExDirective
匹配。
假设您想要集成(而不是完全覆盖)这些,您需要将语法组 contained 包含在后者中。这可以通过 containedin=rstExDirective
.
另一个陷阱是 \zs
限制了突出显示,但在内部仍然匹配整个文本。结合语法突出显示,这意味着现有的 rstExplicitMarkup
会阻止匹配您的模式。如果你使用 positive lookbehind (:help /\@<=
),它将起作用:
syn match rstHeading /\%([.+].*[:+] \)\@<=.*/ containedin=rstExDirective
当然,要真正看到任何突出显示,您还需要定义或link一个突出显示组到您的新语法组:
hi link rstHeading Title