背景
最近在移植代碼的時候,遇到一個有意思的現象,用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腳本,如果對腳本感興趣,可以留言給小弟~