在vim search and replace中,换行符呈现为^@&引用;

在vim search and replace中,换行符呈现为^@&引用;,vim,utf-8,character-encoding,Vim,Utf 8,Character Encoding,我将粘贴在谷歌电子表格上的单元格复制到一个txt文件中,该文件是由逗号分隔的电子邮件地址列表。还有许多“空白”单元格,即用逗号包围的空白区域。因此,我可以得到以下列表: bob@aol.com,john@aol.com, , email@email.com 在vim中,当我尝试使用以下命令通过新行添加每个地址时: :%s/, /,\n/g 我没有在逗号后添加新行,而是使用“^@” 我知道这与字符集有关,但我不知道如何修复它 在:s的替换字段中,需要对换行符使用\r而不是\n ^@是ASCII空

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

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

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

:%s/, /,\n/g
我没有在逗号后添加新行,而是使用“^@”


我知道这与字符集有关,但我不知道如何修复它

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


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

您能否解释为什么他的
\n
显示为
^@
^@
是ASCII空字符。Vim在内部使用
\r
表示换行符(即
^M
),而
\n
表示ASCII null,因此在替换中,如果使用
\n
则会得到这些空字符,而不是换行符。另请参见
:h sub replace special
@Julian:我相信您应该在答案中加入这一解释。Vim内部不使用任何换行符,它只是有一个换行符列表(好的,
\n
\r\n
\r
,具体取决于“文件格式”选项)出现在列表项的末尾(或者,在列表的两项之间设置了“binary”和“noendofline”选项)。
\r
字符本身代表字符,但替换字符串中的两个字符
\r
代表换行符。
\n
代表NULL为真,甚至还有
:h NL用于Nul