如果我打开在Windows上创建的文件,所有行都以^M
结尾。
如何一次性删除这些字符?
如果我打开在Windows上创建的文件,所有行都以^M
结尾。
如何一次性删除这些字符?
:%s/^M//g
。dos
(Windows)文件格式加载文件,Vim可能不会显示^M
字符。在这种情况下,您可以使用:set ff=unix
命令,然后使用:w
或:w!
保存文件,Vim会在保存文件时重新格式化它。:set ff=dos
命令,这样Vim就会知道它是一个DOS文件,并使用DOS约定的行尾符。:%s/^M//g
改成 :%s/\r//g
,因为 ^M
只是代表在行首匹配大写字母"M",而 \r
才是回车符的转义字符。 - Bunykset ff=unix
似乎是最好的答案。 - mwfearnley更改视图中的行尾:
:e ++ff=dos
:e ++ff=mac
:e ++ff=unix
这也可以作为保存操作使用(:w单独使用将不会使用您在屏幕上看到的行结束符):
:w ++ff=dos
:w ++ff=mac
:w ++ff=unix
你可以从命令行使用它:
for file in *.cpp
do
vi +':w ++ff=unix' +':q' "$file"
done
:w +ff=unix
比这里大部分其他写法都要好得多,而且 bash 脚本也是一个不错的加分项。 - mkasberg:e ++ff=unix
,但对我最简单有效的方法是使用 :w ++ff=unix
然后退出并重新打开文件。 - Olivier Pons我通常使用
:%s/\r/\r/g
这似乎有点奇怪,但是由于Vim匹配换行符的方式而起作用。我也觉得更容易记住 :)
:set ff=unix
出现任何问题,但我今天打开的那个文件可能特别奇怪。Vim显示它已经是fileformat=unix
,但所有行的结尾都是^M
。这个解决方案对我有用。 - Chris B:%s/\r//g
适用于我。 - Victor Zamanian:%s/\r//g
是唯一一个适用于包含混合DOS和UNIX风格换行符的文件的通用解决方案。典型的解决方案(例如:set ff=unix
,:e ++ff=unix
)假设当前缓冲区的每一行都以相同的换行符样式结束。有时候是这样的;有时候不是。* Cue sadface.* - Cecil Curry我更喜欢使用以下命令:
:set fileformat=unix
你也可以使用mac
或dos
分别将文件转换为Mac或MS-DOS/Windows文件格式。如果文件已经在正确的格式下,则不会进行任何操作。
更多信息请参阅Vim帮助:
:help fileformat
:set fileformat=unix
用于将 DOS 转换为 Unix。
:e ++ff=dos | set ff=unix | w!
在使用VIM的Shell中:vim some_file.txt +'e ++ff=dos | set ff=unix | wq!'
e ++ff=dos
- 强制以 dos
格式打开文件。
set ff=unix
- 将文件转换为 unix
格式。
:%s/\r\+//g
在Vim中,它会去除所有的回车符并只保留换行符。:%s/\r//g
后,它能够完美运行。 - soltyshFrom: File format
[Esc] :%s/\r$//
@ https://gist.github.com/sparkida/7773170
find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;
另外,正如之前的回答中提到的,^M = Ctrl+V + Ctrl+M(不要只输入脱字符“^”和字母“M”)。
vim file.txt +"set ff=unix" +wq
hexdump -C badfile
并且看到了0x0d 0x0a
,也就是"\r\n"
,那就是你的问题所在。需要修复这个问题。 - Yzmir Ramirez^M
,如何去除它? - Henke