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

时间:2012-04-26 15:30:11

标签: vim wildcard replace

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

fooVal1Bar;

fooVal2Bar;

fooVal3Bar;

在这种情况下,所有变量名称都以foo开头和结尾,以Bar结尾。我想使用在fooBar之间找到的随机变量名来使用查找和替换。假设我已经定义了变量Val1Val2Val3Val1OldVal2OldVal3Old。我会找一个替换,类似于:

:%s/foo<AnyString>Bar/foo<AnyString>Bar = <AnyString> + <AnyString>Old

这将导致:

fooVal1Bar = Val1 + Val1Old;

fooVal2Bar = Val2 + Val2Old;

fooVal3Bar = Val3 + Val3Old;

我希望很清楚我想要做什么,我在vim帮助或网上找不到任何关于用通配符字符串替换的内容。我能找到的最多的是搜索通配符字符串。

3 个答案:

答案 0 :(得分:52)

我相信你想要

:%s/foo\(\w\+\)Bar/& = \1 + \1\Old/

说明:

\w\+找到一个或多个角色的出现。前面的 foo Bar 之后确保这些匹配的字符位于fooBar之间。

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

&复制匹配的内容

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

答案 1 :(得分:4)

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

%s/\(foo\(\w\+\)Bar\);/\1 = \2 \2Old/

或者您可以使用magic清除它:

%s/\v(foo(\w+)Bar);/\1 = \2 \2Old/

答案 2 :(得分:0)

用通配符替换字符串

:%s/foo.*Bar/hello_world/gc

在这里,.*在遵循regex quantifiers的正则表达式的更多信息后处理野猪

. - Any character except line break
* - Zero or more times