[英]How to effectively search and replace in Vim by first “testing” or “preview” the search part?
有時我想使用s/search_for/replace_with/options
格式在Vim中搜索和替換,但search_for
部分變成了一個復雜的正則表達式,我第一次無法正確使用。
我在我的.vimrc
set incsearch hlsearch
,因此當我使用/search_for
格式進行搜索時,Vim會在我輸入時開始突出顯示。 這對於首次“測試”/“預覽”我的正則表達式非常有用。 然后,一旦我得到我想要的正則表達式,我就應用於s/
來搜索和替換。
但這種方法有兩個很大的局限性:
/
mode中創建的正則表達式復制並粘貼到s/
mode是一件麻煩事。 (
和)
)或在/
使用魔術模式\\v
。 那么你們如何嘗試在Vim中進行復雜的正則表達式搜索和替換呢?
使用/
在搜索模式下測試正則表達式,然后使用s//new_value/
。 當您沒有將任何內容傳遞給s
的搜索部分時,它會進行最近的搜索。
正如@Sam Brink所說,你可以使用<Cr>/
來粘貼搜索寄存器的內容,所以s/<Cr>//new_value/
也可以。 當您擁有復雜的搜索表達式時,這可能會更方便。
如前所述,您可以使用/your-regex-here/
練習搜索部分。 當它正常工作時,您可以使用s//replacement/
來使用最新的搜索。
完成一次之后,即使您從那時起進行了不同的搜索,也可以使用&
重復上一個s///
命令。 您還可以使用:&g
在當前行上全局替換。 並且您可以使用:.,$&g
來搜索此處( .
)和文件末尾( $
)之間的所有匹配,以及其他各種可能性。
當然,如果操作沒有按預期工作,您也可以撤消。
正如其他人所說,我通常使用s//replacement/
來替換,但你也可以使用<Cr>/
來粘貼搜索寄存器中的內容。 因此,您可以使用s/<Cr>//replacement/
<Cr>/
將粘貼您的搜索,您可以進行任何您想要的最后一分鍾更改。
<Cr>
插入光標所在的寄存器的內容
/
register包含最新的搜索詞
:registers
將顯示每個寄存器的內容,以便您可以看到可用的內容。
由於Neovim 0.1.7有增量(“實時”):替代功能。 (所以這只適用於Neovim!)
要啟用它,請設置incommand選項:
:set inccommand=split
它在這里宣布: https : //neovim.io/news/2016/11/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.