在Vim中将DOS/Windows行结尾转换为Linux行结尾

820

如果我打开在Windows上创建的文件,所有行都以^M结尾。
如何一次性删除这些字符?


3
如果你使用命令 hexdump -C badfile 并且看到了 0x0d 0x0a,也就是 "\r\n",那就是你的问题所在。需要修复这个问题。 - Yzmir Ramirez
值得比较的 - 什么是 ^M,如何去除它? - Henke
29个回答

9

8

dos2unix可以直接修改文件内容。

您可以直接在文件上使用它,无需进行任何临时文件重定向。

dos2unix input.txt input.txt

上述使用了默认的美式键盘。使用-437选项来使用英式键盘。
dos2unix -437 input.txt input.txt

7
以下步骤可以将 DOS 文件格式转换为 Unix 格式:
:e ++ff=dos     Edit file again, using dos file format ('fileformats' is ignored).[A 1]
:setlocal ff=unix     This buffer will use LF-only line endings when written.[A 2]
:w     Write buffer using Unix (LF-only) line endings.

参考资料:文件格式


链接有一半是坏的,它会重定向到另一个页面。 - Peter Mortensen

6

我发现了一个非常简单的方法:用nano打开文件:nano file.txt

按下 Ctrl + O 保存,但在按下 Enter 键之前,按下:Alt+D 在 DOS 和 Unix/Linux 行尾符之间切换,或者按下:Alt+M 在 Mac 和 Unix/Linux 行尾符之间切换,然后按下 Enter 保存并按下 Ctrl + X 退出。


在 Linux 服务器上完成此操作时,文件末尾会出现 ^M。保存为 DOS 格式以保留,保存为 Linux 格式以删除。可以使用 cat -v 命令进行检查。 - HattrickNZ
2
这个问题是关于vim的,不是nano。 - Grant Birchmeier

5
使用以下命令:
:%s/^M$//g

要使^M出现,需要先按下CtrlV,再按下CtrlMCtrlV命令Vim将输入的下一个字符视为文字。

5

关于如何让 ^M 出现的注释对我很有用。在我的 vi 中仅键入 "^M" 无效(没有找到)。但是使用 CTRL+V CTRL+M 序列完美地解决了这个问题。

我的替换命令如下:

:%s/Ctrl-V Ctrl-M/\r/g

在我的屏幕上看起来像这样:

:%s/^M/\r/g

4
:g/Ctrl-v Ctrl-m/s///

CtrlM 是字符 \r,也就是回车符,在 DOS 换行符中会添加。 CtrlV 告诉 Vim 在命令行插入一个字面上的 CtrlM 字符。

总的来说,这个命令会将所有的 \r 替换为空,从而删除它们在行末的位置。


Dannid 的回答 中有详细解释。 - Peter Mortensen

2

您可以使用:

vim somefile.txt +"%s/\r/\r/g" +wq

或者使用dos2unix工具。


2
您可以使用以下命令:
:%s/^V^M//g
其中 '^' 表示使用 CTRL 键。

2
在Vim中,输入以下命令:
:w !dos2unix %

这将把当前缓冲区的内容传输到dos2unix命令,并将结果写入当前内容。Vim会要求重新加载文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接