Vim 显示 ^M 符号并且它们不会消失

Vim 显示 ^M 符号并且它们不会消失

我在 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 使用CRLF(换行符,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

相关内容