Vim 中删除 \r总结

在 Vim 中删除 \r(回车符,Carriage Return)通常是由于处理跨平台文件(如 Windows 生成的文本文件,换行符为 \r\n,而 Unix/Linux 为 \n)时的常见问题。以下是具体方法和操作说明:

场景说明

当在 Unix/Linux 系统的 Vim 中打开 Windows 格式的文件时,行尾的 \r 会被显示为 ^M(需开启显示不可见字符)。例如:

line1^M
line2^M

此时需要删除这些多余的 \r 字符。

方法 1:通过文件格式转换(推荐)

Vim 支持自动识别文件格式(fileformat,简称 ff),Windows 文件格式为 dos(换行符 \r\n),Unix 格式为 unix(换行符 \n)。通过转换文件格式,Vim 会自动删除行尾的 \r

步骤:

  1. 查看当前文件格式
    在 Vim 命令模式输入 :set ff?,输出可能是 fileformat=dos(表示含 \r)。
  2. 转换为 Unix 格式
    输入 :set ff=unix,Vim 会自动将行尾的 \r\n 替换为 \n,删除所有 \r
  3. 保存文件
    输入 :w 保存,此时文件中的 \r 已被删除。

方法 2:手动替换 \r(精确控制)

如果需要手动删除特定位置的 \r(例如非行尾的 \r),可以使用 Vim 的替换命令。

步骤:

  1. 显示不可见字符(可选)
    输入 :set list\r 会显示为 ^M(行尾),方便确认位置。
    (完成后用 :set nolist 恢复默认显示)
  2. 执行替换命令
    在命令模式输入以下命令,删除所有 \r:%s/\r//g
    • %:表示操作整个文件(等价于 1,$)。
    • \r:匹配 \r 字符(在 Vim 正则中,\r 代表回车符)。
    • //:将匹配内容替换为空(即删除)。
    • g:全局替换(每行所有匹配项都删除,否则仅替换每行第一个)。

注意事项

  1. 输入 \r 的技巧
    如果在命令中直接输入 \r 不生效(例如某些旧版本 Vim),可以用 Ctrl+V + Ctrl+M 输入实际的 \r 字符(先按 Ctrl+V,再按 Ctrl+M,Vim 会显示为 ^M)。此时替换命令为::%s/^M//g
  2. 混合格式文件
    如果文件中同时存在 \r\n(Windows)和 \n(Unix)换行符,:%s/\r//g 会删除所有 \r,无论其位置。
  3. 备份文件(重要)
    操作前建议备份文件(如 :w backup.txt),避免误删关键字符。

示例验证

假设文件 test.txt 内容(含 \r):

hello^M
world^M

^M 为 \r 的显示)

执行 :%s/\r//g 或 :set ff=unix 后,内容变为:

hello
world

通过以上方法,可以高效删除 Vim 中的 \r 字符。推荐优先使用方法 1(转换文件格式),因为它能自动处理所有行尾的 \r,无需手动干预。

此条目发表在linux文章分类目录,贴了标签。将固定链接加入收藏夹。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注