Vi/Vim 可以說是文本編輯中的一代傳奇人物,直至現在,它仍然在高級程式員的武器庫中占有一席之地,每個 Linux 發行版默認都包含Vim ,而且即使你不是 Linux 系統用戶,你也可以安裝 Vim ,
為什么到現在還來講這款古老的軟體?因為它牛逼啊!它包含幾乎所有功能的輕量級鍵盤快捷鍵、內置運算式搜索,以及強大而又穩定的插件生態系統,就連其他現代文本編輯器功能,如漂亮的語法高亮,它也有,你會在不知不覺中愛上這款文本編輯神器,
回到主題,我們今天就來學習 Vim 中的文本搜索和替換功能,幫助你更好地使用 Vim 這款神器,如果你想學習更多 Vim 操作,可以在公眾號「良許Linux」后臺回復「資料」,有我整理的電子書和視頻,
演示檔案創建
為了更好的講解后續內容,我們首先需要準備一個演示檔案,在這里,我生成了一個包含系統上所有已安裝軟體包的文本檔案 PackageList.txt 來作為演示檔案,
cat PackageList.txt

現在,我們在 Vim 中打開這個文本檔案,之后,我們就在這個檔案里進行后續的操作演示,
vim PackageList.txt

Vim 搜索功能
在 Windows 下,很多軟體的搜索功能可以使用 ctrl+F 組合鍵調出搜索框,然后完成后續的搜索,但在 Vim 里,我們需要使用以下命令結構實作搜索功能:
?<search_string>
例如,我們想要在 PackageList.txt 檔案里搜索 python 這個關鍵詞,可以這樣操作:
?python

默認情況下,搜索會定位到一個離當前游標最近的一個匹配結果,如果我們想要轉到下一個/上一個搜索結果,請使用以下按鍵:
- n – 尋找下一個匹配結果
- N – 尋找上一個匹配結果
注意:在使用上述按鍵之前,請不要忘記按 Enter 鍵,否則,搜索詞將會被改變!

上面的只是 Vim 下搜索的基本功能,如果你認為這是它的全部搜索功能,那真是圖樣圖森破,接下來,我們來嘗試一下更強大的搜索功能,
先給出搜索格式:
/\<search_string>/>

這里,\< 表示字串開始,/> 表示字串結束,中間的就是需要搜索的字串運算式,
與前面的示例一樣,使用 n 或 N 來導航搜索結果,
中間的字串運算式,不僅支持直接輸入關鍵詞,還支持使用通配符,例如,我們要搜索以 python- 開頭的字串,可以使用 python* ,這里 * 表示匹配任意字符,
/\<python*/>

搜索結束后,Vim 會默認將游標放在匹配的關鍵詞的起始字符處,
不喜歡游標的默認定位?沒關系,Vim 允許我們更改游標定位的默認字符位置,
/python/e

這里,e 的作用是將游標定位到匹配關鍵詞的末尾字符,
不僅如此,使用以下命令模式,你還可以將游標定位在搜索結果的下方或上方,
/<search_string>/+2
or
/<search_string>/-3

你也可以從搜索匹配結果的開頭/結尾偏移游標,例如,以下命令將游標定位在開頭旁邊的3個字符處,
/<search_string>/s+3
/<search_string>/b+3



這里,s 表示開頭,+3 表示從開頭開始的第 3 個字符,b 也代表開始(begin),它的功能類似于 s ,從截圖中也可以看出,Vim 會自動將 b 翻譯為 s ,
如果有興趣從搜索匹配結果的末尾進行偏移,請使用 e (end),
/<search_string/e-2
下面是對文本檔案執行搜索的另一種很棒的方法,
:%s/<search_pattern>//gn

這條命令具體有啥高大上的作用?我們這里先賣個關子,請繼續往下讀,如果你想學習更多 Vim 操作,可以在公眾號「良許Linux」后臺回復「資料」,有我整理的電子書和視頻,
Vim 字串替換
查找和替換是任意一款文本編輯器的一組常見和必備功能,下面就來講解 Vim 中的字串替換功能,
Vim 使用以下命令結構實作替換功能,
:<range> s/<search_string>/<replace_string>/<modifier>
- range - 定義執行“查找和替換”函式的范圍,有兩個不同的值
- % - 對整個檔案執行
- < start _line > < end_line > - 在一組特定的行上面執行操作
- search_string - 需要替換的字串
- replace_string - 替換舊字串的新字串
- modifier - 確定替換行為,有幾個不同的值
- g - 全域替換
- gc - 在每次更換之前要求確認
- gn - 忽略替換功能并突出顯示查找結果,
例如,在 PackageList.txt 檔案里用 Python3 字串替換所有 python 字串,
:%s/python/Python3/g


簡單吧?我們再看看下面這條命令,
:%s/python/Python3/gc

可以看出來,它在底部詢問你是否要進行替換操作,這時,你可以選擇一些操作,那這幾個是代表什么意思呢?我們一個個來看,
- y - 允許執行更改,
- n - 禁止執行更改,
- a - 替換全部,
- q - 退出任務,
- l - 只需替換這種情況,然后,退出,
- ^E(Ctrl + E) - 向上滾動螢屏
- ^Y(Ctrl + Y) - 向下滾動螢屏
接下來,我們來試試范圍這一個域,其實,我們在前面的例子里,已經使用了 % 范圍(對整個檔案范圍),
如果我們不想在整個檔案范圍進行查找替換,如果我們只想在某幾個特定行進行這種操作,需要怎么做?我們可以采用類似于以下命令格式:
:200,250 s/python/Python3/g


執行完以上操作,Vim 會將第 200 行開始并在第 250 行結束的所有 python 替換為 Python3 ,
此功能不僅限于一個詞,還可以完成對多個關鍵詞的替換,它的命令格式如下:
:%s/<search_term_1>\|<search_term_2>\|<search_term_3>/<replace_string>/g
比如,讓我們想要將文本中所有 python 和 py 更改為 Python3 ,
:%s/python\|py/Python3/g


區分大小寫
本文前面提到的所有替換操作都是區分大小寫的,例如,Python,python ,PYTHON 等都是不同的,
如果你要忽略大小寫,可以在搜索字串后面加上一個 \c ,如下:
/<search_term>\c
:%s/<search_term>\c/<replace_term>/g


但這個設定是臨時性的,Vim 關閉之后就會失效,如果你想一勞永逸,也可以從 vimrc檔案 直接設定不區分大小寫,
set ignorecase

還有一個有趣的做法:智能大小寫模式,
set smartcase

ignorecase 將強制 Vim 忽略大小寫,但是,如果搜索關鍵詞中只要有大寫字母,smartcase 將使 Vim 再次變為區分大小寫,
注意:如果要啟用 smartcase,首先需要設定 ignorecase ,
結論
Vim 可以幫助你做很多事情,多加耐心地練習,相信你會越來越喜愛這款古老的神器,
看完的都是真愛,點個贊再走唄?您的「三連」就是良許持續創作的最大動力!
- 關注原創公眾號「良許Linux」,第一時間獲取最新Linux干貨!
- 公眾號后臺回復【資料】【面試】【簡歷】獲取精選一線大廠面試、自我提升、簡歷等資料,
- 關注我的博客:lxlinux.net
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/108824.html
標籤:Linux
