6

我经常想像这样在 vim 中搜索和替换:

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

有没有办法让这种语法更有效,以便我可以<search_pattern>在替换值中引用?我认为这类似于按组名/编号进行反向引用,但我找不到任何关于此的文档。

4

2 回答 2

13

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

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

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

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

:help sub-replace-special

并且,感谢@kev,您可以在搜索字符串的末尾使用\zs, 强制一个空模式被替换为 __foo_ :

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

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

于 2012-08-16T17:19:12.610 回答
3

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

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

这将完成您正在寻找的东西。如果您需要一些更复杂的东西,请使用组。要创建一个组,请使用(转义)括号将搜索模式的一部分括起来。然后,您可以使用 来引用它\n,其中n是组号。一个例子会更好地解释它。

您有以下文件:

bread,butter,bread,bread,bread,butter,butter,etc

您想将任何实例更改bread,butterbread and butter

:%s/\(bread\),\(butter\)/\1 and \2/g
于 2012-08-16T17:59:36.590 回答