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

时间:2009-04-28 19:08:11

标签: vim carriage-return line-endings

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

10 个答案:

答案 0 :(得分:139)

当你有Windows行结尾和Unix行的结尾时会发生这种情况。如果您有100行,其中99是\ r \ n,其中一行是\ n,您将看到99 ^ M个字符。修复是找到一行并替换它。或者在文件上运行dos2unix。您可以使用以下命令替换Windows行结尾:

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

答案 1 :(得分:41)

您还可以运行:

:e ++ff=dos

要删除^M:请参阅File format – Vim Tips Wiki

答案 2 :(得分:19)

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

:g/^M$/s///

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

不要忘记做:set ff=dos,否则你最终还是会使用UNIX行结尾保存。

答案 3 :(得分:15)

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

:%s/\r/\r/g

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

答案 4 :(得分:6)

你可以忽略这些字符!

将它放入你的vimrc

  

匹配Ignore / \ r $ /

答案 5 :(得分:4)

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

:set ffs=dos

不仅仅是:ff

答案 6 :(得分:4)

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

:%s/^M/\r/g

要创建^ M我输入CTRL + Q,然后按CTRL + M.

答案 7 :(得分:2)

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

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

function! D2u()
    execute '%s/\r\(\n\)/\1/g'
endfunction
"map d2u :%s/\r\(\n\)/\1/g

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

答案 8 :(得分:2)

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

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

:%s/\r

相当于:

:%s/\r//

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

答案 9 :(得分:0)

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

:%s/\r/\r/g

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