81

我在 Windows 上使用 gVim。我的代码^M在行尾显示字符。我曾经:set ff=dos无济于事。这些^M字符保留在现有行中,但不会出现在我输入的换行符中。我已将模式切换到 mac(显示^J字符)和 unix(也显示^M字符)并返回到 dos。有没有其他人看过这个?

4

10 回答 10

142

当您混合使用 Windows 行尾和 Unix 行尾时,就会发生这种情况。如果您有 100 行,其中 99 行是 \r\n,1 行是 \n,您将看到 99 个 ^M 字符。解决方法是找到那一行并替换它。或者在文件上运行 dos2unix。您可以将 Windows 行尾替换为:

:%s/\r\(\n\)/\1/g

于 2009-04-28T19:12:06.437 回答
43

您还可以运行:

:e ++ff=dos

要删除^M: 请参阅文件格式 – Vim Tips Wiki

于 2011-07-26T14:37:57.343 回答
19

我通常使用以下内容来清理我的行尾:

:g/^M$/s///

要获得 ctrl-M,我通常输入 ctrl-Q,然后输入 ctrl-M 并将其放入。(在某些环境中,它可能是 ctrl-V,然后是 ctrl-M。)我不知道为什么,但我发现一个比rq更容易记住。

不要忘记也这样做:set ff=dos,否则您最终仍会以 UNIX 行结尾保存。

于 2009-04-29T00:00:28.070 回答
15

我知道这已经得到了回答,但我使用的一个技巧是

:%s/\r/\r/g

这用 windows CRLF 替换了 unix 回车。只是添加以防其他人有问题。

于 2010-05-28T19:22:27.057 回答
6

你可以忽略这些字符!

把它放到你的 vimrc 中

匹配忽略/\r$/

于 2013-03-24T11:10:09.433 回答
4

实际上对我有用的(在 64 位 Windows 上, gVIM: 7.2 )是:

:set ffs=dos

不只是:ff

于 2010-12-02T15:58:29.870 回答
4

在 Windows 7 上运行 Vim 7.3。我使用了以下命令:

:%s/^M/\r/g

要创建 ^MI,输入 CTRL+Q,然后 CTRL+M。

于 2011-05-31T16:56:12.543 回答
2

这对你们中的许多人来说可能有点简单,但它很有用。

根据richq 的回答,我发现这些在我的vimrc 中很有用。注意,第二个通常被注释掉,因为它使 dd 有点混乱,因为如果它是映射的 ex 命令,Vim 将等待另一个击键来解决。

功能!D2u()
    执行 '%s/\r\(\n\)/\1/g'
结束功能
"映射 d2u :%s/\r\(\n\)/\1/g

第一个是通过键入 ex 来运行的,第二个是通过在编辑模式下call D2u()按下来运行的。D2u

于 2013-01-18T14:20:11.203 回答
2

这些是额外的 CR 行结尾,通常是因为在混合 UNIX/DOS 系统上使用文件。

从每行末尾删除单个 ^M 的最短答案可能是:

:%s/\r

这相当于:

:%s/\r//

但不需要结尾斜杠(假设它们)。

于 2013-06-19T11:31:25.463 回答
2

尝试了很多东西,但以下工作

:%s/\r/\r/g

注意:如果要对整个文件产生影响,请使用g

于 2017-09-01T13:32:37.040 回答