我正在尝试创建一个基于正则表达式的语法突出显示规则,该规则结合了 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/