基本 Vim - 搜索和替换以特定字符为界的文本

Basic Vim - Search and Replace text bounded by specific characters

说我想替换:

"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 \=。如何删除上面的文字?抱歉,我是新手。

这是因为 vim 默认情况下对正则表达式的奇怪处理。它不是将 \= 解释为文字 =,而是将其解释为特殊的正则表达式字符。为了让vim的regex系统更正常的工作,可以在其前面加\v前缀,也就是"very magic"模式。这应该可以解决问题:

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

我不会在这里解释 vim 如何在非常神奇的模式下输入每个字符,但您可以在这个帮助主题中阅读相关内容:

:help /magic

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

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

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

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