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

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

当你有Windows行结尾和Unix结尾时,会发生这种情况。 如果您有100行,则99个是\ r \ n,另一个是\ n,您将看到99 ^ M个字符。 解决办法是find一条线并将其replace。 或者在文件上运行dos2unix。 您可以将Windows行结尾replace为:

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

你也可以运行:

 :e ++ff=dos 

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

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

 :g/^M$/s/// 

为了得到ctrl-M,我通常inputctrl-Q,然后按ctrl-M就可以了。(在某些环境下,它可能是ctrl-V,然后是ctrl-M)。我不知道为什么,但是我发现比rq更容易记住。

不要忘了:set ff=dos ,否则最终还是会保留UNIX行尾。

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

 :%s/\r/\r/g 

这将用Windows CRLFreplaceunix回车。 只是添加以防其他人有问题。

你可以忽略这些字符!

把这个放到你的vimrc中

匹配忽略/ \ r $ /

其实对我来说(在64位窗口,gVIM:7.2)是:

 :set ffs=dos 

不只是:ff

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

 :%s/^M/\r/g 

按CTRL + Q创build^ MItypes,然后CTRL + M。

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

基于richq的回答,我发现这些在我的vimrc中很有用。 注意,第二个是正常的注释,因为它使dd有点混乱,因为Vim将等待另一个关键笔划,如果它是映射的ex命令。

function!  D2U()
    执行'%s / \ r \(\ n \)/ \ 1 / g'
 endfunction这样
 “map d2u:%s / \ r \(\ n \)/ \ 1 / g

第一种是通过在ex中inputcall D2u()来运行,第二种是在编辑模式下按D2u来运行。

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

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

 :%s/\r 

相当于:

 :%s/\r// 

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

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

 :%s/\r/\r/g 

注意:如果你想要整个文件的效果,请使用g