代码之家  ›  专栏  ›  技术社区  ›  lo tolmencre

理解Vim的regex引擎的问题

  •  0
  • lo tolmencre  · 技术社区  · 6 年前

    我正在尝试为隐藏特性设置一个脚本,以美化Python中的字符串。到目前为止,这种方法对于单词替换很有效。但现在我想用“”替换“不在”。我试过这个:

    syntax match pyOperator "not in" conceal cchar=∉
    

    但这和任何东西都不匹配,我也不明白为什么不匹配。例如

    x not in l 停留 x不在l中

    syntax match pyOperator " not in " conceal cchar=∉
    

    x∉l ,隐藏空格。

    为什么第二个版本有效而第一个版本无效?我如何才能使其有效?

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

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

    这一点也不适用于所有的t,这也让我困惑,因为t是第二个版本的超集。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Amadan    6 年前

    它正在被 syntax keyword pythonOperator and in is or not 定义,似乎优先于 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

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