^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?

Author: DHamrick, 2009-07-10

9 answers

Como um comando, Tipo

:%s/^M$//

(para obter ^M, carregue em ^V ^M, onde ^ é CTRL na maioria dos teclados)

 114
Author: Tobias Baaz, 2009-07-10 16:51:58

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
 79
Author: sarnold, 2011-12-05 12:05:08

Podes fazer isto:

:set fileformats=dos
Vai esconder os ^M sem tocar no ficheiro.
 33
Author: jqno, 2009-07-10 22:16:22

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.

 15
Author: Adam Lassek, 2009-07-10 16:51:17
Isto funcionou comigo num ficheiro que tinha tudo numa linha.

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
 6
Author: TheRealKingK, 2011-10-31 07:14:44
Tenho tendência a correr ficheiros afligidos por todo o lado.fromdos antes de reabri-los. fromdos faz parte da tofrodos Pacote.
 2
Author: Ted Percival, 2009-07-10 22:10:08

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."

 1
Author: Spencer Ruport, 2014-09-09 18:37:02
" 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()
 0
Author: SergioAraujo, 2011-10-31 10:48:06

Mcedit: shift+f2, set unix format( LF), ok

 0
Author: Vasily Chapaev, 2014-12-17 08:18:25