替换搜索结果中的一个单词vim

时间:2016-12-15 13:45:15

标签: vim replace

是否可以替换搜索结果中的某个部分?例如我目前

<stringProp name="Argument.name">revision_no</stringProp> <stringProp name="Argument.value">1</stringProp>

我想在第二行用$ {var}替换数字(1),所有其他信息保持不变。

如果我输入

:%s/revision_no<.*\n.*value">[0-9]\*/revision_no<(all the characters...) value">${var}/g

我可能会丢失所有格式(涉及缩进)..

所以我想知道是否有办法来替换&#34; 1&#34;在整个搜索结果中使用$ {var}。 `

1 个答案:

答案 0 :(得分:4)

您可以捕获其他匹配文本(您要保留),然后在替换中引用该确切文本。 \(...\)捕获组:help /\(),\1在替换中引用它(第一个这样的组)。这是传统方式,它也适用于sed和许多其他基于正则表达式的工具:

:%s/\(revision_no<.*\n.*value">\)[0-9]\+/\1${var}/g

或者,在Vim中,您可以断言某些周围的东西匹配而不会在匹配中实际包含它。这种“剪切”是通过\zs(此处开始匹配)和\ze(此处结束匹配)完成的:

:%s/revision_no<.*\n.*value">\zs[0-9]\+/${var}/g