在vim搜索和替换中,换行符呈现为"^ @"

meh*_*kar 16 vim utf-8 character-encoding

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

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

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

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

而不是在comman之后添加一个新行,而是改为"^ @".

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

Jul*_*ian 17

:s的替补场,你需要使用\r\n为换行符.

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

  • `^ @`是ASCII空字符.Vim内部使用`\ r`作为换行符(即`^ M`),并使用`\n`作为ASCII null,所以在替换中,如果使用`\n`,你将得到那些空字符而不是换行符.另见`:h sub-replace-special`. (4认同)
  • Vim内部不对换行使用任何东西,它只有一个行列表和换行符(好吧,`\n`,`\ r \n`或`\ r \n`取决于'fileformat'选项)出现在列表项(或者,在列表的两个项之间设置'binary'和'noendofline'选项).`\ r`字符代表它本身,但*替换字符串*中的两个字符`\ r`代表换行符.`\n`代表NULL是真的,甚至有`:h NL-used-for-Nul`. (3认同)