介紹 Vim 文字編輯器的各種關鍵字搜尋方法,並提供常用範例。
在 Vim 編輯器中若要搜尋檔案中的關鍵字,可以使用 /
(向後搜尋)或 ?
(向前搜尋),例如向後搜尋 GNU
這個關鍵字:
/GNU
向前搜尋 GNU
這個關鍵字:
?GNU
在使用 /
或 ?
進行搜尋時,如果在檔案中有多個符合搜尋條件的地方,可以使用 n
(顯示下一個符合的位置)或 N
(顯示上一個符合的位置)來瀏覽所有符合搜尋條件的位置。
在搜尋的時候也可以使用正規表示法(regular expression),例如使用正規表示法向後搜尋數字(d
):
/d
以下是 Vim 中常用的正規表示法語法與範例:
語法 | 說明 | 範例 |
---|---|---|
* |
出現 0 次以上 | ab* 可匹配 a 、ab 、abb 等 |
+ |
出現 1 次以上 | ab+ 可匹配 ab 、abb 、abbb 等 |
= |
剛好出現 0 次或 1 次 | ab= 可匹配 a 或 ab |
{n} |
出現剛好 n 次 | ab{3} 可匹配 abbb |
{n,m} |
出現 n 次以上、不超過 m 次 | ab{2,4} 可匹配 abb 、abbb 、abbbb |
{n,} |
出現 n 次以上 | ab{2,} 可匹配 abb 、abbb 、abbbb 等 |
{,m} |
出現不超過 m 次 | ab{,3} 可匹配 a 、ab 、abb 、abbb |
[...] |
匹配中括號中任一字元 | [ab] 可匹配 a 或 b |
[^...] |
匹配任一中括號中以外的字元 | [^ab] 可匹配 a 或 b 以外的任意字元 |
^ |
匹配行首 | ^ab 可匹配出現在行首的 ab |
$ |
匹配行尾 | ab$ 可匹配出現在行尾的 ab |
< |
匹配字首 | <ab 可匹配 ab 開頭的字 |
> |
匹配字尾 | ab> 可匹配 ab 結尾的字 |
以下是一些中介字元(metacharacter):
語法 | 說明 |
---|---|
s |
匹配空白字元(space 與 tab) |
S |
匹配非空白字元 |
d |
匹配數字(等同 [0-9] ) |
D |
匹配非數字(等同 [^0-9] ) |
w |
匹配一般字元(等同 [0-9a-zA-Z_] ) |
W |
匹配非一般字元(等同 [^0-9a-zA-Z_] ) |
a |
匹配英文字母(等同 [a-zA-Z] ) |
A |
匹配非英文字母(等同 [^a-zA-Z] ) |
l |
匹配小寫字母(等同 [a-z] ) |
L |
匹配非小寫字母(等同 [^a-z] ) |
u |
匹配大寫字母(等同 [A-Z] ) |
U |
匹配非大寫字母(等同 [^A-Z] ) |
如果想要直接搜尋編輯器中游標所在位置上的字(word),可以直接按下 *
(向後搜尋)或 #
(向前搜尋),這樣 Vim 就會以游標所在的字作為關鍵字進行搜尋,不必用鍵盤輸入文字內容。
使用 *
或 #
進行搜尋時,同樣可以搭配 n
或 N
來瀏覽所有符合搜尋條件的位置。
如果不想以鍵盤輸入搜尋的文字,也可以先將文字以 v
選取之後,再以 y
複製起來,然後在按下 /
或 ?
進行搜尋時,輸入 Ctrl + r,再輸入 "
,這樣就會將剛剛複製的文字貼上去進行搜尋了。
Vim 會自動將過去搜尋過的關鍵字在儲存在歷史記錄中,當我們按下 /
或 ?
進行搜尋時,可以透過上下鍵瀏覽過去輸入的關鍵字,選擇要使用的搜尋關鍵字之後,也可以自行修改內容。
若歷史記錄中太多資料不好瀏覽,可以先輸入關鍵字的開頭幾個字母,再透過上下鍵尋找以該字母開頭的記錄,例如若要尋找過去使用過且由 a
開頭的關鍵字,就可以在按下 /
或 ?
之後,先輸入 a
,再透過上下鍵尋找。
若想要讓 Vim 在搜尋文字時不區分英文的大小寫(大小寫視為相同),可以設定 ignorecase
這個選項:
:set ignorecase
或是使用簡寫 ic
來設定也可以,作用等同於 ignorecase
:
:set ic
若要恢復區分英文大小寫的狀態,可以設定 noignorecase
這個選項:
:set noignorecase
或是使用簡寫 noic
來設定:
:set noic
若需要將檔案中所有的空白行刪除,可以使用以下指令:
:g/^$/d
這行指令會尋找完全空的行(^$
)並將其刪除,如果一行中有包含空白字元(space 或 tab),就會被保留下來。
如果希望將只包含空白字元的行也一起刪除,可以改用:
:g/^s*$/d