vim %s/\n/\r/g 会在结尾多加一行空行

如题

默认最后一行会自动添加一行空行这个没有变动

现在的解决方法就是

1,$-1s/\n/\r/g
阅读 4.4k
1 个回答

vim 在 fileformat 是 unix 的情况下,总是以 \n 结尾,这是 vim 自身实现的。
即使执行 %s/\n/\r/g 命令,保存文件后,用 hexdump 查看这个文件的二进制内容,里面存的还是 \n,不是 \r
\n 对应的 ASCII 十六进制值是 0x0a,\r 对应的 ASCII 十六进制值是 0x0d。可以对照查看。

如果只是想把行末的 \n 换成 \r,可以执行 :set fileformat=mac 命令,mac 格式文件默认以 \r 结尾。
执行该命令后,保存文件,再用 hexdump 查看,就能看到 \r 对应的十六进制值 0x0d。

执行 %s/\n/\r/g 命令后,多加一行空格,其实是多加了一个 \n 换行符。目前没有找到会多加这个换行符的说明,猜测是 unix 格式下,vim 总是让文件最后一行以 \n 结尾,把 \n 替换成 \r 后,再从 \r 替换成 \n 时,自动在最后一行添加了了一个 \n

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进