2012-07-18 48 views
2

我被绊倒Vim的substitute -command行为,我不能 真正遵循:VIM-substitute命令插入重复

考虑下面的代码行包含&&序列我想 替代品&&&&和换行符:

return a && b 

在我第一次尝试我只是用s/&& /&&^M/g^MCtrl-V <Enter>插入)。 这导致下面的代码:

return a && && 
b 

被替换执行究竟是如何插入第二&&<space>? 我预计第一场(也是唯一的比赛)是&&<space>,而这次完整的比赛是 将被&&^M所取代?

的问题不是如何执行正确的替换 - 我最终 使用\zs令牌重置比赛开始,只有插入 换行符。 我只是想明白为什么引入重复。

回答

3

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

:s/&& /\&\&^M/g 
+0

啊,这解释了为什么'/ && /和&M/g' DID的工作。也许我应该只打印':h regex'作为参考。 – BergmannF 2012-07-18 08:26:04

+0

@Gjallar:在nomagic模式下,&&变成一个正常字符。但是,我不确定如何开启替代模式的nomagic模式。 – 2012-07-18 08:27:59

+3

尝试:':sno/&&/&& \ r' – kev 2012-07-18 09:31:05

1

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

:s/&& /&\r 

但我不喜欢尾随空格。

这一个你想要做什么,不留一个尾随空格:

:s/&&\zs /\r 

我用&&为“标记”,实际比赛中,<space>,被分隔的\zs,由一个回车替换。

请参阅:help \zs

编辑

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