總有人問(wèn)我 Vim 中能不能查找,當(dāng)然能!而且是超級(jí)強(qiáng)的查找!這篇文章來(lái)詳細(xì)介紹 Vim 中查找相關(guān)的設(shè)置和使用方法。包括查找與替換、查找光標(biāo)所在詞、高亮前景/背景色、切換高亮狀態(tài)、大小寫(xiě)敏感查找等。
在normal模式下按下/
即可進(jìn)入查找模式,輸入要查找的字符串并按下回車(chē)。Vim會(huì)跳轉(zhuǎn)到第一個(gè)匹配。按下n
查找下一個(gè),按下N
查找上一個(gè)。
Vim查找支持正則表達(dá)式,例如/vim$
匹配行尾的'vim'
。需要查找特殊字符需要轉(zhuǎn)義,例如/vim\$
匹配'vim$'
。
注意查找回車(chē)應(yīng)當(dāng)用
\n
,而替換為回車(chē)應(yīng)當(dāng)用\r
(相當(dāng)于)。
在查找模式中加入\c
表示大小寫(xiě)不敏感查找,\C
表示大小寫(xiě)敏感查找。例如:
/foo\c
將會(huì)查找所有的'foo'
,'FOO'
,'Foo'
等字符串。
Vim 默認(rèn)采用大小寫(xiě)敏感的查找,為了方便我們常常將其配置為大小寫(xiě)不敏感:
' 設(shè)置默認(rèn)進(jìn)行大小寫(xiě)不敏感查找set ignorecase' 如果有一個(gè)大寫(xiě)字母,則切換到大小寫(xiě)敏感查找set smartcase
將上述設(shè)置粘貼到你的
~/.vimrc
,重新打開(kāi)Vim即可生效。
在normal模式下按下*
即可查找光標(biāo)所在單詞(word),要求每次出現(xiàn)的前后為空白字符或標(biāo)點(diǎn)符號(hào)。例如當(dāng)前為foo
,可以匹配foo bar
中的foo
,但不可匹配foobar
中的foo
。這在查找函數(shù)名、變量名時(shí)非常有用。
按下g*
即可查找光標(biāo)所在單詞的字符序列,每次出現(xiàn)前后字符無(wú)要求。即foo bar
和foobar
中的foo
均可被匹配到。
:s
(substitute)命令用來(lái)查找和替換字符串。語(yǔ)法如下:
:{作用范圍}s/{目標(biāo)}/{替換}/{替換標(biāo)志}
例如:%s/foo/bar/g
會(huì)在全局范圍(%
)查找foo
并替換為bar
,所有出現(xiàn)都會(huì)被替換(g
)。
作用范圍分為當(dāng)前行、全文、選區(qū)等等。
當(dāng)前行:
:s/foo/bar/g
全文:
:%s/foo/bar/g
選區(qū),在Visual模式下選擇區(qū)域后輸入:
,Vim即可自動(dòng)補(bǔ)全為 :'<,'>,'>
。
:'<,'>s/foo/bar/g,'>
2-11行:
:5,12s/foo/bar/g
當(dāng)前行.
與接下來(lái)兩行+2
:
:.,+2s/foo/bar/g
上文中命令結(jié)尾的g
即是替換標(biāo)志之一,表示全局global
替換(即替換目標(biāo)的所有出現(xiàn))。還有很多其他有用的替換標(biāo)志:
空替換標(biāo)志表示只替換從光標(biāo)位置開(kāi)始,目標(biāo)的第一次出現(xiàn):
:%s/foo/bar
i
表示大小寫(xiě)不敏感查找,I
表示大小寫(xiě)敏感:
:%s/foo/bar/i# 等效于模式中的\c(不敏感)或\C(敏感):%s/foo\c/bar
c
表示需要確認(rèn),例如全局查找'foo'
替換為'bar'
并且需要確認(rèn):
:%s/foo/bar/gc
回車(chē)后Vim會(huì)將光標(biāo)移動(dòng)到每一次'foo'
出現(xiàn)的位置,并提示
replace with bar (y/n/a/q/l/^E/^Y)?
按下y
表示替換,n
表示不替換,a
表示替換所有,q
表示退出查找模式,l
表示替換當(dāng)前位置并退出。^E
與^Y
是光標(biāo)移動(dòng)快捷鍵,參考: Vim中如何快速進(jìn)行光標(biāo)移動(dòng)。
如果你像我一樣覺(jué)得高亮的顏色不太舒服,也可以進(jìn)行設(shè)置:
highlight Search ctermbg=grey ctermfg=black
將上述配置粘貼到
~/.vimrc
,重新打開(kāi)vim即可生效。
上述配置指定Search結(jié)果的前景色(foreground)為黑色,背景色(background)為灰色。更多的CTERM顏色可以查閱:
其實(shí)上述命令禁用了所有高亮,正確的命令是:set nohlsearch
。下次搜索時(shí)需要:set hlsearch
再次啟動(dòng)搜索高亮。怎么能夠讓Vim查找/替換后自動(dòng)取消高亮,下次查找時(shí)再自動(dòng)開(kāi)啟呢?
' 當(dāng)光標(biāo)一段時(shí)間保持不動(dòng)了,就禁用高亮autocmd cursorhold * set nohlsearch' 當(dāng)輸入查找命令時(shí),再啟用高亮noremap n :set hlsearchcr>nnoremap N :set hlsearchcr>Nnoremap / :set hlsearch/ noremap ? :set hlsearchcr>?noremap * *:set hlsearchcr>
將上述配置粘貼到
~/.vimrc
,重新打開(kāi)vim即可生效。
轉(zhuǎn)載請(qǐng)注明來(lái)源: http://harttle.com/2016/08/08/vim-search-in-file.html
聯(lián)系客服