When I am editing source files using vim and other editors sometimes at the end of the line I get these ^M characters at the end of each line. I think that it has something to do with editing a file in windows and then in linux. How can I remove all of these automatically?
问题:
回答1:
As a command, type
:%s/^M$//
(To get ^M, press ^V ^M, where ^ is CTRL on most keyboards)
回答2:
One easy way to strip out the DOS line endings is to use the ff
option:
:set ff=unix
:wq
Now your file is back to the good-old-Unix-way.
If you want to add the DOS line-endings (to keep a printer happy, or transfer files with Windows friends who don't have nice tools) you can go the opposite direction easily:
:set ff=dos
:wq
回答3:
You can do this:
:set fileformats=dos
It will hide the ^M
's, without touching the file.
回答4:
There's a program called dos2unix that should strip those for you. Windows uses different line-ending characters which is why that happens.
回答5:
This worked for me in a file that had everything on one line:
First find all matches
:%s/^M//
(To get ^M
, press ^V ^M, where ^ is Ctrl on most keyboards)
Then replace with newlines
:%s//\r/g
Combined command would be:
:%s/^M/\r/g
回答6:
I tend to run afflicted files through fromdos
before reopening them. fromdos
is part of the tofrodos package.
回答7:
The origin of the problem may have been through an FTP transfer. When you FTP these files from one box to another, make sure to use ASCII transfers. Use the command "ASC."
回答8:
" put this in your ~/.vimrc file and :source ~/.vimrc
" then you can do: Dos2Unix
" dos2unix ^M
fun! Dos2unixFunction()
let _s=@/
let l = line(".")
let c = col(".")
try
set ff=unix
w!
"%s/\%x0d$//e
catch /E32:/
echo "Sorry, first save the file."
endtry
let @/=_s
call cursor(l, c)
endfun
com! Dos2Unix keepjumps call Dos2unixFunction()
回答9:
mcedit: shift+f2, set unix format (LF), ok