regex - 排除 vim 语法高亮的模式
问题描述
我正在尝试调整 vim 中的 reStructured 文本语法突出显示。我已经尝试了几个 vim 正则表达式来获得以下两个示例的突出显示,但我做不到。如果我使用所有正则表达式下面的搜索/突出显示功能来完成这项工作,但对于荧光笔(同步匹配)它不起作用。也许我需要将同步匹配更改为其他内容?
这是我在 rst 文件中查看的文本示例:
.. 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 时会更容易 - 在光标插件下显示字符的语法突出显示属性。(我维护一个扩展的叉子。)
在您的示例标题中,我看到该.. item::
部分与 匹配rstExplicitMarkup
,其余部分(您要突出显示的内容)由匹配rstExDirective
。
假设您想与这些集成(而不是完全覆盖),您需要将语法组包含在后者中。这可以通过containedin=rstExDirective
.
另一个陷阱是\zs
限制了突出显示,但在内部仍然匹配整个文本。结合语法高亮显示,这意味着现有的会rstExplicitMarkup
阻止您的模式匹配。如果您使用积极的后视( :help /\@<=
) 代替,它将起作用:
syn match rstHeading /\%([.+].*[:+] \)\@<=.*/ containedin=rstExDirective
当然,要真正看到任何突出显示,您还需要定义或链接一个突出显示组到您的新语法组:
hi link rstHeading Title
推荐阅读
- r - 程序不要求用户输入
- android - android studio 中的 java.lang.SecurityException
- python - 如何在 python 电报机器人上存储/打印多个回调值?
- python - Python:某些 Intellisense 不适用于 VS Code
- python - 如何从 DataFrame 列表中删除 DataFrame?
- apache - Apache 服务器不显示正确的网站
- registration - icp注册pcl库
- android - 有没有办法在 android Jetpack Compose 中自定义 LazyRow 拖动或滚动行为?
- node.js - 收到此错误 npm ERR!在 build:dev 脚本中失败
- c - 是否允许使用相同的静态 void 函数在 c 中使用多个线程?