我正在尝试用,新行替换当前文件中的每个:
,
:%s/,/\n/g
但它会插入看起来像 a^@而不是实际的换行符。该文件未处于 DOS 模式或任何状态。
^@
我该怎么办?
替换\n为在文本中插入一个空字符。要获得换行符,请使用\r. 但是,在搜索换行符时,您仍然会使用\n。这种不对称是由于做些稍微不同\n的\r 事情:
\n
\r
\n匹配行尾(换行符),而\r匹配回车符。另一方面,在替换中\n插入一个空字符,而\r插入一个换行符(更准确地说,它被视为输入CR)。这是一个使用 Vim 命令行功能的小型非交互式示例来说明这一点(换句话说,您可以将以下内容复制并粘贴到终端中以运行它)。xxd显示结果文件的十六进制转储。
xxd
echo bar > test (echo 'Before:'; xxd test) > output.txt vim test '+s/b/\n/' '+s/a/\r/' +wq (echo 'After:'; xxd test) >> output.txt more output.txt Before: 0000000: 6261 720a bar. After: 0000000: 000a 720a ..r.
换句话说,\n在文本中插入了字节 0x00;\r已插入字节 0x0a。