Converter os finais de linha do DOS em finais de linha do Linux no vim

Se eu abrir arquivos que criei no Windows, todas as linhas terminarão com ^M
Como excluo esses caracteres de uma vez?

dos2unix é um utilitário de linha de comando que fará isso, ou :%s/^M//g será usado se você usar Ctrlv Ctrlm para inserir o ^ M, ou você pode :set ff=unix e vim fará isso por você.

Os documentos na configuração ‘fileformat’ estão aqui , e o wiki do vim tem uma página abrangente on line ending conversions .

Alternativamente, se você mover arquivos muito para frente e para trás, você pode não querer convertê-los, mas sim fazer :set ff=dos , então o vim saberá que é um arquivo DOS e usará convenções do DOS para finais de linha.

Altere os alinhamentos na exibição:

 :e ++ff=dos :e ++ff=mac :e ++ff=unix 

Isso também pode ser usado como operação de salvamento (só não será possível salvar usando os alinhamentos que você vê na canvas):

 :w ++ff=dos :w ++ff=mac :w ++ff=unix 

E você pode usá-lo a partir da linha de comando:

 for file in $(ls *cpp) do vi +':w ++ff=unix' +':q' ${file} done 

Eu normalmente uso

 :%s/\r/\r/g 

o que parece um pouco estranho, mas funciona por causa da maneira como o vim combina com linefeeds. Eu também acho mais fácil de lembrar 🙂

Eu prefiro usar o seguinte comando:

 :set fileformat=unix 

Você também pode usar mac ou dos para converter seu arquivo para a convenção de arquivo macintosh ou MS-DOS / MS-Windows, respectivamente. E não faz nada se o arquivo já estiver no formato correto.

Para mais informações, veja a ajuda do vim:

 :help fileformat 
 :%s/\r+//g 

No Vim, isso retira todos os retornos de carro e deixa apenas novas linhas.

:set fileformat=unix para converter dos para unix.

dos2unix pode modificar diretamente o conteúdo do arquivo.

Você pode usá-lo diretamente no arquivo, sem necessidade de redirecionamento de arquivo temporário.

 dos2unix input.txt input.txt 

O acima usa o teclado US assumido. Use a opção - 437 para usar o teclado do Reino Unido.

 dos2unix -437 input.txt input.txt 

Converter diretório de arquivos do dos para o Unix

Usando linha de comando e sed, encontre todos os arquivos no diretório atual com a extensão “.ext” e remova todos os “^ M”

@ https://gist.github.com/sparkida/7773170

 find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done; 

também, como mencionado acima ^ M = Ctrl + V + Ctrl + M (não basta digitar o símbolo de circunflexo “^” e M)

 tr -d '\15\32' < winfile.txt > unixfile.txt 

(veja: http://kb.iu.edu/data/acux.html )

As etapas a seguir podem converter o formato de arquivo para dos para unix:

 :e ++ff=dos Edit file again, using dos file format ('fileformats' is ignored).[A 1] :setlocal ff=unix This buffer will use LF-only line endings when written.[A 2] :w Write buffer using unix (LF-only) line endings. 

Referência: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix

Com o seguinte comando:

 :%s/^M$//g 

Pegue o ^M para aparecer tipo Ctrl V e depois Ctrl M. Ctrl V diz ao Vim para pegar o próximo caractere typescript literalmente.

O comentário sobre colocar o ^ M para aparecer é o que funcionou para mim. Apenas digitando “^ M” no meu vi não tem nada (não encontrado). A seqüência CTRL + V CTRL + M fez isso perfeitamente.

Meu comando de substituição de trabalho foi

 :1,$s/Ctrl-V Ctrl-M/\r/g 

e ficou assim na minha canvas:

 :1,$s/^M/\r/g 
 :g/Ctrl-v Ctrl-m/s/// 

Ctrl M é o caractere \r , ou retorno de carro, que os finais de linha do DOS adicionam. Ctrl V informa ao vim para inserir um caractere literal Ctrl M na linha de comando.

Tomado como um todo, este comando substitui todos os com nada, removendo-os das extremidades das linhas.

Você pode usar:

 vim somefile.txt +"%s/\r/\r/g" +wq 

ou dos2unix utility .

Eu encontrei uma maneira muito fácil: Abra o arquivo com nano: nano file.txt

Pressione CTRL + O para salvar, mas antes de pressionar Enter , pressione: ALT + D para alternar entre as terminações de linha do DOS e Unix / Linux, ou: ALT + M para alternar entre as terminações de linha Mac e Unix / Linux e pressione Enter para salvar. e CTRL + X para sair.

Você pode usar o seguinte comando:
:%s/^V^M//g
onde o ‘^’ significa usar a tecla CTRL .

abaixo o comando é usado para reformatar todo o arquivo .sh no diretório atual, eu testei no meu sistema operacional Fedora.

 for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done 

Geralmente existe um comando dos2unix você pode usar para isso, apenas certifique-se de ler o manual, já que as versões GNU e BSD diferem em como eles lidam com os argumentos.

Versão BSD:

 dos2unix $FILENAME $FILENAME_OUT mv $FILENAME_OUT $FILENAME 

Versão GNU:

 dos2unix $FILENAME 

Alternativamente, você pode criar seu próprio dos2unix com qualquer uma das respostas propostas aqui, por exemplo:

 function dos2unix(){ [ "${!}" ] && [ -f "{$1}" ] || return 1; { echo ':set ff=unix'; echo ':wq'; } | vim "${1}"; } 

Eu sabia que tinha visto isso em algum lugar. Aqui está a dica de login do FreeBSD:

Precisa remover todos os caracteres ^ M de um arquivo DOS? Experimentar

 tr -d \\r < dosfile > newfile -- Originally by Dru  

No vim, digite:

 :w !dos2unix % 

Isso canalizará o conteúdo do seu buffer atual para o comando dos2unix e gravará os resultados sobre o conteúdo atual. O Vim pedirá para recarregar o arquivo após

Embora este tópico seja muito antigo, gostaria de colocar outras coisas da wikia:

 %s/\r\+$//g 

que preencher encontrar todos os sinais de retorno de carro (um e mais repetições) até o final da linha e apagar, então apenas \n vai ficar no eol.

Esse é meu jeito. Eu abri um arquivo no DOS EOL e quando eu salvar o arquivo que irá converter automaticamente para unix EOL

 autocmd BufWrite * :set ff=unix 

Se você criar um arquivo no NotePad ou NotePad ++ no Windows e trazê-lo para o Linux e abri-lo pelo vim, você verá ^ M no final de cada linha. Para remover isso,

No seu terminal Linux, digite

dos2unix filename.ext

Isso fará a mágica necessária.

Eu queria novas linhas no lugar das ^ M’s. Perl para o resgate:

 perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt 

Ou para escrever para stdout:

 perl -p -e 's/\x0d/\n/g' < excel_created.txt