vim 打開文件後會顯示^M問題

背景

最近在移植代碼的時候,遇到一個有意思的現象,用git diff 查看改動的時候,發現很多沒改動的文件每一行的後面都有一個^M, 但是用vim 打開這些文件的時候,在每行的結尾有找不到這個 ^M。
目前有兩個問題:

  1. ^M 是怎麼來的?
  2. ^M 爲什麼在vim 下看不到?

問了解決第一個問題,我們得先知道^M 是什麼?

^M 是什麼

^M 的出現主要是因爲Windows 和 Linux 的換行標準差異導致的:

  1. 在Windows下每一行結尾,使用是回車(’\n’)和換行(’\r’)來作爲換行的標準。
  2. 在linux下每一行結尾,只是使用一個回車(’\n’)來作爲換行的標準;
    所以經過Windows 下編輯的文件,在Linux 再打開就會出現這個問題了。好了,現在我們應該可以回答第一個問題了。

隱藏的原因

用vim 打開文件,再輸入命令:

:e ++ff=unix %

這樣就可以看到^M了。 那麼問題來了,爲什麼不輸入命令就看不到呢?我想大家應該都可以猜到,問題應該和==.vimrc== 有關。
沒錯,就是因爲在.vimrc 我們沒有指定fileformats ,而是採用compatible。找到原因,就可以知道該如何做了。關掉compatible,並做如下設定:

:set fileformats=unix

去除方法

說了這麼多,我們最終的目的還沒有解決,要如何移除這些^M呢?我比較喜歡以下兩個方法:

  1. 打開vim,然後輸入命令 “:e %s/^M$//g” ;
  2. 使用命令"dos2unix file"

PS: 第一個方法中的"^M", 請分別通過 ^(ctrl + v)和 M(ctrl + M). 這點很重要哦~

當然如果文件比較多,大家也可以 寫一個shell腳本,如果對腳本感興趣,可以留言給小弟~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章