每當我看到任何複雜的正則表達式時,我的眼睛就開始流水。是否有任何現有的解決方案,爲正則表達式中的不同類型的符號賦予不同的顏色?Vim中正則表達式的語法高亮
理想情況下,我希望對字面字符,轉義序列,類代碼,錨點,修飾符,lookahead等進行不同的突出顯示。顯然,語法在語言間略有不同,但稍後會對其進行處理。
如果這可以以某種方式與Vim爲使用正則表達式的任何語言所做的語法高亮並存,就可以獲得加分。
這是否存在某處,或者我應該在那裏做?
每當我看到任何複雜的正則表達式時,我的眼睛就開始流水。是否有任何現有的解決方案,爲正則表達式中的不同類型的符號賦予不同的顏色?Vim中正則表達式的語法高亮
理想情況下,我希望對字面字符,轉義序列,類代碼,錨點,修飾符,lookahead等進行不同的突出顯示。顯然,語法在語言間略有不同,但稍後會對其進行處理。
如果這可以以某種方式與Vim爲使用正則表達式的任何語言所做的語法高亮並存,就可以獲得加分。
這是否存在某處,或者我應該在那裏做?
正則表達式可能不是語法高亮顯示的,但您可以通過其他方式查看它們的可讀性。
有些語言允許您在多行(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
此Vim插件,號稱做語法higlighting:
http://www.vim.org/scripts/script.php?script_id=1091
我不認爲這是你想要什麼,但我想這是適應供自己使用。
Vim已經爲perl正則表達式添加了語法高亮。即使你不知道perl本身,你仍然可以在perl中編寫你的正則表達式(打開一個新的緩衝區,將文件類型設置爲perl
並插入'/regex/
'),正則表達式可以用於許多其他語言,如PHP,Javascript或Python使用PCRE庫或複製Perl語法的地方。
在vim腳本文件,你可以將下面的代碼行獲得語法高亮顯示正則表達式:
let testvar =~ "\(foo\|bar\)"
你可以直到你有工作在雙引號的正則表達式玩耍。
在某些語言中編寫正則表達式的語法高亮顯得非常困難,因爲正則表達式是在引用字符串內部編寫的(與Perl和Javascript不同,它們是語法的一部分)。爲了給你一個想法,syntax script for PHP確實在雙引號和單引號字符串中突出顯示了正則表達式,但突出顯示只是正則表達式的代碼比大多數語言的整個語法腳本長。
+1:這是一個很好的做法。當你在本地Vim編寫函數時,不支持冗長的RE,但如果你想這樣做,你可以使用字符串連接來實現同樣的事情。 – DrAl 2010-06-22 07:09:25