Vim

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

  • April 26, 2018

我正在使用VIm並嘗試設置搜尋和替換命令來進行一些替換,在這些替換中我可以重新使用作為搜尋字元串一部分的正則表達式。

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

我來了這麼遠

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

這完全符合我想要的部分。

現在換了,我試過了

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

但是,這作為輸出{(10)}

然後,我嘗試了

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

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

我想我需要一些其他類型的標記/反向引用而不是 this \0,但我不知道在哪裡看。所以問題是,這可以在 vim 中完成嗎?如果可以,怎麼做?

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

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

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

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

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\)

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

引用自:https://unix.stackexchange.com/questions/35206