2010-06-21 42 views
8

每當我看到任何複雜的正則表達式時,我的眼睛就開始流水。是否有任何現有的解決方案,爲正則表達式中的不同類型的符號賦予不同的顏色?Vim中正則表達式的語法高亮

理想情況下,我希望對字面字符,轉義序列,類代碼,錨點,修飾符,lookahead等進行不同的突出顯示。顯然,語法在語言間略有不同,但稍後會對其進行處理。

如果這可以以某種方式與Vim爲使用正則表達式的任何語言所做的語法高亮並存,就可以獲得加分。

這是否存在某處,或者我應該在那裏做?

回答

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 
+2

+1:這是一個很好的做法。當你在本地Vim編寫函數時,不支持冗長的RE,但如果你想這樣做,你可以使用字符串連接來實現同樣的事情。 – DrAl 2010-06-22 07:09:25

2

Vim已經爲perl正則表達式添加了語法高亮。即使你不知道perl本身,你仍然可以在perl中編寫你的正則表達式(打開一個新的緩衝區,將文件類型設置爲perl並插入'/regex/'),正則表達式可以用於許多其他語言,如PHP,Javascript或Python使用PCRE庫或複製Perl語法的地方。

在vim腳本文件,你可以將下面的代碼行獲得語法高亮顯示正則表達式:

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

你可以直到你有工作在雙引號的正則表達式玩耍。

在某些語言中編寫正則表達式的語法高亮顯得非常困難,因爲正則表達式是在引用字符串內部編寫的(與Perl和Javascript不同,它們是語法的一部分)。爲了給你一個想法,syntax script for PHP確實在雙引號和單引號字符串中突出顯示了正則表達式,但突出顯示只是正則表達式的代碼比大多數語言的整個語法腳本長。