是否可以在VIM中使用通配符字符串查找和替换?

dwc*_*las 37 vim replace wildcard

例如,我有一堆带有公共前缀和后缀的值,例如:

fooVal1Bar;

fooVal2Bar;

fooVal3Bar;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,所有变量名称的开头和结尾都foo以及结束Bar.我想用一个查找和使用之间找到了随机变量名称替换fooBar.说我已经有变量Val1,Val2,Val3,和Val1Old,Val2OldVal3Old定义.我会找到一个替代品,类似于:

:%s/foo<AnyString>Bar/foo<AnyString>Bar = <AnyString> + <AnyString>Old
Run Code Online (Sandbox Code Playgroud)

这将导致:

fooVal1Bar = Val1 + Val1Old;

fooVal2Bar = Val2 + Val2Old;

fooVal3Bar = Val3 + Val3Old;
Run Code Online (Sandbox Code Playgroud)

我希望很明显我想做什么,我在vim帮助或网上找不到任何关于用通配符字符串替换的东西.我能找到的最多的是搜索通配符字符串.

Ren*_*ger 55

我相信你想要的

:%s/foo\(\w\+\)Bar/& = \1 + \1\Old/
Run Code Online (Sandbox Code Playgroud)

说明:

\w\+找到一个或多个角色的出现.前面的foo和跟随Bar确保这些匹配的字符只在a foo和a 之间Bar.

\(...\) 存储此字符,以便它们可以用于替换的替换部分.

& 复制匹配的内容

\1\(....\)部件中捕获的字符串.

  • `\ w\+`匹配此集合中的一个或多个:a-zA-Z0-9_和`.*`匹配零或多个任何东西. (7认同)

gpo*_*ojd 6

您需要捕获要保存的内容。尝试这样的事情:

%s/\(foo\(\w\+\)Bar\);/\1 = \2 \2Old/
Run Code Online (Sandbox Code Playgroud)

或者,您也可以用魔术清理一下:

%s/\v(foo(\w+)Bar);/\1 = \2 \2Old/
Run Code Online (Sandbox Code Playgroud)