场景说明
当在 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
,无需手动干预。