在Vim中突出显示正则表达式的语法

时间:2010-06-21 22:43:44

标签: regex vim syntax-highlighting vim-syntax-highlighting

每当我看到任何复杂的正则表达式时,我的眼睛开始流水。是否有任何现有的解决方案可以为正则表达式中的不同类型的符号赋予不同的颜色?

理想情况下,我希望对文字字符,转义序列,类代码,锚点,修饰符,前瞻等进行不同的突出显示。显然,语法在不同语言之间略有不同,但这是稍后要处理的皱纹。

奖励分数,如果这可以某种方式与语法突出显示Vim与使用正则表达式的任何语言共存。

这是否存在于某个地方,或者我应该在那里制作吗?

3 个答案:

答案 0 :(得分:6)

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

某些语言允许您跨多行(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

答案 1 :(得分:3)

这个Vim插件声称要进行语法高亮显示:

http://www.vim.org/scripts/script.php?script_id=1091

我认为这不是你想要的,但我想它适合你自己的使用。

答案 2 :(得分:2)

Vim已经为perl正则表达式突出了语法。即使你不了解perl本身,你仍然可以在perl中编写你的正则表达式(打开一个新缓冲区,将文件类型设置为perl并插入“/regex/”)并且正则表达式将在许多其他语言,如PHP,Javascript或Python,他们使用PCRE库或复制Perl的语法。

在vimscript文件中,您可以插入以下代码行以获取正则表达式的语法高亮显示:

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

你可以在双引号中使用正则表达式,直到你有效。

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