Windows ^M位于vim中每条线的末端

Windows ^M位于vim中每条线的末端,windows,linux,vim,Windows,Linux,Vim,当我使用vim和其他编辑器编辑源文件时,有时会在每行的末尾得到这些^M字符。我认为这与在windows和linux中编辑文件有关。如何自动删除所有这些内容?有一个名为的程序,可以为您删除这些内容。Windows使用不同的行尾字符,这就是为什么会出现这种情况。作为命令,键入 :%s/^M$// 要获取^M,请按^V^M,其中^C是大多数键盘上的CTRL键问题的根源可能是通过FTP传输。当您将这些文件从一个框FTP到另一个框时,请确保使用ASCII传输。使用ASC命令。我倾向于在重新打开受影响的文

当我使用vim和其他编辑器编辑源文件时,有时会在每行的末尾得到这些^M字符。我认为这与在windows和linux中编辑文件有关。如何自动删除所有这些内容?

有一个名为的程序,可以为您删除这些内容。Windows使用不同的行尾字符,这就是为什么会出现这种情况。

作为命令,键入

:%s/^M$//

要获取^M,请按^V^M,其中^C是大多数键盘上的CTRL键

问题的根源可能是通过FTP传输。当您将这些文件从一个框FTP到另一个框时,请确保使用ASCII传输。使用ASC命令。

我倾向于在重新打开受影响的文件之前通过fromdos运行这些文件。fromdos是软件包的一部分。

您可以执行以下操作:

:set fileformats=dos

它将隐藏^M,而不接触文件。

这在一个所有内容都集中在一行的文件中非常有效:

首先查找所有匹配项

:%s/^M//
要获取^M,请按^V^M,其中^C是大多数键盘上的Ctrl键

然后替换为换行符

:%s//\r/g
联合指挥将是:

:%s/^M/\r/g

去除DOS行结尾的一种简单方法是使用ff选项:

现在,您的文件又回到了旧的Unix方式

如果您想添加DOS行结尾以使打印机满意,或与没有好工具的Windows朋友传输文件,您可以轻松地选择相反的方向:

:set ff=dos
:wq

mcedit:shift+f2,设置unix格式LF,ok

这是因为Windows使用通常写入的两个字符序列来表示换行符,而unix/Linux仅使用第二个字符来表示换行符。因此,当你在Linux编辑器中编辑一个Windows文本文件时,编辑器会看到额外的字符,这些字符不考虑断线的一部分,所以它试图渲染它们,结果出来的是戴维。Vim将很高兴地编辑一个带有DOS行结尾的文本文件,而不显示所有这些^Ms。在Vim中编辑DOS文本文件时,唯一的指示是statusline选项值中是否有%{&ff}。行结束样式混合时,Vim显示^M。这意味着您使用的文本编辑器没有Vim那么精明,它没有像Vim默认使用的那样遵循现有的行尾样式。如果您在Windows上使用Vim或其他类似于Vim的工具,您将不会得到像这样的损坏的行尾。也可能是重复的,:%s/\r$//为了避免^V^M hassleOr,保存一个字符::%s/\r$@sehe从技术上讲可以保存两个字符:@glennjackman,您的提示要简单得多,因为我一直在努力获取^V+^M,所以根本没有发生。我得到的只是剪贴板中的内容,因为^V每次都很有效,尽管我多次尝试使用不同的策略来同时获得它们。谢谢,我想知道如何在搜索替换中实际输入Ctrl-M!vim找不到任何^m或\r或任何其他行尾,但这起作用。谢谢:Vim找不到任何^M或\r,但这确实对我有用!谢天谢地@sarnoldit看起来git太蠢了,无法将此检测为单个字符的更改。我在Vim中运行了这个,git diff显示了删除的每一行和添加的每一行:/Tommy,这是对diff的限制,而不是对git的限制。
:set ff=unix
:wq
:set ff=dos
:wq