如何将换行符放在GVim正则表达式的替换中

Mer*_*glu 22 regex vim newline substitution

我在Windows 7上使用GVim.

我想通过使用正则表达式替换来学习如何放置换行符.为此,我尝试使用\ r和\n元字符,但替换文本不显示正常的换行符.

例如,一开始我有:

line 1
line 2
Run Code Online (Sandbox Code Playgroud)

在替换之前

我使用以下替换表达式:

:%s/\n/\n\n/g
Run Code Online (Sandbox Code Playgroud)

然后GVim生成以下文本:

line 1^@^@line 2^@^@
Run Code Online (Sandbox Code Playgroud)

用\n替换为换行符后

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

:%s/\n/\r\n/g
Run Code Online (Sandbox Code Playgroud)

然后GVim生成以下文本:

line 1
^@line 2
^@
Run Code Online (Sandbox Code Playgroud)

用\ r \n替换为换行符后

那些^ @字符是什么?

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

Dig*_*oss 29

^ @是一个零


出于某种原因,vim想要\r在替换文本中看到以插入换行符.(\n在替换中插入一个nul.)

因此,在通过运行成功找到换行符后/\n,请尝试:

s//\r/
Run Code Online (Sandbox Code Playgroud)

或者添加额外的换行符:

s/$/\r/
Run Code Online (Sandbox Code Playgroud)

在模式方面,\r表示实际的(015)CR字符,当您想要用换行符替换返回时,会导致以下奇怪的命令:

s/\r/\r/
Run Code Online (Sandbox Code Playgroud)

不,这不是无操作.

  • 有关搜索与替换中元字符使用差异的更多信息,请参阅[此答案](http://stackoverflow.com/a/3966089/2664868)。 (2认同)