基本 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
标志也是多余的;只能有一个匹配项通过 $
锚定到末尾。)
说我想替换:
"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
标志也是多余的;只能有一个匹配项通过 $
锚定到末尾。)