我在文件中有以下文字:
a line
another line
new line
我正在尝试替换多个回车符,而仅用一个回车符替换它们。我正在尝试以下代码:
:%s/\v\n*/\r/g
但是,尽管上面的代码将多个空行替换为一个空行,但这也导致在每个字母之后添加回车符:
a
l
i
n
e
a
n
o
t
h
e
r
l
i
n
e
n
e
w
l
i
n
e
为什么会这样?
答案 0 :(得分:2)
之所以这样做,是因为\n*
表示任意数量的换行符,其中包括0个。
因此该模式实际上出现在每个字符对之间。更具体地说,在字符串ab
中,a
和b
之间实际上有零个更多的换行符(实际上,任何个字符零个或多个) 。这是因为“某物为零”是“某物为零或更多”的适当子集。
如果您使用\n+
(表示一个或更多换行符),则它应该更接近您想要的内容:
a line
another line
new line
还可以通过使用vim
之外的文本处理工具来达到类似的效果,例如:
sed '/^$/d' inputFile >outputFile
这是假设您要将多个换行符合而为一。
如果您打算将多条空白行合而为一,那么a line
和another line
之间仍然有空白行,则应查看{{ 3}},我之前已经回答过。