/正則:前向搜尋。:s/正則/替換/選項:當前行替換。常用選項 g(全行)、c(確認)。:%s/正則/替換/g:全檔案替換。| 元字元 | 說明 |
|---|---|
. | 任意單一字元 |
[abc] | 字元集合(支援範圍 [a-z0-9]) |
[^abc] | 排除字元集合 |
\d | 數字 [0-9] |
\D | 非數字 |
\x | 十六進位字元 [0-9A-Fa-f] |
\X | 非十六進位字元 |
\w | 單字字元 [0-9A-Za-z_] |
\W | 非單字字元 |
\t | Tab 字元 |
\s | 空白字元 [ \t] |
\S | 非空白字元 |
需匹配字面符號(* . / \ [)時,前加 \ 轉義(如 \*、\.、\\)。
| 元字元 | 說明 |
|---|---|
* | 0 次或多次 |
\+ | 1 次或多次 |
\? | 0 次或 1 次 |
\{n,m} | n 到 m 次 |
\{n} | 恰好 n 次 |
\{n,} | 至少 n 次 |
\{,m} | 至多 m 次 |
| 符號 | 說明 |
|---|---|
^ | 行首 |
$ | 行尾 |
\< | 單字開頭 |
\> | 單字結尾 |
/char\s\+[A-Za-z_]\w*; " 查找 char 開頭的變數宣告
/\d\d:\d\d:\d\d " 查找 HH:MM:SS 時間格式
:g/^\s*$/d " 刪除純空白行
:s/\<four\>/4/g " 單字 four 替換為 4(fourteen 不受影響)
用 \( \) 括起子模式,替換端用 \1 \2 回參。
/\(a\+\)[^a]\+\1 " 找出首尾 a 數量相同的字串(如 aabbbaa)
:s/\(http:\/\/[-a-z\._~%\/]\+\)/\<a href="\1"\>\1\<\/a\>/g " URL 自動轉超連結
:s/\(\w\+\)\s\+\(\w\+\)/\2\t\1/g " 交換兩欄位順序
格式::s/正則/\=函數式。函數式中可用 submatch(n) 取得第 n 組捕獲,submatch(0) 為整個匹配。
:%s/\<id\>/\=line(".")/g " 將每行 id 替換為行號
:%s/^\<\w\+\>/\=(line(".")-10).". ".submatch(1)/g " 第 11 行 word → 1. word
| Vim | Perl | 含義 |
|---|---|---|
\+ | + | 1 次或多次 |
\? | ? | 0 或 1 次 |
\{n,m} | {n,m} | n 到 m 次 |
\( \) | ( ) | 分組捕獲 |
:%s/.*src="\([^"]*\)"[^>]*>/[img]\1[/img]/g
將 HTML <img src="gu.jpg"> 轉為 [img]gu.jpg[/img]。
解析:\([^"]*\) 捕獲非引號字串作為 \1,替換端引用。
熟練 Vim 正則,讓文字編輯如神助。