理解 Vim 的正则表达式引擎时遇到问题

Issues understanding Vim's regex engine

我正在尝试为隐藏功能设置脚本以美化 Python 中的字符串。到目前为止,这对于单个单词替换效果很好。但是现在我想用“∉”替换"not in"。我试过这个:

syntax match pyOperator "not in" conceal cchar=∉

但这与任何内容都不匹配,我不明白为什么不匹配。例如

x not in l 保持 x not in l

但是

syntax match pyOperator " not in " conceal cchar=∉

有效。但我想要以前的版本,因为这个

x not in lx∉l,隐藏空格。

为什么第二个版本有效而​​第一个版本无效,我怎样才能使它有效?

顺便说一句。我还尝试了其他变体,例如

syntax match pyOperator "\s\+not\s\+in\s\+'" conceal cchar=∉

那个也不行,这也让我很困惑,因为它是第二个版本的超集。

它被 syntax keyword pythonOperator and in is or not 定义阻止,它似乎优先于 syntax match(并且不允许重叠)。因此,我们将清除该定义,并将其替换为等效的 syntax match 定义。

" ~/.vim/after/syntax/python.vim
syn clear pythonOperator
syn match pythonOperator /and\|is\|or\|not/
syn match pythonOperator /not in/ conceal cchar=∉
syn match pythonOperator /in/ conceal cchar=∈

我也把你的pyOperator改成了标准的pythonOperator;一个原因是它已经存在(对于 inandisornot,如上所示);另一个原因(来自:help 44.2):

By convention, each group name is prefixed by the filetype for the language being defined. [...] In a syntax file for "csh" scripts the name "cshType" would be used. Thus the prefix is equal to the value of 'filetype'.