Leo*_*Hat 563
:%s/<Ctrl-V><Ctrl-M>/\r/g
Run Code Online (Sandbox Code Playgroud)
其中<Ctrl-V><Ctrl-M>意味着键入Ctrl+ V然后Ctrl+ M.
:%s
Run Code Online (Sandbox Code Playgroud)
替代,%=所有行
<Ctrl-V><Ctrl-M>
Run Code Online (Sandbox Code Playgroud)
^ M个字符(Ctrl-V是Vim写入Ctrl ^字符的方式,Ctrl-M在正则表达式后写入M,产生^ M特殊字符)
/\r/
Run Code Online (Sandbox Code Playgroud)
用新行(\r)
g
Run Code Online (Sandbox Code Playgroud)
并在全球范围内进行(不仅仅是第一次出现在线上).
Pau*_*lin 418
在Linux和Mac OS上,以下工作,
:%s/^V^M/^V^M/g
Run Code Online (Sandbox Code Playgroud)
其中^V^M意味着键入Ctrl+ V,然后Ctrl+ M.
注意:在Windows上,您可能希望使用^Q而不是^V,因为默认情况下^V会映射到粘贴文本.
Jon*_*ler 183
在内部vim,查看文件格式 - DOS或Unix:
:set filetype=unix
:set fileformat=unix
该文件将被回写而没有回车符(CR,^ M)字符.
Pam*_*Pam 124
这是唯一对我有用的东西:
:e ++ ff = dos
发现于:http://vim.wikia.com/wiki/File_format
net*_*ica 105
我在MacVim中看到的用BBEdit创建的文件显示了一堆^M行返回而不是常规行.以下字符串替换解决了问题 - 希望这有助于:
:%s/\r/\r/g
Run Code Online (Sandbox Code Playgroud)
这很有趣,因为我用相同的字符替换换行符,但我想Vim只需要获得一个新的\ r来正确显示.我有兴趣知道为什么这有效的基本机制.
che*_*san 34
首先,:set ff?用来确定文件的文件格式.
我想它可能是unix,那么问题是你的文件是fileformat=dos通过在行结尾添加"^ M ^ J" 创建的,但是flieformat=unix只读取行结束时的"^ J",留下"^ M".
只需:e ++ff=dos在Vim命令行中输入,即可将文件格式从unix更改为dos.它应该解决问题.如果没有,:%s/\r//g应该帮助你.
Met*_*her 28
为了使^ M字符匹配,我必须在视觉上选择它,然后使用OS副本到剪贴板命令来检索它.您可以在尝试替换命令之前通过搜索字符来测试它.
/^M
Run Code Online (Sandbox Code Playgroud)
应该选择第一个坏线
:%s/^M/\r/g
Run Code Online (Sandbox Code Playgroud)
将用回车替换所有错误的^ M.
这是MacVim中的功能,它基于gvim 7.
编辑:
我的Windows 10机器上有这个问题,它有Ubuntu for Windows,我认为这会导致vim的文件格式问题.在这种情况下,将ff更改为unix,mac或dos只会将^ M更改为^ J并再次返回.
在这种情况下的解决方案:
:%s/\r$/ /g
:%s/ $//g
Run Code Online (Sandbox Code Playgroud)
我走这条路的原因是因为我想确保我对我的文件没有破坏性.我可以,:%s/\r$//g但那会立即删除回车,并可能有意想不到的结果.相反,我们将单个CR字符(此处为^ M字符)转换为空格,然后删除行末尾的所有空格(无论如何,这对我来说都是理想的结果)
很抱歉恢复了一个早已被回答的旧问题,但似乎有一些混乱,我想我会帮助清除一些,因为这在Google搜索中很高.
d-_*_*_-b 22
这些都不适合我,所以我尝试了这个,这有效:
类型 :%s/
按 CTRL-VCTRL-M
类型 //g
按 Enter
所以Vim的整体命令看起来像 :%s/^M//g
这样做:( :%s查找和替换)/^M/(该符号)/(没有字符)g(全局).
这个问题有很多其他答案,但是,以下对我来说最好,因为我需要一个命令行解决方案:
vim -u NONE -c 'e ++ff=dos' -c 'w ++ff=unix' -c q myfile
Run Code Online (Sandbox Code Playgroud)
说明:
myfile:e ++ff=dos以强制重新加载整个文件作为dos行结尾.:w ++ff=unix以使用unix行结尾写入文件小智 8
Ctrl+ M最小化我的窗口,但Ctrl+ Enter实际上插入一个^M字符.我还必须确保不要Ctrl在按下之间取下钥匙.
所以我的解决方案是:
:%s/<Ctrl-V><Ctrl-Enter>/\r/g
Run Code Online (Sandbox Code Playgroud)
凡<Ctrl-V><Ctrl-Enter>指按住 Ctrl,按下并释放V,按下并释放Enter,然后释放 Ctrl.
上面的解决方案将在现有行之间添加一条额外的行,因为之后已经有了一个不可见\r的行^M.
要防止这种情况,您需要删除^M字符而不替换它们.
:%s/<Ctrl-V><Ctrl-Enter>//g
Run Code Online (Sandbox Code Playgroud)
其中%"在此缓冲区中"的s意思是"替代",/意思是"(找到)以下模式",<Ctrl-V><Ctrl-Enter>指的是按下以获取^M角色的键(见上文),//意思是"没有任何东西"(或",带有模式")在这两个斜杠之间,它是空的"),并且g是一个标志意思是"全局",而不是第一次出现在一行中.
就我而言,
没有上面的工作,我有一个CSV文件从我的Mac复制到Linux机器,我使用了上述所有命令,但没有任何帮助,但下面的一个
tr "\015" "\n" < inputfile > outputfile
Run Code Online (Sandbox Code Playgroud)
我有一个文件,其中^ M个字符在下面的行之间被切换
Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico,
Run Code Online (Sandbox Code Playgroud)
或者,有一些名为dos2unix和unix2dos的开源实用程序可以执行此操作.在Linux系统上,它们可能默认安装; 对于Windows系统,您可以从http://www.bastet.com/等下载它们.
sed s/^M//g file1.txt > file2.txt
Run Code Online (Sandbox Code Playgroud)
通过同时按下3个键来键入^ M, ctrl + v + m
| 归档时间: |
|
| 查看次数: |
358980 次 |
| 最近记录: |