vim打開文件時在行尾顯示^M,這樣的情況時不時會遇到,下面稍微深入了解下這個問題;
原理呢,其實很簡單:Windows換行風格(也叫dos風格)的文本以Unix風格解析就會出現這個情況;
首先重現這個情況
在Windows用notepad創建一個文件a.txt,隨便寫點內容進去,然后拷貝到Linux;
此時在Linux中用vim打開是看不到^M的,因為在vim中可以看到fileformat是dos:
:set ff
fileformat=dos
解析風格與原風格一致當然不會出現^M,思路呢就是把解析風格改為unix才能重現;
注意這里使用:set ff=unix是不行的,因為這個命令vim會自動把文本風格和解析風格同時改為unix;
實驗表明用>>,sed等外部修改命令就可以達到效果:
# echo end >> a.txt
# vim a.txt
:set ff
fileformat=unix
在第一條命令執行后,用vim打開就可以看到^M了;
檢查這個問題
如果有很多文件想確認下是否存在這個問題,總不能一個個去vim打開查看吧,可以用下面兩個命令;
注意:Linux命令行的^M=ctrl+v,ctrl+m,就是按住ctrl然后依次單擊v和m即可;
# grep "^M" -lr .
# file `find -type f` | grep CRLF
解決這個問題
了解了原理其實解決起來就很簡單了;
在vim中解決單個文件:
:%s/^M$//g
批量解決:
# sed -i "s/^M//" `grep "^M" -lr .`
over