gVim 显示回车符 (^M),即使文件模式明确为 DOS

问题描述 投票:0回答:10

我在 Windows 上使用 gVim。我的代码在行尾显示

^M
字符。我用了
:set ff=dos
没有效果。
^M
字符在现有行中保留,但在我输入的换行符中不会显示。我已将模式切换到 mac(显示
^J
字符)和 unix(还显示
^M
字符)并返回到 dos。还有其他人看过这个吗?

vim carriage-return line-endings
10个回答
144
投票

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

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


45
投票

您还可以运行:

:e ++ff=dos

要删除

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


19
投票

我通常使用以下方法来清理行尾:

:g/^M$/s///

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

也不要忘记执行

:set ff=dos
,否则您最终保存的结果仍然是 UNIX 行结尾。


15
投票

我知道这个问题已经得到解答,但我使用的一个技巧是

:%s/\r/\r/g

这用 Windows CRLF 替换了 UNIX 回车符。只是添加以防其他人遇到问题。


6
投票

您可以忽略这些字符!

将其放入你的 vimrc 中

匹配忽略/ $/


5
投票

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

:%s/^M/\r/g

为了创建

^M
,我使用了以下键盘组合
CTRL+Q, CTRL+M


4
投票

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

:set ffs=dos

不只是:ff


2
投票

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

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

功能! D2u()
    执行'%s/
\(
\)/ /g'
结束功能
“地图 d2u :%s/
\(
\)/ /g

第一个是通过在 ex 中输入

call D2u()
来运行,第二个是在编辑模式下按
D2u
来运行。


2
投票

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

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

:%s/\r

相当于:

:%s/\r//

但末尾斜杠不是必需的(它们是假设的)。


2
投票

尝试了很多方法,但以下方法有效

:%s/\r/\r/g

注意:如果您想要对整个文件产生效果,请使用g

© www.soinside.com 2019 - 2024. All rights reserved.