Vim在每一行结束时显示^M。

我如何用在Vim中打开的文件中的普通换行符替换它?


当前回答

sed s/^M//g file1.txt > file2.txt

其中^M是通过同时按下3个键,ctrl + v + M

其他回答

这些建议对我都不起作用,因为在使用vim和eclipse时,我设法获得了^M换行符。我怀疑我遇到了一个外部案件但为了能帮助到其他人。

:%s/.$//g

这解决了我的问题

为了让^M字符匹配,我必须在视觉上选择它,然后使用操作系统复制到剪贴板命令来检索它。您可以在尝试替换命令之前通过搜索字符来测试它。

/^M

应该选择第一行吗

:%s/^M/\r/g

将所有错误的^M替换为回车。

这是基于gvim 7的MacVim中的函数。

编辑:

在我的Windows 10机器上又遇到了这个问题,它有Ubuntu for Windows,我认为这导致了vim的文件格式问题。在这种情况下,将ff更改为unix、mac或dos,只会将^M更改为^J,然后再更改回来。

这种情况下的解决方案:

:%s/\r$/ /g
:%s/ $//g

我这样做的原因是我想确保我的文件是无损的。我可以使用:%s/\r$//g,但这将直接删除回车,并可能产生意想不到的结果。相反,我们将单数CR字符(这里是^M字符)转换为空格,然后删除行尾的所有空格(无论如何,这对我来说都是一个理想的结果)

很抱歉重新提出一个早已被回答的老问题,但似乎有一些困惑正在进行中,我想我可以帮助澄清一些,因为这是谷歌搜索的高。

要在MacOS上使用sed,请执行以下操作:

sed -i.bak $'s/\r//' <filename>

解释:这里的$'STRING'语法属于bash shell。mac电脑不把\r当作特殊字符。通过在$ "中引用命令字符串,你告诉shell将\r替换为ANSI-C标准中指定的实际\r字符。

这些方法对我都不起作用,所以我尝试了这个,它起作用了:

类型:% s /

新闻CTRL-VCTRL-M

/ / g型

按回车键

因此,Vim中的整个命令应该看起来像:%s/^M//g

它的作用是:%s(查找并替换)/^M/(该符号)/(不含字符)g(全局)。

sed s/^M//g file1.txt > file2.txt

其中^M是通过同时按下3个键,ctrl + v + M