vim命令如何显示^M换行符并删除
目录
- 1.vim查看^M
- 方式一:查看^M【推荐】
- 方式二:查看文件格式
- 方式三:使用 cat 命令
- 2.vim删除^M
- 方式一:手动删除
- 方式二:批量替换
- 方式三:修改文件格式
- 方式四:dos2unix 命令【推荐】
在 Linux 系统中,当执行一个在 Windows 或 DOS 系统修改郭的 sh 脚本文件,,可能会报错:/bin/bash^M: 坏的解释器: 没有那个文件或目录 ,如下所示:

这是因为 Windows 和 Linux 系统对文本文件的换行符有不同的约定:
- Windows 使用
回车(CR,十六进制是0xD)+换行(LF,十六进制是0xA)组合(\r\n); - Linux 只使用
换行(LF,十六进制是0xA)。
^M 是 0xD 在 Vim 中的显示,0x0D = 13,M是英语中的第 13 个字符。
1.vim查看^M
方式一:查看^M【推荐】
vim 中查看 ^M 命令:
:e ++f=unix %

方式二:查看文件格式
我们也可以通过查看文件格式进行判断,执行如下命令:
:set ff?
- 如果显示为
fileformat=dos,则说明这是一个以DOS/Windows格式保存的文件。

方式三:使用 cat 命令
如果文件内容不多的情况下,我们可以使用如下 cat 命令来查看 ^M 字符。

2.vim删除^M
方式一:手动删除
我们前面通过方式一执行 :e ++ff=unix % 已经查看到了 ^M,符号,通过 i 编辑文本文件,删除 ^M 之后,:wq 保存并退出即可。
(注意:^M 看似两个字符,其实是一个字符,按一次删除按钮即可。)

方式二:批量替换
如果文件内容较多,通过 :e ++ff=unix % 查看 ^M 之后,手动删除会比较耗费时间,我们可以执行如下命令来进行批量删除:
:%s/\r//g
或者也可以这样:(注意:命令中 ^M 的输入方式是 Ctrl + V,然后 Ctrl + M)
补充:MobaXterm 终端工具中 Ctrl + M,已经被占用了,需要在 Settings -> Keyboard shortcuts 中换一下。
:%s/^M//g

方式三:修改文件格式
前面1.vim查看^M 中已经介绍过,我们可以通过 :set ff? 查看文件格式,那么我们也可以通过直接修改文件格式的方式来删除 ^M 字符。
:set ff=unix
下面为完整写法:
:set fileformat=unix

再次使用 set ff? 命令查看文件格式已经被修改为 unix。

脚本文件可以正常执行了:

方式四:dos2unix 命令【推荐】
直接执行 dos2unix 文件名 可以将文件转为 unix 版本,删除里面所有的 ^M:
dos2unix

整理完毕,完结撒花~ 🌻
参考地址:
1.史上最全的Vim命令,https://blog.csdn.net/scaleqiao/article/details/45153379
2.Linux下去掉^M的四种方法,https://blog.csdn.net/u012678323/article/details/132741008