如何在GVim正则表达式替换中插入换行符

29

我在Windows 7上使用GVim。

我想学习如何使用正则表达式替换来输入换行符。为此,我尝试使用\r和\n元字符,但替换后的文本并没有显示正常的换行符。

例如,在开始时,我的文本如下:

line 1
line 2

替换前

我使用下面的替换表达式:

:%s/\n/\n\n/g

然后GVim生成以下文本:

line 1^@^@line 2^@^@

在替换后使用\n作为换行符

然而,如果我在替换表达式中使用\r\n

:%s/\n/\r\n/g

然后GVim产生了以下文本:

line 1
^@line 2
^@

将换行符替换为 \r\n 后的结果

那些 ^@ 字符是什么?

如何在替换表达式中正确使用换行符?

2个回答

40

^@代表空字符


由于某些原因,vim希望在替换文本中看到\r才能插入新行。(使用\n则会插入空字符。)

因此,在成功运行/\n定位到换行符之后,请尝试:

s//\r/

或者添加额外的换行符:

s/$/\r/

从模式角度来看, \r 表示一个实际的(015)CR字符,这意味着当你想用换行符替换回车符时,会出现以下看起来很奇怪的命令:

s/\r/\r/

不,它不是一个无操作。


在我的Windows 7上的Vim 7.3中,建议使用s/\r/\r/命令会出现错误'E486: Pattern not found: \r'。它之前是否在其他版本上测试过能够正常工作? - rpyzh
2
有关搜索和替换中元字符使用差异的更多信息,请参见此SO答案 - rpyzh

5

这个

s/\r/\r/

fails. But

s/\n/\r/

运行正常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接