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



我正在尝试为隐藏功能设置一个脚本,以美化 Python 中的字符串。到目前为止,这对于单个单词替换工作正常。但现在我想用"∉"代替"不在"。我试过这个:

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+nots+ins+'" conceal cchar=∉

那个也不能全部工作,这也让我感到困惑,因为 t 是第二个版本的超集。

它被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(:

按照约定,每个组名都以所定义语言的文件类型为前缀。[...]在"csh"脚本的语法文件中,将使用名称"cshType"。 因此,前缀等于"文件类型"的值。

最新更新