例如,我有一堆带有公共前缀和后缀的值,例如:
fooVal1Bar;
fooVal2Bar;
fooVal3Bar;
在这种情况下,所有变量名称都以foo
开头和结尾,以Bar
结尾。我想使用在foo
和Bar
之间找到的随机变量名来使用查找和替换。假设我已经定义了变量Val1
,Val2
,Val3
和Val1Old
,Val2Old
和Val3Old
。我会找一个替换,类似于:
:%s/foo<AnyString>Bar/foo<AnyString>Bar = <AnyString> + <AnyString>Old
这将导致:
fooVal1Bar = Val1 + Val1Old;
fooVal2Bar = Val2 + Val2Old;
fooVal3Bar = Val3 + Val3Old;
我希望很清楚我想要做什么,我在vim帮助或网上找不到任何关于用通配符字符串替换的内容。我能找到的最多的是搜索通配符字符串。
答案 0 :(得分:52)
我相信你想要
:%s/foo\(\w\+\)Bar/& = \1 + \1\Old/
说明:
\w\+
找到一个或多个角色的出现。前面的 foo 和 Bar 之后确保这些匹配的字符位于foo
和Bar
之间。
\(...\)
存储此字符,以便它们可以用于替换的替换部分。
&
复制匹配的内容
\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