Vim中使用 < 和 > 分別表示單詞的開(kāi)頭和結(jié)尾,例如查找單詞 i 而不是字母 i ,在正常模式下,按下 / 啟動(dòng)搜索模式,輸入 <i> ,敲擊回車(chē)即可。
要查找當(dāng)前光標(biāo)覆蓋的單詞,敲擊 * ,Vim會(huì)自動(dòng)啟動(dòng)搜索模式,光標(biāo)移動(dòng)到該單詞下一個(gè)現(xiàn)身位置。
搜索當(dāng)前單詞并連續(xù)修改假定當(dāng)前光標(biāo)覆蓋的單詞為 foo,按下 * 鍵,Vim 會(huì)搜索并跳轉(zhuǎn)到下一個(gè) foo 的位置,按下 ciw 組合鍵,意思是 change inner word ,此時(shí) foo 會(huì)被刪除,在原位置輸入 bar ,然后按下 Escape 鍵。這就完成了一次搜索并修改,接下來(lái)按 n 鍵繼續(xù)搜索,如果還需要修改,則按下 . 鍵表示重復(fù)修改動(dòng)作,如此反復(fù)完成連續(xù)搜索與修改。
搜索連續(xù)重復(fù)單詞有時(shí)你可能會(huì)連續(xù)重復(fù)輸入同一個(gè)單詞而不自知,例如以下文本:
1 hello hello
2 world world
3 thank
4 thank
搜索模式:
(<w+>)\_s*1
以上搜索模式會(huì)匹配文本中的1-4行。在Vim中,使用 ( 和 ) 包括的部分視為一個(gè)原子,其中 (<w+>) 匹配一個(gè)單詞原子,s 匹配空格符和tab符, \_s 匹配空格符、tab符和換行符, \_s* 匹配0次或多次。
搜索A或B使用 | 表示或邏輯,例如 red|green|blue 匹配字符串(注意不是單詞)red或green或blue。
如果要將匹配的對(duì)象替換成新的字符串,可以使用 :%s/搜索正則/新字符串/g,例如將所有的red或green字符串替換為purple:
:%s/red|green/purple/g
替換所有單詞red或green為單詞purple:
:%s/<(red|green)>/purple/g
Vim具有搜索模式記憶,因此以上命令也可以拆解為兩步:
第一步:搜索單詞red或green:
/<(red|green)>
第二步:將搜索結(jié)果替換為purple:
:%s//purple/g
替換命令中搜索正則為空時(shí),Vim會(huì)直接使用最后一次使用過(guò)的搜索正則作為默認(rèn)表達(dá)式。
有時(shí)我們并不想替換結(jié)果,而是想要對(duì)結(jié)果做一些裝點(diǎn),那么可以使用 & 來(lái)引用搜索結(jié)果,例如以下示例會(huì)將文本中所有的單詞red或green添加上引號(hào):
:%s/<(red|green)>/"&"/g
或者使用分組 1, 2, 3 ... 來(lái)引用搜索結(jié)果:
:%s/<(red|green)>/"1"/g
搜索與替換:substitute 命令搜索一個(gè)字符串并將其替換為新字符串,以下為一些基本使用方法。
:%s/foo/bar/g
全文搜索每個(gè)foo并替換為bar。
:s/foo/bar/g
當(dāng)前行搜索每個(gè)foo并替換為bar。
:%s/foo/bar/gc
全文搜索每個(gè)foo并替換為bar,替換前需要確認(rèn)。
:%s/<foo>/bar/gc
全文搜索每個(gè)單詞foo并替換為bar,替換前需要確認(rèn)。
:%s/foo/bar/gci
全文搜索每個(gè)foo并替換為bar,替換前需要確認(rèn),大小寫(xiě)不敏感。
:%s/foo/bar/gcI
全文搜索每個(gè)foo并替換為bar,替換前需要確認(rèn),大小寫(xiě)敏感。
標(biāo)記g:表示全局搜索,對(duì)每一個(gè)匹配結(jié)果進(jìn)行操作,缺省標(biāo)記g,則只對(duì)第一個(gè)匹配結(jié)果進(jìn)行操作。
標(biāo)記c:表示操作前需要進(jìn)行確認(rèn)。
標(biāo)記i:表示大小寫(xiě)不敏感。
標(biāo)記I:表示大小寫(xiě)敏感。
搜索分組使用 ( 和 ) 包圍住表達(dá)式使其成為一個(gè)原子,并根據(jù)原子所處位置順序使用1,2,……來(lái)引用相應(yīng)的匹配結(jié)果。最常見(jiàn)的場(chǎng)景莫過(guò)于對(duì)調(diào)字符串位置,例如:
原文:
1. France VS Germany
命令:
:s/(France)(sVSs)(Germany)/321
結(jié)果:
1. Germany VS France
搜索A與B使用 & 表示與邏輯,例如搜索同時(shí)包含了 red 和 blue 的行。進(jìn)行與邏輯搜索時(shí),Vim按照由 & 分隔的表達(dá)式順序逐一匹配,因此如果開(kāi)啟了高亮匹配結(jié)果的功能,那么你看到高亮匹配的永遠(yuǎn)都是最后一個(gè)表達(dá)式的匹配結(jié)果。
/.*red&.*blue
反向肯定預(yù)查搜索使用 (expression1)@<=expression2 表示反向肯定預(yù)查搜索模式,其過(guò)程為首先搜索 @<= 右側(cè)的原子即 expression2,遇到匹配項(xiàng)后再檢查匹配結(jié)果左側(cè)是否滿足 expression1。例如以下命令會(huì)搜索多個(gè)冗余0的數(shù)字。
原文:
1.0 1.000 1.0100
命令:
(.d+)@<=0+>
結(jié)果:
匹配了1.000后兩個(gè)0,1.0100后兩個(gè)0。
參考一
參考二
參考三
網(wǎng)站名稱:[Vim]搜索模式(正則表達(dá)式)-創(chuàng)新互聯(lián)
文章起源:http://chinadenli.net/article38/ehppp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、網(wǎng)站制作、移動(dòng)網(wǎng)站建設(shè)、App開(kāi)發(fā)、動(dòng)態(tài)網(wǎng)站、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容