【发布时间】:2011-03-16 16:11:42
【问题描述】:
我刚从朋友那里得到一个源代码文件。该文件是在 UNIX 中创建的。当我在 Windows 中使用 NotePad++ 打开它时,每一行都有一个额外的空白行。
疑惑,我下载了 Vim 并用它打开了文件。然后我在每行的末尾看到一堆^M。
这是什么^M?如何防止它被插入?
【问题讨论】:
标签: text-files
我刚从朋友那里得到一个源代码文件。该文件是在 UNIX 中创建的。当我在 Windows 中使用 NotePad++ 打开它时,每一行都有一个额外的空白行。
疑惑,我下载了 Vim 并用它打开了文件。然后我在每行的末尾看到一堆^M。
这是什么^M?如何防止它被插入?
【问题讨论】:
标签: text-files
这是一个回车。 DOS/Windows 编辑器倾向于使用回车和换行,Unix 编辑器喜欢只使用换行。 geany 和 textpad 等一些编辑器可以检测到它并且不会显示 ^M,而有些编辑器会让您保存,因为选择包括 unix 样式或 crlf 样式。还有一个问题是在某些编译器过去需要的文件末尾有一个 EOF。
【讨论】:
它是一个 Windows 人工制品。你有两个选择
【讨论】:
那些是 DOS/Windows 风格的行尾(为了迂腐,这就是他们现在通常所说的,但大多数早期的非 UNIX 操作系统,如 CP/M 和 OS/2 也有它们)。在各种 Unices 上,行尾是 \n。在 DOS/Windows 中,行尾是 \r\n(CR+LF 或回车和换行)。 \r 显示为 ^M。要在 vim 中删除它们,我会这样做:
:%s/^M//
您可以通过执行 CTRL+V 然后 CTRL+M
来获得 ^M >如果您使用的是 UNIX 系统,则可以使用 dos2unix。
【讨论】:
^M 不被后期 vim (8.xx) 识别。您必须从源中复制并粘贴^M 以避免此问题这可能是因为^ 和^ 在MSDOS 和Unix 中是不同的字符