使用VIM替換,重複使用部分搜尋模式

使用VIM替換,重複使用部分搜尋模式

我正在使用VIm並嘗試設定一個搜尋和替換命令來進行一些替換,在其中我可以重新使用作為搜尋字串一部分的正規表示式。

一個簡單的例子是我想要替換(10)為 的一行{10},其中 10 可以是任何數字。

我來了這麼遠

  .s/([0-9]*)/what here??/

這與我想要的部分完全匹配。

現在更換,我嘗試過

  .s/([0-9]*)/{\0}/

但是,這給出了輸出{(10)}

然後,我嘗試了

 .s/(\zs[0-9]*\ze)/{\0}/

然而,這給了我({10}),我也關閉了,但不是我想要的。

我想我需要一些其他類型的標記/反向引用來代替這個\0,但我不知道在哪裡看。那麼問題是,這可以在 vim 中完成嗎?

答案1

\0是整場比賽。要僅使用它的一部分,您需要像這樣設定它並使用 \1

.s/(\([0-9]*\))/{\1}/

您可以找到更詳細的說明這裡或在 vim 幫助中。

答案2

我最近繼承了一些遺留程式碼,我想替換所有出現的程式碼,例如:

print "xx"
print x,y
print 'xx'

logging.info("xy") 

或者

logging.info(x,y)

基於先前的答案為了希望有人能從中受益,我使用了以下命令,這將改變所有的情況:

%s/print\( .*\)/logging.info\(\1\)/g

如果你替換%.刪除/g你最終會得到

.s/print\( .*\)/logging.info\(\1\)

這將使您能夠查看每場比賽並選擇是否更改它。

答案3

讓您能夠查看每個匹配項的更好方法是在程式碼末尾添加“c”,而不是逐行查看

%s/print\( .*\)/logging.info\(\1\)/gc

相關內容