Linux

Vim 文字搜尋功能使用教學與範例

介紹 Vim 文字編輯器的各種關鍵字搜尋方法,並提供常用範例。

基本文字搜尋

在 Vim 編輯器中若要搜尋檔案中的關鍵字,可以使用 /(向後搜尋)或 ?(向前搜尋),例如向後搜尋 GNU 這個關鍵字:

/GNU
向後搜尋 GNU

向前搜尋 GNU 這個關鍵字:

?GNU
向前搜尋 GNU

在使用 /? 進行搜尋時,如果在檔案中有多個符合搜尋條件的地方,可以使用 n(顯示下一個符合的位置)或 N(顯示上一個符合的位置)來瀏覽所有符合搜尋條件的位置。

正規表示法搜尋

在搜尋的時候也可以使用正規表示法(regular expression),例如使用正規表示法向後搜尋數字(d):

/d
以正規表示法向後搜尋數字

以下是 Vim 中常用的正規表示法語法與範例:

語法 說明 範例
* 出現 0 次以上 ab* 可匹配 aababb
+ 出現 1 次以上 ab+ 可匹配 ababbabbb
= 剛好出現 0 次或 1 次 ab= 可匹配 aab
{n} 出現剛好 n 次 ab{3} 可匹配 abbb
{n,m} 出現 n 次以上、不超過 m 次 ab{2,4} 可匹配 abbabbbabbbb
{n,} 出現 n 次以上 ab{2,} 可匹配 abbabbbabbbb
{,m} 出現不超過 m 次 ab{,3} 可匹配 aababbabbb
[...] 匹配中括號中任一字元 [ab] 可匹配 ab
[^...] 匹配任一中括號中以外的字元 [^ab] 可匹配 ab 以外的任意字元
^ 匹配行首 ^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 就會以游標所在的字作為關鍵字進行搜尋,不必用鍵盤輸入文字內容。

使用 *# 進行搜尋時,同樣可以搭配 nN 來瀏覽所有符合搜尋條件的位置。

搜尋複製的文字

如果不想以鍵盤輸入搜尋的文字,也可以先將文字以 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

參考資料:Linuxize大家來學VIM

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago