\s | 空白 | \a | [A-Za-z] |
\S | 非空白 | \l | 小寫字[a-z] |
\d | 數字, 也等於[0-9] | \u | 大寫字母[A-Z] |
\D | 非數字 | \_x | 以上所有與換行符號 |
\x | 16進位數 | \n | 換行 |
\o | 10進位數 | \r | |
\w | [0-9A-Za-z_] | \e | |
\h | [A-Za-z_] | \t | Tab |
Example:
(1) :%s/\s\+$// 將每行後面多餘的空白去掉 ($代表一行的尾巴)。
(2) :%s/^\n// 將空白行去掉,也就是一行的開頭就接著換行符號的行(^代表一行的開端) 。
(3) :%s#//.*## 將"//..." 這樣的註解刪除; 這邊原本是要寫":%s/\/\/.*//g", 但vi可以讓你把/換成#,這樣pattern 的/就不用寫成\/來簡略寫法並提昇pattern可讀性; 當然,其他pattern你也可以用如":%s#like#love#"。
(4) /\d\+\.\d\+ 尋找浮點數, 例如 2.99, 0.1.
(5) :10, 521s/\[\(\d\+\\)]/_reg_\1/g ,行10到行521,將例如[33]換成_reg_33
(6) /\w\+_i 尋找例如, test_i, a9_tck_i...
(7) :%s/\t/ /g 將TAB換成空白
^ | 一行的開始 |
$ | 一行的結尾 |
. | 任何字元 |
\_. | 任何字元與換行符號 |
\< | 一個單字的開頭字母, 例如moon的m |
\> | 一個單字的結束, 例如¨beach.¨的. |
\%23l | 第23行 |
\%<23l | 第23行之前,即是第1到第22行 |
\%>23l | 第23行之後, 即第24行到最後行 |
\%93c | 第93欄 (column) |
\%>93c | 第93欄之前 |
\%<93c | 第93欄之後 |
Example:
:exe '%s/\%' . col(".") .'c\w\+/lemon/' 在目前游標所在的欄全換成 lemon, 假設目前游標在第7欄, 這個命令就等於執行 "%s/\%7c\w\+/lemon/"。
Multi items:
* | match 0次或多次; 例如, .* 代表match任何字元除了換行符號; z*代表match 0個z到無限多個z |
\+ | match 至少1次 例如, a\+可match到"a", "aa", "aaa"...etc |
\= | match 0次或1次 例如,foo\= 可match到"fo" 與 "foo" |
\? | 跟\=一樣, 只是用?往回search時不能使用 |
\{n,m} | match n到m個 |
\{n} | match n 個 |
\{n,} | match 至少n個 |
\{,m} | match 0 到m個 |
\{} | 跟 * 一樣 |
\{-n,m} | non-greedy mode. match n 到 m個, 但match 到最少數目. 例如, I'm sooooooo in love with you 用 o\{-2,7}只會match到oo, 但用 o\{2,7}會match到ooooooo. |
\{-n,} | non-greedy. match 至少n個, 但是match最少. |
\{-,m} | non-greedy, match 0 到m, as few as possible. |
\{-} | match 0 到無限多個, as few as possible. |
Example:
(1) :%s#/\*\_.\{-}\*/##g 將 /*...*/註解拿掉, 包括/*與*/在不同行。
/\*代表/*, \_.代表任何字包括換行符號, \{-}代表match 0 到無限個但as few as possible, \*/代表 */; 如果你寫":%s#/\*\_.*\*/##g" ,也就是用greedy 的 * (match 0 到 無限多,as more as possible),那以下的內容:
/*
*comment a
*/
code a
/* comment b*/取代完後,會整個區塊連 "code a" 都被刪除。
沒有留言:
張貼留言