背景
最近在移植代码的时候,遇到一个有意思的现象,用git diff 查看改动的时候,发现很多没改动的文件每一行的后面都有一个^M, 但是用vim 打开这些文件的时候,在每行的结尾有找不到这个 ^M。
目前有两个问题:
- ^M 是怎么来的?
- ^M 为什么在vim 下看不到?
问了解决第一个问题,我们得先知道^M 是什么?
^M 是什么
^M 的出现主要是因为Windows 和 Linux 的换行标准差异导致的:
- 在Windows下每一行结尾,使用是回车(’\n’)和换行(’\r’)来作为换行的标准。
- 在linux下每一行结尾,只是使用一个回车(’\n’)来作为换行的标准;
所以经过Windows 下编辑的文件,在Linux 再打开就会出现这个问题了。好了,现在我们应该可以回答第一个问题了。
隐藏的原因
用vim 打开文件,再输入命令:
:e ++ff=unix %
这样就可以看到^M了。 那么问题来了,为什么不输入命令就看不到呢?我想大家应该都可以猜到,问题应该和==.vimrc== 有关。
没错,就是因为在.vimrc 我们没有指定fileformats ,而是采用compatible。找到原因,就可以知道该如何做了。关掉compatible,并做如下设定:
:set fileformats=unix
去除方法
说了这么多,我们最终的目的还没有解决,要如何移除这些^M呢?我比较喜欢以下两个方法:
- 打开vim,然后输入命令 “:e %s/^M$//g” ;
- 使用命令"dos2unix file"
PS: 第一个方法中的"^M", 请分别通过 ^(ctrl + v)和 M(ctrl + M). 这点很重要哦~
当然如果文件比较多,大家也可以 写一个shell脚本,如果对脚本感兴趣,可以留言给小弟~