![我的文本文件怎么突然就被 ^M 字符填满了?](https://linux22.com/image/84539/%E6%88%91%E7%9A%84%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E6%80%8E%E4%B9%88%E7%AA%81%E7%84%B6%E5%B0%B1%E8%A2%AB%20%5EM%20%E5%AD%97%E7%AC%A6%E5%A1%AB%E6%BB%A1%E4%BA%86%EF%BC%9F.png)
我在 Mac 机器上有一个文本文件,我只使用过 vi/vim 来编辑它。今天,当我使用 vi 打开它时,我注意到到处都是一堆^M
字符。我今天做的唯一不同的事情是echo "some text" >> file.txt
早些时候将其重定向到它,但我似乎无法在不同的文件上重现它。
是什么让这些^M
角色突然出现?
答案1
这是一个部分答案,因为这是假设的,提问者不认为他们做了以下所有事情。
正如在评论经过拉尔夫·伦奎斯特,“Mac 使用^M
作为行结束符,Windows 使用^M^J
,Unix 使用^J
”。 Vim 可以处理所有三种格式。例如,您可以创建一个新文件并指定保存时使用哪个文件,使用(例如):set ff=mac
.
如果你用 vim 打开文件,它可以自动确定编码并适当地显示换行符。但是,vim 只会考虑 中指定的格式fileformats
。因此,如果fileformats=unix,dos
,则 vim 永远不会考虑以 Mac 格式打开文件。因此,如果您在 Mac vim 中创建了一个文件(即使用 Mac 换行符),然后在 Linux vim 中打开该文件(即使用fileformats=unix,dos
),那么您会看到^M
而不是换行符。可以想象,您可能在创建后已经在 Mac 上处理了整个文件。
另一点需要考虑的是,您是否可以以一种格式创建文件,然后将echo foo >> filename
.如果原始格式是 Mac,并且您在 Linux 中追加,则该文件将包含混合格式。假设fileformats
设置自由(即fileformats=unix,dos,mac
,在这种情况下,vim 似乎选择 Mac 格式。