標籤:

Vim 中如何去掉 ^M 字元?

windows環境下用Vim打開文件後出現好多^M字元,什麼原因,怎麼去掉?


刪除行尾的^M:%s/
//g


基於 DOS/Windows 的文本文件在每一行末尾有一個 CR(回車)和 LF(換行),而 UNIX 文本只有一個換行,即win每行結尾為
,而linux只有一個

如果win下的文檔上傳到linux,每行的結尾都會出現一個^M,(^M是ctrl+v,ctrl+m)

如果是單個文檔的話,可以用vi打開,執行 :%s/^M//g 來去掉^M,

但如里批量去除的話就不能用vi了,

方法1: 用dos2unix工具,

把win文檔轉換成linux下文檔

命令:

find ./ -type f -print0 | xargs -0 dos2unix

如果想把linux下的文檔轉換成win下的:

find ./ -type f -print0 | xargs -0 unix2dos

方法2: 用sed命令

把win文檔轉換成linux下文檔:

find ./ -type f print0 | xargs -0 sed -i "s/^M$//"

把linux下的文檔轉換成win下的

fild ./ -type f print0 | xargs -0 sed -i "s/$/^M/"


google搜索"Vim 中如何去掉 ^M 字元"結果前兩個

刪除文件中的 ^M 字元

Windows Linux 文件格式之迷 &< VI下刪除文本中的^M&>


用vim打開那些在win編輯過的文檔的時候,我一般都先

:set ff=unix

這樣那個^M的問題也順帶解決了 // ..


遇到這種結尾符號可以設置編輯器的換行風格,比如上圖,這樣再用 vim 打開就不會有問題了。


vim下 :%s/^M//g 或者 :1,$s/^M//g 均可

補充一點:

^M是使用 "CTRL-V CTRL-M" 而不是字面上的 ^M


不用在vim裡面去啊,直接在終端敲命令就好了。$ fromdos filename


dos2unix


dos2unix filename


曾經因為這個找了很久的BUG(當時用的hive調python程序的時候碰到這個問題會報一個很奇怪的錯誤),具體的解決方法網上能搜出來很多,其他回答也都給出了答案,主要是想提醒一個深刻的教訓:

遇到windows下的程序在linux下出現問題,一定記得cat -A 看一下源文件,或者提前設置好windows下IDE裡面的換行符,再或者直接vim來寫


^M可以通過Ctrl+v,Ctrl+m按出來,sed替換也可以啊。


把這兩行放到vimrc里,以後打開文件看到^M直接按一下F2,如果快捷鍵有衝突你也可以改成別的。

inoremap & &:%s/
//g& gg

nnoremap & :%s/
//g& gg


dos2unix 方便,快速,好用


不僅vim打開有,emacs也有,所以是寫文件的問題-==-

比如,fprintf(wp,"pos1-exclsats =%s # (prn ...)
", sal);這句話完全沒問題,但是生成的文件都有那個符號。

如果寫成fprintf(wp,"pos1-exclsats =%s # (prn ...)
", sal);就ok

1.回車換行符,是2個符。一個回車,一個換行。
僅僅是回車,
是換行。一個是控制屏幕或者從鍵盤的Enter鍵輸入。另一個是控制「印表機」!

2.回車 = 游標到達最左側,換行 = 移到下一行。如果只回車,列印的東西會覆蓋同行以前的內容,如果只換行,列印的東西會在下一行的先一個位置繼續。

3.
實際是回到行首。
如果下一行已經有了一些內容的話它會在那些內容的後邊.因為一般情況下下一行是沒有數據的,很多時候
也就成了
作用一樣。


替換命令就可以了,輸入^M的時候按住ctrl鍵不放,依次按下v和m

如全文替換為空(沒有):

1,$s/^M//g


推薦閱讀:

如何通過vim快捷鍵瀏覽知乎及其他網站 ?
你為了真正做到使用vim提高效率,花了多長時間學習和練習?
為什麼vim只支持等寬字體?
哪兩個字母不可能連在一起?
Vim和Emacs哪個用戶數量更多?

TAG:Vim |