Vim在每一行结束时显示^M。
我如何用在Vim中打开的文件中的普通换行符替换它?
Vim在每一行结束时显示^M。
我如何用在Vim中打开的文件中的普通换行符替换它?
当前回答
我用BBEdit在MacVim中创建的一个文件显示了一堆^M行返回,而不是常规的返回。下面的字符串替换解决了这个问题:
:%s/\r/\r/g
这很有趣,因为我用相同的字符替换了换行符,但我认为Vim只需要获得一个新的\r才能正确显示。我很想知道为什么这是可行的。
其他回答
首先,使用:set ff?来确定文件的格式。
我猜可能是unix,那么问题是你的文件是用fileformat=dos创建的,在行末添加“^M^J”,但用flieformat=unix读取,只从行末删除“^J”,留下“^M”。
只需在Vim命令行中输入:e++ ff=dos即可将文件格式从unix更改为dos。这应该能解决问题。如果不是,:%s/\r//g会帮助你。
另外,还有称为dos2unix和unix2dos的开源实用程序可以做这件事。在linux系统上,它们可能是默认安装的;对于Windows系统,你可以从http://www.bastet.com/等网站下载。
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 / \ r / / g 这招对我很管用。
它的作用是清除所有行的末尾,去掉^M,就是这样。
在Solaris:
: %。s /; rolelabel CTRL + V > 50%的CTRL + M / / g
那就是:
: % s / M ^ / / g
这意味着:
% =所有行, S =代入, ^M =你想要替换的东西 // =替换为空 G =全局(不仅是第一次出现)