使用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

相关内容