当前位置:  开发笔记 > 编程语言 > 正文

如何在vim中打开的文件中将^ M换行符转换为"正常"换行符?

如何解决《如何在vim中打开的文件中将^M换行符转换为"正常"换行符?》经验,为你挑选了19个好方法。

vim显示在每行结尾^ M

我怎么做用'正常'换行符替换它?



1> LeopardSkinP..:
命令
:%s//\r/g

其中意味着键入Ctrl+ V然后Ctrl+ M.

说明
:%s

替代,%=所有行


^ M个字符(Ctrl-V是Vim写入Ctrl ^字符的方式,Ctrl-M在正则表达式后写入M,产生^ M特殊字符)

/\r/

用新行(\r)

g

并在全球范围内进行(不仅仅是第一次出现在线上).


对于这个问题,这绝对是正确的答案,如果你有一个^ M后跟一个新行,你想保留换行符但是删除^ M. 执行下面的其他替换会使文件重复间隔.
它删除了^ M个字符,但没有插入回车符.
@jumpnett - 您需要按下键和弦Ctrl-V/Ctrl-M,而不是将其作为逐字文本输入.
如果您仍然缺少回车符(即^ M已被删除但所有内容都包裹在一行上),请执行:`:%s/ /\r/g` (其中\ r \n用换行符替换^ M).
如果您在Windows上运行Vim,则需要使用而不是.
当我遇到这个问题时,这是正确的解决方案.虽然它并不那么简单.如果文件具有CRLF结尾,则此方法有效;而如果从一个文件转换为另一个,则%s/^ V ^ M/^ V ^ M/g方法有效.文件打开时的设置_和_当Git在后台更新时会影响这一点,因为Vim可能会在打开文件时猜测模式,但如果文件在打开时更改,则会读取所有内容.
确保实际按Ctrl-V和Ctrl-M而不是复制和粘贴字符串.

2> Paul Tomblin..:

在Linux和Mac OS上,以下工作,

:%s/^V^M/^V^M/g

其中^V^M意味着键入Ctrl+ V,然后Ctrl+ M.

注意:在Windows上,您可能希望使用^Q而不是^V,因为默认情况下^V会映射到粘贴文本.


接受的答案是不正确的.这个更好用.
这是一个非常神秘的命令,但它在Mac上适用于我.
当你的文件中没有新行时,这是一个不同的问题,我承认这是更常见的.FYI ^ M可以与\ r匹配
我发现等效的`%s /\r /\r/g`在MacVim上运行良好,文件只显示行末尾的"^ M"(MacVim术语中的一条长行).显然\ r \n表示模式与此命令的替换部分不同.
为什么这会得到一个downvote?它的工作原理,即使你的文件被捣碎到一行,因为它的行末端是错误的.
不.我的方法是用正确的行结束替换文件中的行尾.
@jumpnett,你输入不对.冒号,然后百分比,然后s,然后斜线,然后控制v,然后控制m,然后斜线,然后控制v,然后控制m,然后斜线,然后g,然后返回.

3> Jonathan Lef..:

在内部vim,查看文件格式 - DOS或Unix:

:set filetype=unix

:set fileformat=unix

该文件将被回写而没有回车符(CR,^ M)字符.


这修复了我遇到的错误... Vim开始认为我的UNIX格式文件是windows,新更改的行在git diff中显示^ M.
use:set fileformat = unix对于大多数配置,filetype仅更改正在使用的语法类型.
这也适用于vi BTW,你可以用同样的方式`set ff = unix`做一个小快捷方式`ft`是`filetype`的快捷方式

4> Pam..:

这是唯一对我有用的东西:

:e ++ ff = dos

发现于:http://vim.wikia.com/wiki/File_format


`:e ++ ff = dos`后跟`:set ff = unix`将结尾转换为合理的格式.

5> netpoetica..:

我在MacVim中看到的用BBEdit创建的文件显示了一堆^M行返回而不是常规行.以下字符串替换解决了问题 - 希望这有助于:

:%s/\r/\r/g

这很有趣,因为我用相同的字符替换换行符,但我想Vim只需要获得一个新的\ r来正确显示.我有兴趣知道为什么这有效的基本机制.


`:%s /\r // g`在windows'gVim中为我工作
在本页提供的所有解决方案中,这是唯一一种用于从csv文件中删除^ M的模式。使用MacVim。

6> chenxsan..:

首先,:set ff?用来确定文件的文件格式.

我想它可能是unix,那么问题是你的文件是fileformat=dos通过在行结尾添加"^ M ^ J" 创建的,但是flieformat=unix只读取行结束时的"^ J",留下"^ M".

只需:e ++ff=dos在Vim命令行中输入,即可将文件格式从unix更改为dos.它应该解决问题.如果没有,:%s/\r//g应该帮助你.


我必须做两件事.`:e ++ ff = dos` then`:set ff = unix`和`:w`

7> Metagrapher..:

为了使^ M字符匹配,我必须在视觉上选择它,然后使用OS副本到剪贴板命令来检索它.您可以在尝试替换命令之前通过搜索字符来测试它.

/^M

应该选择第一个坏线

:%s/^M/\r/g

将用回车替换所有错误的^ M.

这是MacVim中的功能,它基于gvim 7.

编辑:

我的Windows 10机器上有这个问题,它有Ubuntu for Windows,我认为这会导致vim的文件格式问题.在这种情况下,将ff更改为unix,mac或dos只会将^ M更改为^ J并再次返回.

在这种情况下的解决方案:

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

我走这条路的原因是因为我想确保我对我的文件没有破坏性.我可以,:%s/\r$//g但那会立即删除回车,并可能有意想不到的结果.相反,我们将单个CR字符(此处为^ M字符)转换为空格,然后删除行末尾的所有空格(无论如何,这对我来说都是理想的结果)

很抱歉恢复了一个早已被回答的旧问题,但似乎有一些混乱,我想我会帮助清除一些,因为这在Google搜索中很高.



8> d-_-b..:

这些都不适合我,所以我尝试了这个,这有效:

类型 :%s/

CTRL-VCTRL-M

类型 //g

Enter

所以Vim的整体命令看起来像 :%s/^M//g

这样做:( :%s查找和替换)/^M/(该符号)/(没有字符)g(全局).



9> Andrew Sledg..:

^ M是由检索Ctrl+ VM,所以做

s/^M//g



10> BHarman..:

无需使用Ctrl: :%s/\r$//



11> Shahzeb Khan..:

简单的事情对我有用

dos2unix   filename



12> Freedom_Ben..:

我用sed做了这个:

sed -i -e 's/\r/\n/g' filename



13> tonatiuhnb..:

那怎么样: :%s/\r//g 那完全对我有用.

这样做只是为了清理所有行的行尾,它删除了^ M,就是这样.



14> Micah Smith..:

这个问题有很多其他答案,但是,以下对我来说最好,因为我需要一个命令行解决方案:

vim -u NONE -c 'e ++ff=dos' -c 'w ++ff=unix' -c q myfile

说明:

无需加载任何.vimrc文件,请打开 myfile

运行:e ++ff=dos以强制重新加载整个文件作为dos行结尾.

运行:w ++ff=unix以使用unix行结尾写入文件

退出vim


谢谢!这解决了我的问题,发现它在脚本中使用很有用

15> 小智..:

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

所以我的解决方案是:

:%s//\r/g

按住 Ctrl,按下并释放V,按下并释放Enter,然后释放 Ctrl.

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

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

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

:%s///g

其中%"在此缓冲区中"的s意思是"替代",/意思是"(找到)以下模式",指的是按下以获取^M角色的键(见上文),//意思是"没有任何东西"(或",带有模式")在这两个斜杠之间,它是空的"),并且g是一个标志意思是"全局",而不是第一次出现在一行中.



16> Stryker..:

这对我有用:

    将文件格式设置为unix(\n行结尾)

    保存文件

所以在vim中:

:set ff=unix
:w



17> Vishwanath 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,



18> ConcernedOfT..:

或者,有一些名为dos2unix和unix2dos的开源实用程序可以执行此操作.在Linux系统上,它们可能默认安装; 对于Windows系统,您可以从http://www.bastet.com/等下载它们.



19> Blue Diamond..:
sed s/^M//g file1.txt > file2.txt

通过同时按下3个键来键入^ M, ctrl + v + m

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有