场景说明
当在 Unix/Linux 系统的 Vim 中打开 Windows 格式的文件时,行尾的 \r 会被显示为 ^M(需开启显示不可见字符)。例如:
line1^M
line2^M
此时需要删除这些多余的 \r 字符。
方法 1:通过文件格式转换(推荐)
Vim 支持自动识别文件格式(fileformat,简称 ff),Windows 文件格式为 dos(换行符 \r\n),Unix 格式为 unix(换行符 \n)。通过转换文件格式,Vim 会自动删除行尾的 \r。
步骤:
- 查看当前文件格式:
在 Vim 命令模式输入:set ff?,输出可能是fileformat=dos(表示含\r)。 - 转换为 Unix 格式:
输入:set ff=unix,Vim 会自动将行尾的\r\n替换为\n,删除所有\r。 - 保存文件:
输入:w保存,此时文件中的\r已被删除。
方法 2:手动替换 \r(精确控制)
如果需要手动删除特定位置的 \r(例如非行尾的 \r),可以使用 Vim 的替换命令。
步骤:
- 显示不可见字符(可选):
输入:set list,\r会显示为^M(行尾),方便确认位置。
(完成后用:set nolist恢复默认显示) - 执行替换命令:
在命令模式输入以下命令,删除所有\r::%s/\r//g%:表示操作整个文件(等价于1,$)。\r:匹配\r字符(在 Vim 正则中,\r代表回车符)。//:将匹配内容替换为空(即删除)。g:全局替换(每行所有匹配项都删除,否则仅替换每行第一个)。
注意事项
- 输入
\r的技巧:
如果在命令中直接输入\r不生效(例如某些旧版本 Vim),可以用Ctrl+V + Ctrl+M输入实际的\r字符(先按Ctrl+V,再按Ctrl+M,Vim 会显示为^M)。此时替换命令为::%s/^M//g - 混合格式文件:
如果文件中同时存在\r\n(Windows)和\n(Unix)换行符,:%s/\r//g会删除所有\r,无论其位置。 - 备份文件(重要):
操作前建议备份文件(如:w backup.txt),避免误删关键字符。
示例验证
假设文件 test.txt 内容(含 \r):
hello^M
world^M
(^M 为 \r 的显示)
执行 :%s/\r//g 或 :set ff=unix 后,内容变为:
hello
world
通过以上方法,可以高效删除 Vim 中的 \r 字符。推荐优先使用方法 1(转换文件格式),因为它能自动处理所有行尾的 \r,无需手动干预。
