簡體   English   中英

如何通過首先“測試”或“預覽”搜索部分來有效地搜索和替換Vim?

[英]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/來搜索和替換。

但這種方法有兩個很大的局限性:

  1. 將我在/ mode中創建的正則表達式復制並粘貼到s/ mode是一件麻煩事。
  2. 我無法在正則表達式中預覽匹配的組(即() )或在/使用魔術模式\\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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM