基本Vim - 搜索和替换由特定字符限定的文本

时间:2015-01-30 23:38:40

标签: regex vim replace

说我想替换:

"Christoph Waltz" = "That's a Bingo";
"Gary Coleman" = "What are you talking about, dear Willis?";

只有:

"Christoph Waltz"
"Gary Coleman"

即。我想删除=;

之后的所有字符

我认为找到模式的正则表达式是\=.*?\;。在vim中,我尝试过:

:%s/\=.*?\;$//g

但它给了我一个Invalid Command错误和Nothing after \=。如何删除上述文字?道歉,但我对此不熟悉。

2 个答案:

答案 0 :(得分:1)

Vim的正则表达方言不同;它的转义是针对文本搜索进行优化的。有关与Perl正则表达式的比较,请参阅:help perl-patterns。正如@EvergreenTree所指出的那样,你可以用特殊原子来影响逃逸行为; CP。 :help /\v

对于您的示例,非贪婪匹配为.\{-},而不是.*?,并且如上所述,您不得转义多个文字字符:

:%s/ =.\{-};$//

/g标志也是多余的;只有一个匹配通过$锚定到结尾。)

答案 1 :(得分:0)

这是因为默认情况下vim对正则表达式的奇怪处理。它将\=解释为文字=,而不是将其解释为特殊的正则表达式字符。要使vim的正则表达式系统正常工作,可以在其前面添加\v,这是“非常神奇”的模式。这应该可以解决问题:

%s/\v\=.*\;$//g

我不会解释vim如何在这里以非常神奇的模式输入每一个角色,但你可以在这个帮助主题中阅读它:

:help /magic