假设我有以下非常简单的文件
a
b
c
d
e
并且我决定要在每行之后添加空行。我立即想到了几种不同的方法。我们可能会这样做(从而接受失败)。我们可能会录制一个类似的宏,qqo<ESC>jq
并重复几次。
在我看来,另外两种方法似乎更明显。
首先,我想我会在每行上发出:norm
命令o
。所以我跑了:%norm o
。但是实际发生的是,我们得到5条空行,然后是上面未分隔的行。我的解释是%norm
,vim实际上在这五行文件的前五行中接收了以下普通命令发出的消息。该o
命令创建新行,并且vim是“哑”的,因为它是通过行号而不是实际上通过其他标识符来引用的。
好吧,我很尴尬。当然。我尝试了其他一些方法,看看是否可以使上述方法起作用,但是,我不能。出于好奇,我尝试了另一种我最喜欢的大规模应用方法。这导致我尝试:g/^/norm o
。令我惊讶的是,这很好!因此,在我看来,这里的vim似乎并不像上面那样“愚蠢”,并且引用行的不仅仅是行号。
到底是怎么回事?
:%s/$/\r/
或这样::%s/\n/\r\r/
。结论是换行符可以与匹配\n
,但必须像\r
替换值中那样写。