2007年9月18日 星期二

Vim Patterns

在使用 Vim 的 Pattern 的時候,你應該會很納悶。 ( 至少我就很納悶 XD )原本的 \d , \w 好用的 (foo|bar) 跑哪去了?怎麼無法運作?

原來是 Vim 為了方便比對,所以要使用 Regular Expression 的時候,特殊字符你得加上一個 \ 才行用 RegExp 比對。

然而 Vim 提供多種模式,可讓你的 Pattern 不會長的太糟....

如果要用把 foo 或者 bar 換成 dog ,指令可能會這樣下

:%s/\(foo\|bar\)/dog/g

如果這樣太醜了。如果有讀 pattern.txt ,你會發現有所謂 magic , nomagic , very nomagic 之類的東西。\v 是 Very Magic , \V 是 very no magic ,別搞錯囉

利用 \V 我們可以將上述 Pattern 寫為

:%s/\v(foo|bar)/dog/g

是否乾淨很多呢?

以下附上 :h pattern 內的 Example:
Examples:
after: \v \m \M \V matches ~
'magic' 'nomagic'
$ $ $ \$ matches end-of-line
. . \. \. matches any character
* * \* \* any number of the previous atom
() \(\) \(\) \(\) grouping into an atom
| \| \| \| separating alternatives
\a \a \a \a alphabetic character
\\ \\ \\ \\ literal backslash
\. \. . . literal dot
\{ { { { literal '{'
a a a a literal 'a'

{only Vim supports \m, \M, \v and \V}