在 vim 搜索和替换中,换行符呈现为“^@”[重复]

Posted

技术标签:

【中文标题】在 vim 搜索和替换中,换行符呈现为“^@”[重复]【英文标题】:In vim search and replace, newline is rendering as "^@" [duplicate] 【发布时间】:2012-07-27 07:10:05 【问题描述】:

我将一个长谷歌电子表格的粘贴单元格复制到一个 txt 文件中,该文件是一个用逗号分隔的电子邮件地址列表。还有许多“空白”单元格,即用逗号包围的空白区域。所以我可以有以下列表:

bob@aol.com, ,john@aol.com, , , , email@email.com

在 vim 中,当我尝试使用以下命令通过新行添加单独的每个地址时:

:%s/, /,\n/g

我没有在命令后添加新行,而是得到“^@”。

我知道这与字符集有关,但我不知道如何解决。

【问题讨论】:

【参考方案1】:

:s 的替换字段中,换行符需要使用\r 而不是\n

^@ 是 ASCII 空字符。 Vim 内部使用 \r 表示换行符(即 ^M),而 \n 表示 ASCII 空字符,因此在替换中,如果您使用 \n,您将得到那些空字符而不是换行符。另见:h sub-replace-special

【讨论】:

你能解释一下为什么他的\n 显示为^@ 吗? ^@ 是 ASCII 空字符。 Vim 内部使用\r 换行(即^M),\n 用于ASCII null,所以在替换中,如果你使用\n,你得到的是那些空字符而不是换行符。另见:h sub-replace-special @Julian:我相信你应该把这个解释放在答案中。 Vim 内部不使用任何换行符,它只有一个行列表和换行符(嗯,\n\r\n\r,取决于 'fileformat' 选项)出现在列表项的结尾(或者,设置了 'binary' 和 'noendofline' 选项,在列表的两个项目之间)。 \r 字符代表它自己,但 替换字符串 中的两个字符 \r 代表换行符。 \n 代表 NULL 是真的,甚至还有 :h NL-used-for-Nul

以上是关于在 vim 搜索和替换中,换行符呈现为“^@”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 \r 是 Vim 的换行符?

为啥 \r 是 Vim 的换行符?

如何使用vim,用换行替换文本中第4n个空格,n=1,2,3,4............

如何在 Vim 中用换行符替换字符

怎样搜索或替换换行符?

UltraEdit编辑器里面,如何把 回车换行符 替换成 空格 ?谢谢