regex - 在语法高亮规则中组合 vim 先行和后行约束

标签 regex vim syntax-highlighting regex-lookarounds

我正在尝试创建一个基于正则表达式的语法突出显示规则,该规则结合了 lookahead and lookbehind匹配的限制。

但是,由于某种原因,我只能让它与某些角色一起使用。

例如,我可以使用以下方法匹配 %abc 中的 b:

syn match TestMatch /\vb(c)@=&(\%a)@<=b/
hi Purple ctermfg=92 guifg=#8700d7
hi!     link TestMatch     Purple

但是,当我尝试匹配 #abc 中的 b 时,它不起作用:

syn match TestMatch /\vb(c)@=&(#a)@<=b/

有人知道问题出在哪里吗?

最佳答案

事实证明,这里的问题是我的语法文件中的较早语句导致“#foo”匹配,因此已经分配了颜色:

runtime! syntax/markdown.vim

在该文件中,有一个语法规则:

syn region markdownH1 matchgroup=markdownH1Delimiter start="##\@!"      end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained

这也匹配诸如“#abc”之类的内容..

基于建议 here ,我可以通过指定我的规则包含在 markdown.vim 中定义的规则中来解决这个问题,即:

syn match TestMatch /\vb(c)@=&(#a)@<=b/ containedin=markdownH1

关于regex - 在语法高亮规则中组合 vim 先行和后行约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66658097/

相关文章:

windows - 如何让 GNU Unifont 或 Free Mono 在 gvim windows 上工作?

vim - 将定义的类型着色为类型

python - IPython 更改整个 session 的输入单元格语法突出显示逻辑

Java ArrayIndexOutOfBoundsException 仅指向一行

regex - 如何查找只包含一个特殊字符的字符串?

带有可选键/值对的 Python tokenize 句子

ruby - 是否有 ruby​​ 的 gsub 替代品可以在每次匹配时运行一个方法?

vim - 在 vim 中用换行符打开光标下的文件

syntax-highlighting - SyntaxHighlighter 不显示工具栏

javascript - 我怎样才能让 Vim 得到正确的 JS 缩进?