使用VIM编辑文件自动添加换行符,无法移除该如何解决?
解决Vim/Nano自动给文件添加末尾LF的问题
问题背景
在多款终端模拟器中使用Vim或Nano编辑无末尾换行符的文件时,仅执行编辑保存操作(未修改内容),程序会自动向文件末尾添加LF(0x0a),导致文件字节数增加1。
编辑前后xxd对比
编辑前:
00001880: 5645 5574 4c53 3074 4c51 6f3d VEUtLS0tLQo=
编辑后:
00001880: 5645 5574 4c53 3074 4c51 6f3d 0a VEUtLS0tLQo=.
核心原因
POSIX标准规定文本文件的每一行必须以换行符结尾,大多数文本编辑器(包括Vim、Nano)默认遵循该标准,因此会自动补全最后一行的LF。
针对性解决方案
Vim 处理方法
要阻止Vim自动添加末尾LF,需同时设置两个关键选项:
- 打开文件时启用二进制模式(避免按文本规则处理):
vim -b filename - 在Vim内部禁用末尾换行自动添加:
执行后保存退出(:set noeol:wq)即可。
补充:如果已打开文件,可先执行
:set binary,再执行:set noeol,最后保存退出。之前单独使用:set binary无效,是因为二进制模式下eol选项默认仍为开启状态。
Nano 处理方法
Nano默认也会自动补全末尾LF,可通过以下方式关闭:
- 打开文件时添加参数:
nano --nonewlines filename - 或在Nano编辑界面按
Alt+O打开选项菜单,找到Auto newline(自动添加换行)选项,取消勾选后保存退出。
已添加LF的补救方法
如果文件已被自动添加了末尾LF,可通过以下命令移除:
- 使用
tr命令删除所有换行符(适合仅末尾多一个LF的文件):tr -d '\n' < filename > new_filename - 使用
dd命令精确截断最后一个字节(LF为单字节0x0a):dd if=filename of=new_filename bs=1 count=$(( $(stat -c %s filename) - 1 ))
内容的提问来源于stack exchange,提问作者Doug Smith
相关产品推荐
相关产品推荐

