Vim搜索和替换的效率

6
经常我想在Vim中进行搜索和替换,就像这样:
:%s/<search_pattern>/<search_pattern>_foo/g

有没有一种更有效的方法来使这个语法更加高效,这样我就可以在替换值中引用<search_pattern>? 我想这可能类似于通过组名/编号进行反向引用,但我找不到任何相关的文档。

2个回答

13

使用&字符来表示替换中匹配的模式:

:%s/<search_pattern>/&_foo/g

或者您可以使用\0,它是整个匹配模式的反向引用,因此可能更容易记忆:

:%s/<search_pattern>/\0_foo/g

参见:helpsub-replace-special

同时感谢@kev,您可以使用\zs在搜索字符串末尾强制使用空模式,以在替换中由__foo_替换:

:%s/<search_pattern>\zs/_foo/g

这意味着:用 __foo_ 替换搜索字符串的结尾。


3

您可以使用&来匹配整个搜索模式,或者使用分组来匹配模式的一部分。使用&

:%s/<search_pattern>/&_foo/g

这将实现您想要的功能。如果您需要更复杂的内容,请使用组。要创建一个组,请用(转义)括号括起搜索模式的一部分。然后,您可以通过 \n 引用该组,其中 n 是组号。一个例子会更好地解释它。
您有以下文件:
bread,butter,bread,bread,bread,butter,butter,etc

您想将任何一个实例的bread,butter更改为面包和黄油:
:%s/\(bread\),\(butter\)/\1 and \2/g

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接