代码之家  ›  专栏  ›  技术社区  ›  Ben Gartner

Vim中正则表达式的语法高亮显示

  •  8
  • Ben Gartner  · 技术社区  · 14 年前

    每当我看到任何复杂的正则表达式时,我的眼睛都会流泪。有没有给正则表达式中不同类型的符号赋予不同颜色的现有解决方案?

    理想情况下,我希望文字字符、转义序列、类代码、锚点、修饰符、lookaheads等的高亮显示有所不同。显然,不同语言的语法略有不同,但这是一个有待以后处理的问题。

    如果这能以某种方式与语法高亮显示Vim对使用regex的任何语言都有好处的话。

    这是存在的地方,还是我应该在那里做它?

    3 回复  |  直到 12 年前
        1
  •  6
  •   Community Mr_and_Mrs_D    7 年前

    正则表达式可能不会在语法上突出显示,但您可以通过其他方法使它们更具可读性。

    有些语言允许您跨多行中断正则表达式(perl、C#、Javascript)。一旦你这样做了,你可以格式化它,使它更可读的普通眼睛。 Here's an example of what I mean .

    您也可以使用 advanced (?x) syntax explained here 在某些语言中。举个例子:

    (?x:          # Find word-looking things without vowels, if they contain an "s"
       \b                       # word boundary
       [^b-df-hj-np-tv-z]*      # nonvowels only (zero or more)
       s                        # there must be an "s"
       [^b-df-hj-np-tv-z]*      # nonvowels only (zero or more)
       \b                       # word boundary
    )
    

    编辑

    作为 Al 指出,如果其他所有操作都失败,也可以使用字符串连接。举个例子:

    regex = ""          # Find word-looking things without vowels, if they contain an "s"
       + "\b"                       # word boundary
       + "[^b-df-hj-np-tv-z]*"      # nonvowels only (zero or more)
       + "s"                        # there must be an "s"
       + "[^b-df-hj-np-tv-z]*"      # nonvowels only (zero or more)
       + "\b";                      # word boundary
    
        3
  •  2
  •   too much php    14 年前

    Vim已经为perl正则表达式提供了语法高亮显示。即使您不了解perl本身,也可以用perl编写regex(打开一个新的缓冲区,将文件类型设置为 perl 并插入' /regex/

    在vimscript文件中,可以插入以下代码行以获得regex的语法高亮显示:

    let testvar =~ "\(foo\|bar\)"
    

    你可以用双引号来使用regex,直到它工作为止。

    在某些语言中为regex编写语法高亮显示非常困难,因为regex是在带引号的字符串中编写的(与Perl和Javascript不同,它们是语法的一部分)。给你一个主意,这个 syntax script for PHP 在双引号和单引号字符串中突出显示regex,但是要突出显示的代码 只有正则表达式 比大多数语言的整个语法脚本都长。