是否可以替换搜索结果中的某个部分?例如我目前
<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}。 `
答案 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