2

我在 Vim 的substitute-command 中遇到了一个我无法真正遵循的行为:

给定以下代码行,其中包含&&我想用&&with&&和换行符替换的序列:

return a && b

在我的第一次尝试中,我只是使用了s/&& /&&^M/g^M通过 插入Ctrl-V <Enter>)。这导致以下代码:

return a && && 
b

插入第二个的替换究竟是如何执行的&&<space>?我希望第一个(也是唯一的匹配)是&&<space>,而这个完整的匹配被替换为&&^M?

问题不在于如何执行正确的替换 - 我最终使用\zs令牌来重置比赛的开始并只插入换行符。我只是想了解为什么要引入重复。

4

2 回答 2

3

您遇到的问题是替换命令将&替换中的特殊标记视为匹配的文本。你需要逃避它。

:s/&& /\&\&^M/g
于 2012-07-18T08:25:07.603 回答
1

这个简单的命令应该可以工作,在第一行留下一个不雅的尾随空格:

:s/&& /&\r

但我不喜欢尾随空格。

这个可以做你想做的事,而不会留下尾随空格:

:s/&&\zs /\r

&&用作“标记”,实际匹配 a用回车<space>符分隔\zs并替换为回车符。

:help \zs

编辑

废话,我完全没有阅读你问题的最后一段。

于 2012-07-18T08:49:42.507 回答