我经常想像这样在 vim 中搜索和替换:
:%s/<search_pattern>/<search_pattern>_foo/g
有没有办法让这种语法更有效,以便我可以<search_pattern>
在替换值中引用?我认为这类似于按组名/编号进行反向引用,但我找不到任何关于此的文档。
使用&
字符来表示替换中的匹配模式:
:%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_ 替换搜索字符串的结尾。
您可以使用&
整个搜索模式,也可以使用组来匹配模式的一部分。使用&
:
:%s/<search_pattern>/&_foo/g
这将完成您正在寻找的东西。如果您需要一些更复杂的东西,请使用组。要创建一个组,请使用(转义)括号将搜索模式的一部分括起来。然后,您可以使用 来引用它\n
,其中n
是组号。一个例子会更好地解释它。
您有以下文件:
bread,butter,bread,bread,bread,butter,butter,etc
您想将任何实例更改bread,butter
为bread and butter
:
:%s/\(bread\),\(butter\)/\1 and \2/g