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

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


当前回答

命令

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

其中<Ctrl-V><Ctrl-M>表示输入Ctrl+V然后Ctrl+M。

解释

:%s

替换,% =所有行

<Ctrl-V><Ctrl-M>

^M个字符(Ctrl- v是一种Vim方式来书写Ctrl ^字符,Ctrl-M将M写在正则表达式之后,结果是^M个特殊字符)

/\r/

带新线(\r)

g

并且全局执行(而不仅仅是行上的第一个事件)。

其他回答

^M是由Ctrl+V和M检索的

s/^M//g

就我而言,

上面没有工作,我有一个CSV文件从我的mac复制到Linux机器,我使用了所有上述命令,但没有帮助,只有下面一个

tr "\015" "\n" < inputfile > outputfile

我有一个文件,其中^M个字符被夹在行之间,如下所示

Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico,

为了节省击键次数,可以将其放在映射中,从而避免键入Ctrl+VCtrl+M。只要打开一个包含^M字符的文件,把它拉出来,然后把它粘贴到你的.vimrc中的一行中:

nnoremap <Leader>d :%s/^M//g<CR>

不需要使用Ctrl: : % s / r \ / /美元

为了让^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字符)转换为空格,然后删除行尾的所有空格(无论如何,这对我来说都是一个理想的结果)

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