Vim 中删除特殊字符总结,如

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

场景说明

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

1
2
3
line1^M
line2^M

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

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

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

步骤:

查看当前文件格式:在 Vim 命令模式输入 :set ff?,输出可能是 fileformat=dos(表示含 \r)。

data-ad-format="fluid" data-ad-layout-key="-7k+ex-4a-9w+4a">

转换为 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):

1
2
3
hello^M
world^M

(^M 为 \r 的显示)

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

1
2
3
hello
world

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

data-ad-format="auto" data-full-width-responsive="true">