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

Posted

技术标签:

【中文标题】即使文件模式显式为 DOS,gVim 也会显示回车符 (^M)【英文标题】:gVim showing carriage return (^M) even when file mode is explicitly DOS 【发布时间】:2010-10-22 09:57:15 【问题描述】:

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

【问题讨论】:

查看 vim.wikia.com/wiki/File_format 以获得对 vim/gvim 中行尾的全面解释。此链接还说明了如何解决问题。 【参考方案1】:

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

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

【讨论】:

我在你写这篇文章之前发现了一行。 :) 谢谢! 嘿,典型的。 Vim 很棒,所以坚持下去! :-) 我希望我能给你+1000 我通常只是用:%s/^M//打他们 如果您希望在完成后成为 dos,应添加到 :set ff=dos,阿拉埃文的回答。【参考方案2】:

你也可以运行:

:e ++ff=dos

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

【讨论】:

这是我一直在寻找的,并且是实际的正确答案。谢谢。【参考方案3】:

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

:g/^M$/s///

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

不要忘记也使用:set ff=dos,否则您最终会以 UNIX 行结尾来保存。

【讨论】:

是的,我通常使用 ^M 版本和 Ctrl-Q 等等。但是更难解释 ;-) 并且小组赛版本是复制粘贴友好的。【参考方案4】:

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

:%s/\r/\r/g

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

【讨论】:

【参考方案5】:

您可以忽略这些字符!

把它放到你的 vimrc 中

匹配忽略/\r$/

【讨论】:

很高兴知道它的存在,但是是否有一个很好的用例可以在文件中留下不匹配的行尾?好像是在自找麻烦。 这正是我所需要的(更改文件并不总是可取的,因为它会导致在某些版本控制系统中显示的文件发生大量更改) 不幸的是,这会在您保存文件后立即更改行尾。所以它在空白中产生了这些不需要的大变化,只是没有显示给你。至少对我来说。 :(【参考方案6】:

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

:set ffs=dos

不仅仅是:ff

【讨论】:

【参考方案7】:

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

:%s/^M/\r/g

要创建 ^M,我先按 CTRL+Q,然后按 CTRL+M。

【讨论】:

【参考方案8】:

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

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

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

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

【讨论】:

【参考方案9】:

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

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

:%s/\r

相当于:

:%s/\r//

但结尾的斜杠不是必需的(假设是这样)。

【讨论】:

【参考方案10】:

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

:%s/\r/\r/g

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

【讨论】:

以上是关于即使文件模式显式为 DOS,gVim 也会显示回车符 (^M)的主要内容,如果未能解决你的问题,请参考以下文章

vim即gvim的炫酷搜索模式与技巧

即使在生产模式下构建,VueJS也会显示“开发模式”消息

Laravel 验证规则 - 要求字段显式为空,具体取决于另一个字段的值 (type_id)

在DOS下 退出文件夹的命令是啥 ?????

即使选择了文件,也会显示CodeIgniter文件验证

为啥很多网站没有显式的添加favicon.ico,也会显示网站小图标呢?