可以在VIM中对通配符字符串使用find和replace吗?

可以在VIM中对通配符字符串使用find和replace吗?,vim,wildcard,replace,Vim,Wildcard,Replace,例如,我有一组带有公共前缀和后缀的值,例如: fooVal1Bar; fooVal2Bar; fooVal3Bar; 在这种情况下,所有变量名以foo开头和结尾,以Bar结尾。我想使用在foo和Bar之间找到的随机变量名进行查找和替换。假设我已经定义了变量Val1、Val2、Val3、和Val1Old、Val2Old、和Val3Old。我会找到一个替代品,大致如下: :%s/foo<AnyString>Bar/foo<AnyString>Bar = <AnyS

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

fooVal1Bar;

fooVal2Bar;

fooVal3Bar;
在这种情况下,所有变量名以
foo
开头和结尾,以
Bar
结尾。我想使用在
foo
Bar
之间找到的随机变量名进行查找和替换。假设我已经定义了变量
Val1
Val2
Val3
、和
Val1Old
Val2Old
、和
Val3Old
。我会找到一个替代品,大致如下:

:%s/foo<AnyString>Bar/foo<AnyString>Bar = <AnyString> + <AnyString>Old
我希望清楚我想做什么,我在vim帮助或在线中找不到任何关于用通配符字符串替换的内容。我能找到的最多的是关于搜索通配符字符串的内容。

我相信你会想要的

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

\w\+
查找一个或多个出现的字符。前面的foo和后面的条形图确保这些匹配字符正好位于
foo
Bar
之间

\(…\)
存储这些字符,以便在替换的替换部分使用它们

&
复制匹配的内容


\1
是在
\(…..\)
部分捕获的字符串。

您需要捕获要保存的内容。试着这样做:

%s/\(foo\(\w\+\)Bar\);/\1 = \2 \2Old/
或者,您也可以使用以下工具将其清理干净:


用通配符替换字符串

:%s/foo.*Bar/hello\u world/gc
在这里,
*
处理wildcoard,下面是关于正则表达式的更多信息


\w\+和。*?
\w\+
匹配此集合中的一个或多个:a-zA-Z0-9_uu和
*
匹配任何内容的零个或多个。啊,好的。这是有道理的。谢谢只是在我想搜索和替换的代码上尝试了一下,效果非常好。再次感谢!如果要匹配固定的出现次数,可以使用
\w\{n,m}
\w\{,m}
来匹配最大出现次数
%s/\(foo\(\w\+\)Bar\);/\1 = \2 \2Old/
%s/\v(foo(\w+)Bar);/\1 = \2 \2Old/
. - Any character except line break
* - Zero or more times