使用VIM进行替换,重用部分搜索模式


29

我正在使用VIm并尝试设置搜索和替换命令以进行一些替换,在这些替换中我可以重新使用属于搜索字符串的正则表达式。

一个简单的示例是我要替换(10)为的行{10},其中10可以是任何数字。

我走了这么远

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

完全符合我想要的部分。

现在更换,我尝试

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

但是,这给出了输出 {(10)}

然后,我尝试

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

但是,这给了我({10}),我也关闭了,但不是我想要的。

我想我需要其他某种标记/反向引用来代替\0,但是我不知道在哪里看。所以问题是,这可以在vim中完成吗?

Answers:


37

\0是整个比赛。要仅使用它的一部分,您需要像这样设置并使用\ 1

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

您可以在这里或在vim帮助中找到更详细的说明。


注意捕获的括号是反斜杠转义的。
兰德尔

0

我最近继承了一些旧代码,我想替换所有出现的代码,例如:

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

这样您就可以遍历每场比赛并选择是否更改。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.