Windows 上的 Vim 开始显示 ^M 字符

Posted

技术标签:

【中文标题】Windows 上的 Vim 开始显示 ^M 字符【英文标题】:Vim on Windows started showing ^M characters 【发布时间】:2013-05-15 10:35:44 【问题描述】:

我在运行 PowerShell 2.0 版的 Windows 7 上。

我使用以下 PowerShell 代码(来自此答案:https://***.com/a/65148/360840)来修改我的 PowerShell 配置文件:

"`nNew-Alias which get-command" | add-content $profile

正如预期的那样,它在我的个人资料中附加了有问题的行,但是之后,我的 Vim 会话开始在每行的末尾显示 ^M 个字符。很奇怪!关于导致它的原因以及如何解决它的任何线索?我在 Vim 中尝试了set fileformat=dos,但它什么也没做。

这是我的 Vim 版本信息:

(不知道如何将图片放大 - 这不是它的正常尺寸。)

【问题讨论】:

图像会根据周围元素的大小(即您的帖子的宽度)自动调整大小。只需右键单击它并在浏览器中选择“查看图像”或类似选项。 +1 谢谢,成功了。 【参考方案1】:

vim-faq 14.13. I am seeing a lot of ^M symbols in my file. I tried setting the 'fileformat' option to 'dos' and then 'unix' and then 'mac'. None of these helped. How can I hide these symbols? 中有一些解决问题的选项

您的文件可能是unix 文件格式(所有行都以<CR> 结尾),并且您附加了dos 文件格式的行(以<CR><NL> 结尾的行,这让Vim 感到困惑。

【讨论】:

【参考方案2】:

所以,我遇到了这个问题,解决方案略有不同。我检查了我的文件格式,它是 unix,你可以检查你的 :set fileformat? 它显示了我不想要的所有 ^M 字符......有趣的是,在上面指出的 VIM 手册中:http://vimhelp.appspot.com/vim_faq.txt.html#faq-14.13 声明 ^M 行结尾来自 DOS 文件格式和“如果文件有一些以 结尾的行和一些以 结尾的行,则文件格式设置为 'unix'。”

因此,鉴于此,您似乎希望删除所有 ^M 结尾,并保留结尾,但删除带有 :%s/\r$// 的结尾立即为我解决了这个问题,并且文件格式仍然显示“ Unix'。

这对我有用。作为旁注,为了提供更适合 google 的参考,我想指出我在使用 LocomotiveCMS 时遇到了这个问题。我正在使用 Wagon 将我的 CSS 文件拉回本地工作。当我找回它时,它充满了 ^M 字符,该文件仍然可以正常工作,只是很难看。

【讨论】:

【参考方案3】:

问题是文件损坏了。在这种情况下,Vim 开始显示 ^M 字符以提醒您注意问题。修复是手动删除这些字符(%s/^M//g)

我仍然不清楚,因为这些字符应该在文件中,因为 Windows 文件格式使用它们。但至少问题解决了。

编辑:请参阅带有 dash-tom-bang 的 cmets 交换,它提供了说明。

【讨论】:

Vim 向您显示 ^M 字符不要“提醒”您注意文件(可能)处于 'unix' 模式但 some 行结束的事实以 DOS 行结尾。简单的解决方法是删除所有 ^M 字符,然后更改文件格式。 (不幸的是,您不能通过将文件格式更改为 dos 来修复它,但事实如此。) @dash-tom-bang:但是文件是 on Windows(即 DOS)。我同意您删除 ^M 字符可以解决问题,但这些字符实际上是 needed 在 DOS 上的。这就是为什么我说它仍然不清楚。 +1 您需要删除 ^M 字符,以便当您将文件格式切换为 dos 时,它们不会翻倍。重置文件格式后,您将获得正确的 CRLF 行结尾。 @dash-tom-bang:我明白了,将文件格式设置为 DOS 会插入这些字符。谢谢。 +1 我想补充一点,上面的删除命令%s/^M//g 对我不起作用。我的所有行尾都有一个,但是当我运行它时,它说没有可替换的实例......真的它们只是分散注意力,我不在乎它们是否被删除,我只是不不想看他们!我想知道是否有一个配置行可以隐藏它们。

以上是关于Windows 上的 Vim 开始显示 ^M 字符的主要内容,如果未能解决你的问题,请参考以下文章

去除VIM中打开文件里有的^M字符

Vim 中如何去掉 ^M 字符

linux 解决windows文件迁移到linux后的^M问题

删除文件中的 ^M 字符

Linux下处理^M字符

编辑器上的vim插件,常用到的快捷件