2016-12-15 77 views
0

是否可以替換搜索結果中的某個部分?比如我有目前替換搜索結果中的一個單詞vim

<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 

我可能會失去所有的格式(縮進參與)..

所以我想知道如果有一種方法只需更換「1」 $ {VAR}在整個搜索結果中。 `

回答

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 
+0

謝謝!你似乎是Vim的新手。學習如何查找命令並導航內置的':help';它是全面的,並提供許多技巧。你不會像其他編輯一樣學習Vim,但如果你承諾不斷學習,它將證明它是一個非常強大和高效的編輯器。 –