理解 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 l
到 x∉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
;一个原因是它已经存在(对于 in
、and
、is
、or
和 not
,如上所示);另一个原因(来自: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'.
我正在尝试为隐藏功能设置脚本以美化 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 l
到 x∉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
;一个原因是它已经存在(对于 in
、and
、is
、or
和 not
,如上所示);另一个原因(来自: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'.