每当我看到任何复杂的正则表达式时,我的眼睛都会流泪。是否有任何现有的解决方案可以为正则表达式中的不同类型的符号赋予不同的颜色?
理想情况下,我希望对文字字符、转义序列、类代码、锚点、修饰符、前瞻等进行不同的突出显示。显然,不同语言的语法略有变化,但这是一个需要稍后处理的问题。
如果这可以以某种方式与 Vim 为使用正则表达式的任何语言所做的语法高亮共存,则可以加分。
这是否存在于某个地方,或者我应该在那里制作它?
每当我看到任何复杂的正则表达式时,我的眼睛都会流泪。是否有任何现有的解决方案可以为正则表达式中的不同类型的符号赋予不同的颜色?
理想情况下,我希望对文字字符、转义序列、类代码、锚点、修饰符、前瞻等进行不同的突出显示。显然,不同语言的语法略有变化,但这是一个需要稍后处理的问题。
如果这可以以某种方式与 Vim 为使用正则表达式的任何语言所做的语法高亮共存,则可以加分。
这是否存在于某个地方,或者我应该在那里制作它?
正则表达式可能没有语法高亮,但您可以考虑通过其他方式使它们更具可读性。
某些语言允许您跨多行拆分正则表达式(perl、C#、Javascript)。完成此操作后,您可以对其进行格式化,使其对普通人来说更具可读性。 这是我的意思的一个例子。
您还可以使用此处以某些语言解释的高级 (?x) 语法。这是一个例子:
(?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
Vim 已经为 perl 正则表达式提供了语法高亮。即使您不知道 perl 本身,您仍然可以在 perl 中编写您的正则表达式(打开一个新缓冲区,将文件类型设置为perl
并插入 ' /regex/
'),并且正则表达式可以在许多其他语言中工作,例如 PHP、Javascript 或 Python他们使用了 PCRE 库或复制了 Perl 的语法。
在 vimscript 文件中,您可以插入以下代码行以获得正则表达式的语法高亮:
let testvar =~ "\(foo\|bar\)"
您可以在双引号中使用正则表达式,直到它正常工作。
在某些语言中为正则表达式编写语法高亮是非常困难的,因为正则表达式是写在带引号的字符串中(不像 Perl 和 Javascript,它们是语法的一部分)。给你一个想法,这个PHP 的语法脚本确实在双引号和单引号字符串中突出显示正则表达式,但是只突出显示正则表达式的代码比大多数语言的整个语法脚本都要长。