繁体   English   中英

了解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=∉

那个也不奏效,这也使我感到困惑,因为t是第二个版本的超集。

它被syntax keyword pythonOperator and in is or not阻止, syntax keyword pythonOperator and in is or not定义,这似乎优先于syntax match (并且不允许重叠)。 因此,我们将清除该定义,并用与之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 andisor not )。 另一个原因(来自:help 44.2 ):

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM