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

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


当前回答

或者不使用vim,只需使用此命令修复换行符

fromdos <filename.txt>

希望能有所帮助!

其他回答

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

类型:% s /

新闻CTRL-VCTRL-M

/ / g型

按回车键

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

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

我用BBEdit在MacVim中创建的一个文件显示了一堆^M行返回,而不是常规的返回。下面的字符串替换解决了这个问题:

:%s/\r/\r/g

这很有趣,因为我用相同的字符替换了换行符,但我认为Vim只需要获得一个新的\r才能正确显示。我很想知道为什么这是可行的。

Ctrl+M最小化我的窗口,但Ctrl+Enter实际上插入一个^M字符。我还必须确保不要在按下Ctrl键之间松开。

所以我的解决方案是:

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

其中<Ctrl-V><Ctrl-Enter>表示按住Ctrl,然后释放V,然后释放Enter,然后释放Ctrl。

如果您正在处理windows生成的文件

上面的解决方案将在现有的行之间添加额外的行,因为^M后面已经有一个不可见的\r。

为了防止这种情况,您需要删除^M字符而不替换它们。

:%s/<Ctrl-V><Ctrl-Enter>//g

其中%表示“在这个缓冲区中”,s表示“替换”,/表示“(找到)下面的模式”,<Ctrl-V><Ctrl-Enter>指按下得到^M字符的键(见上文),//表示“没有”(或者,“在这两个斜杠之间的模式,是空的”),g是一个标志,表示“全局”,而不是一行中第一次出现。

命令

:%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

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

在VIM命令模式下:

:e ++ff=dos | setl ff=unix | up

e++ ff=dos -强制打开dos格式的文件。

Setl ff=unix -将文件转换为unix格式。

上保存文件时,仅当已修改。