1

(^M 这里是^V^M, ff=unix)

s/^M*$/\^M/工作正常,在任何行将 0-many ^M 转换为一个 ^M。

但是尝试仅在匹配行上执行此操作,例如“matchtext is here with more and more text^M^M^M”,s/^matchtext.*\zs^M*$/\^M/但它不起作用,而是添加了一个 ^M ?

.*这是我不明白 的这里的行为,s/\zs^M*$/\^M/有效但只是介绍s/.*\zs^M*$/\^M/没有。

魔法/魔法问题?s/.\\*\zs^M*$/\^M/似乎工作,但又s/matchtext.\\*\zs^M*$/^M/没有。

4

1 回答 1

3

.*正在匹配所有内容,包括所有尾随^Ms,这没有任何内容可供您^M*匹配,并且它确实不匹配任何内容,因为它*允许匹配 0 个实例。第一个*的贪婪支配了第二个的贪婪*

要修复它,您可以制作第一个*非贪婪 ( :help non-greedy) 但我认为您应该只使用该:g命令,如下所示:

:g/^matchtext/s/^M*$/\^M/
于 2012-07-27T22:44:58.337 回答