我在 Windows 7 下使用 Vim 7.3,遇到了一个问题。^M
尽管我做了各种努力,但符号并没有消失,:e ++ff=dos
这毫无帮助。
有什么建议么?
答案1
当文件与所使用的行终止符不一致时,通常会出现 ^M。请尝试以下操作:
- 使用 vim创建
testfile
几行随机代码,并在 dos 模式下写入。 然后运行(希望你已经安装了 cygwin):
sed '2s/.$//' testfile > corruptfile
这将删除第二行的最后一个字符,导致使用的行终止符不一致。
- 用 vim打开
corruptfile
。将会出现 ^M 符号,以便您意识到不一致之处。
在现实生活中,只考虑单一类型的行终止符编写的程序可能会产生此类不一致。虽然这些不一致看起来无害,但它们可能会导致其他程序出现问题。例如颠覆不允许将行终止符不一致的文件添加到存储库。其他程序可能会默默失败。
要使 ^M 消失,只需进行全局替换:
:% s/^M//g
^M
通过按压产生:Ctrl+v <Enter>
然后以所需的格式写回文件:
:set ff=dos
:w
答案2
vim 显示为 ^M 的字符是CR
(回车符,ASCII 字符 13)。Windows 使用CR
和LF
(换行符,ASCII 字符 10)对文本文件中的换行符进行编码。Linux/Unix 仅使用LF
来编码换行符,而 Mac OS 仅使用CR
。
如果您在 Linux 机器上打开在 Windows 计算机上创建的文本文件,您可能会看到CR
每行都有尾随字符。有几种方法可以删除它们。一种方法是按照 m000 的建议在 vim 中替换它们,另一种方法是将其替换到recode
文件中:
recode ibmpc..latin1 SOME.TXT
答案3
我用过:%s/\r//g
它只是删除^M
这是 asciinema 教程 https://asciinema.org/a/HcwgOhLo40EPpPCk3PuhVOxjK