在vim中,我试图匹配两个字符串(最多为空格)仅当时它们之间有另一个指定的字符串。
示例:假设某些函数调用
call someFunction(foo, bar)
call anotherFunction(foo)
call thirdFunction(foo, bar)
现在如果我们指定字符串foo,bar,我希望它看起来像这样(<>里面的东西应该匹配)
call <someFunction(>foo, bar<)>
call anotherFunction(foo)
call <thirdFunction(>foo, bar<)>
一个更简单的例子是匹配特定内容所包围的字符串。例如。在something foo, bar something (foo, bar)
中只匹配第二次出现的foo,bar,而不是括号。从那以后,我可能会解决它。
有什么想法吗?
答案 0 :(得分:1)
答案 1 :(得分:-1)
首先,你不能在Vim中同时匹配多个东西。只有一个(连续)选择,一个文本对象等。可能的是使用正则表达式捕获多个子字符串,然后使用:substitute
命令重新排列这些子字符串。这是适用于您的示例的一个:
:%s/\(\<\w\+\>(\)foo, bar\()\)/function is \1\2/
\(...\)
是捕获组,匹配的文本通过替换部分中的\1
等插入。请阅读:help :substitute
了解详情。