Answers:
:e ++ff=dos
然后:set ff=unix
将结尾转换为理智的格式。
:%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
并在全球范围内进行操作(不只是在线上的第一次出现)。
:%s/<Ctrl-V><Ctrl-M>/\r/g
:(其中\ r用换行符替换^ M)。
在Linux和Mac OS上,以下工作有效,
:%s/^V^M/^V^M/g
其中^V^M
表示类型Ctrl+ V,然后表示Ctrl+ M。
注意:在Windows上,您可能要使用^Q
而不是^V
,因为默认情况下^V
映射为粘贴文本。
%s/\r/\r/g
在MacVim上,对于仅^M
在行尾显示的文件(在MacVim术语中为一长行),该文件相当有效。显然,\ r在模式中与在此命令的替换部分中具有不同的含义。
在中vim
,查看文件格式-DOS或Unix:
:set filetype=unix
:set fileformat=unix
该文件将被写回而没有回车符(CR,^ M)。
set ff=unix
通过以下方式来作为一个快捷方式ft
:filetype
我在MacVim中看到的用BBEdit创建的文件显示的是^M
一行换行符,而不是常规的换行符。以下字符串replace解决了该问题-希望能有所帮助:
:%s/\r/\r/g
很有意思,因为我用相同的字符替换了换行符,但是我认为Vim只需要重新输入\ r就可以正确显示。我很想知道为什么这种机制有效。
\r
字符,但这似乎仍替换了所有字符。不抱怨,那正是我想要的。真奇怪 \n
\r
为了使^ M字符匹配,我必须在视觉上选择它,然后使用OS复制到剪贴板命令来检索它。您可以在尝试替换命令之前通过搜索字符来对其进行测试。
/^M
应该选择第一行
:%s/^M/\r/g
将所有错误的^ M替换为回车。
这是基于gvim 7的MacVim中的功能。
编辑:
我的Windows 10计算机(具有适用于Windows的Ubuntu)在Windows 10计算机上再次遇到此问题,我认为这会导致vim出现文件格式问题。在这种情况下,将ff更改为unix,mac或dos只是将^ M更改为^ J然后再次返回。
在这种情况下的解决方案:
:%s/\r$/ /g
:%s/ $//g
我选择这条路线的原因是,我想确保自己对文件没有破坏性。我可以,:%s/\r$//g
但是那样会立即删除回车,并且可能会产生意想不到的结果。相反,我们将单数CR字符(这里是^ M字符)转换为空格,然后删除行尾的所有空格(无论如何对我来说都是理想的结果)
抱歉,很久以来一直在回答这个老问题,但似乎有一些混乱,我认为我会帮助解决其中的一些问题,因为这在Google搜索中排名很高。
我是用sed完成的:
sed -i -e 's/\r/\n/g' filename
sed -e 's/\r/\n/g' <<< 'over and over'
->oven and oven
sed
但对BSD无效sed
(在OSX上可以找到)。修复换行符的任何人都可能使用多种操作系统,因此弄清楚答案何时起作用将非常有用。
那怎么办:
:%s/\r//g
这完全对我有用。
这样做只是清除所有行的行尾,它删除了^ M,仅此而已。
这个问题还有许多其他答案,但是,由于我需要命令行解决方案,因此以下内容对我来说最有效:
vim -u NONE -c 'e ++ff=dos' -c 'w ++ff=unix' -c q myfile
说明:
myfile
:e ++ff=dos
以强制将整个文件重新装载为dos行结尾。:w ++ff=unix
以Unix行结尾写入文件Ctrl+ M最小化了我的窗口,但是Ctrl+ Enter实际上插入了一个^M
字符。我还必须确保Ctrl在两次按压之间不要抬起钥匙。
所以对我来说解决方案是:
:%s/<Ctrl-V><Ctrl-Enter>/\r/g
凡<Ctrl-V><Ctrl-Enter>
手段按住不放 Ctrl,按下并释放键V,按下并释放键Enter,然后松开 Ctrl。
上面的解决方案将在现有的行之间添加一条额外的行,因为\r
后面已经存在一个不可见的行^M
。
为防止这种情况,您想删除^M
字符而不替换它们。
:%s/<Ctrl-V><Ctrl-Enter>//g
其中%
“在此缓冲区中” s
是指“替代”,/
是“(找到)以下模式”,<Ctrl-V><Ctrl-Enter>
是指按下以获取^M
字符的键(见上文),//
是“无”(或“有模式”在两个斜杠之间,它们之间是空的”),并且g
是一个标志,表示“全局”,与一行中的第一个出现相反。
另外,也可以使用称为dos2unix和unix2dos的开源实用程序来完成此任务。在Linux系统上,它们可能是默认安装的。对于Windows系统,您可以从http://www.bastet.com/下载它们。
使用以下命令之一:
:%s/\r//g
要么
:%s/\r\(\n\)/\1/g
这些建议对我都没有用,^M
在使用vim和eclipse时设法获得了很多换行符。我怀疑我遇到了一个外部案件,但以防万一,这对我所做的任何事情都有帮助。
:%s/.$//g
它解决了我的问题
:g/^M/s// /g
如果您^M
使用键入Shift+6 Caps+M
,则不会接受。
您需要输入ctrl+v ctrl+m
。
^M
产生不必要的换行符。为了解决这个问题,我们可以使用以下sed
命令:
sed 's/\r//g'
“此功能保留跳转列表
fun! Dos2unixFunction()
let _s=@/
let l = line(".")
let c = col(".")
try
set ff=unix
w!
"%s/\%x0d$//e
catch /E32:/
echo "Sorry, the file is not saved."
endtry
let @/=_s
call cursor(l, c)
endfun
com! Dos2Unix keepjumps call Dos2unixFunction()
我花了一个下午努力争取\ n ctrl-v 012(两者都为我提供了null)。并通过这个线程进行工作,直到我到达了传记作者的手。
\r
对我来说很好!
/),/s/),/)\r/g
变成了这样的东西:
blacklist-extra:i386(0.4.1、0.4.1 + nmu1),libmount1:i386(2.20.1-5.1、2.20.1 -5.2),libblkid1:i386(2.20.1-5.1、2.20.1-5.2) ,libapt-pkg4.12:i386(0.9.7.4,0.9.7.5),nmap:i386(6.00-0.1、6.00-0.2),libsane-common:i386(1.0.22-7.3,
变成这样的东西:
26 libwv-1.2-4:i386(1.2.9-3,自动)
27 openjdk-6-jre-headless:i386(6b24-1.11.4-3,自动)
28 jed:i386(0.99.19-2.1)
魔法。我深表感谢