vim 中 ^M 解决方法

有两种情况,会在打开的文件中出现 ^M 符号:

1. vim 被配置为 fileformat=unix,而打开的文件是 dos 格式。

unix 格式的换行符 ascii 码为 OA (<LF>),dos 格式的换行符 ascii 码为 OD OA (<CR><LF>),而 OD 在 vim 里就显示为 ^M。

dos, mac 和 unix 格式的简介

回想计算机的史前史,那时的打字机使用两个字符来开始新的一行。首先是回车字符 OD 使打印头移回开始位置,然后用进纸字符 OA 使打印机向前进纸一行。

在计算机诞生之初,存储设备十分昂贵。于是有人就提出没有必要用两个字符来表示一行的结束。unix 一族决定只用进纸一个字符 <LineFeed> 来表示行尾。来自苹果阵营的人则把回车 OD 作为换行的标准。而微软公司(ms-dos,windows)仍然决定沿用古老的回车换行 OD OA 传统。

这就意味着文件在不同系统间转移时,会遇到与换行相关的问题。vim 编辑器则可以识别这些不同格式的文件。你可以在 fileformats 选项里指定你希望 vim 能自动识别的格式集合。

下面这条命令就能让 vim 自动识别 unix 格式和 ms-dos 格式:
:set fileformats=unix,dos
把这条命令写在 vimrc 中,通常情况下都能自动识别。

2. 你的文本中既有 unix 的换行符,又有 dos 的换行符,那么 vim 会认为你打开的是 unix的,所以那些 dos 的换行符就会出现恼人的 ^M。不过这种情况不常见,方法如下:

1)若你的 vim 版本大于 7.1 并想用 dos 显示和保存,执行命令:
:e ++ff=dos

2)若你的 vim 版本小于等于 7.1 又想把文章按照 dos 格式显示和保存,执行命令:
:set ff=dos
:%s/\r\+$//e

3)若你的 vim 版本小于等于 7.1 又想把文章按照 unix 格式显示和保存,执行命令:
:set ff=unix
:%s/\r\+$//e

发表评论