^M no final de cada linha em vim
Quando estou a editar ficheiros de código usando o vim e outros editores, às vezes, no fim da linha, recebo estes caracteres ^M no fim de cada linha. Acho que tem algo a ver com a edição de um arquivo no windows e depois no linux. Como posso remover todos estes automaticamente?
9 answers
Como um comando, Tipo
:%s/^M$//
(para obter ^M, carregue em ^V ^M, onde ^ é CTRL na maioria dos teclados)
Uma maneira fácil de remover as terminações da linha DOS é usar a opção ff
:
:set ff=unix
:wq
Agora o teu ficheiro está de volta ao bom e velho Unix-way.
Se quiser adicionar as terminações de linha DOS (para manter uma impressora feliz, ou transferir ficheiros com os amigos do Windows que não têm ferramentas bonitas), poderá ir na direcção oposta facilmente:
:set ff=dos
:wq
Podes fazer isto:
:set fileformats=dos
Vai esconder os ^M
sem tocar no ficheiro.
Há um programa chamado dos2unix que deve tirar esses para ti. O Windows usa diferentes caracteres de fim de linha, e é por isso que isso acontece.
Primeiro encontra todas as correspondências
:%s/^M//
(para obter ^M
, Carregue em ^V ^M, onde ^ é Ctrl na maioria dos teclados)
Depois substituir por linhas novas
:%s//\r/g
O comando combinado seria:
:%s/^M/\r/g
fromdos
antes de reabri-los. fromdos
faz parte da tofrodos Pacote.
A origem do problema pode ter sido através de uma transferência FTP. Quando você FTP estes arquivos de uma caixa para outra, certifique-se de usar ASCII transferências. Use o comando " ASC."
" 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()
Mcedit: shift+f2, set unix format( LF), ok