Como converter o linebreak ^ M para linebreak ‘normal’ em um arquivo aberto no vim?

O vim mostra em todas as linhas que terminam em ^ M

Como faço para replace isso por um quebra de linha “normal”?

Essa é a única coisa que funcionou para mim:

: e ++ ff = dos

Encontrou-o em: http://vim.wikia.com/wiki/File_format

Comando

 :%s//\r/g 

Onde significa digitar Ctrl + V, em seguida, Ctrl + M.

Explicação

 :%s 

substitute,% = todas as linhas

  

^ M caracteres (o Ctrl-V é uma maneira do Vim de escrever o caractere Ctrl ^ e Ctrl-M escreve o M após a expressão regular, resultando em ^ M caractere especial)

 /\r/ 

com nova linha ( \r )

 g 

E faça isso globalmente (não apenas a primeira ocorrência na linha).

No Linux e Mac OS, os seguintes trabalhos,

 :%s/^V^M/^V^M/g 

onde ^V^M significa digitar Ctrl + V e , em seguida, Ctrl + M.

Nota: no Windows, você provavelmente desejará usar ^Q invés de ^V , já que por padrão ^V é mapeado para colar texto.

Dentro do vim , veja o formato do arquivo – DOS ou Unix:

:set filetype=unix

:set fileformat=unix

O arquivo será gravado de volta sem caracteres de retorno de carro (CR, ^ M).

Um arquivo que eu criei com o BBEdit visto no MacVim estava exibindo um monte de retornos de linha em vez dos regulares. A seguinte string substituiu o problema – espero que isso ajude:

:%s/\r/\r/g

É interessante porque eu estou substituindo as quebras de linha com o mesmo caractere, mas eu suponho que o Vim só precisa obter um \ r novo para exibir corretamente. Eu estaria interessado em conhecer a mecânica subjacente de por que isso funciona.

Primeiro, use :set ff? para descobrir o formato de arquivo do seu arquivo.

Eu acho que poderia ser unix , então o problema é que seu arquivo foi criado com fileformat=dos adicionando “^ M ^ J” ao final da linha mas lido com flieformat=unix removendo apenas o “^ J” do final da linha, deixando o “^ M” lá.

Apenas insira :e ++ff=dos na linha de comando do Vim para alterar o formato do seu arquivo de unix para dos. Deve resolver o problema. Caso contrário, :%s/\r//g deve ajudá-lo.

A fim de obter o caractere ^ M para coincidir eu tive que visualmente selecioná-lo e, em seguida, use o comando de cópia do sistema operacional para prancheta para recuperá-lo. Você pode testá-lo fazendo uma busca pelo caractere antes de tentar o comando replace.

 /^M 

deve selecionar a primeira linha ruim

 :%s/^M/\r/g 

replaceá todos os errantes ^ M por retornos de carro.

Isto é como funções no MacVim, que é baseado no gvim 7.

EDITAR:

Tendo este problema novamente na minha máquina Windows 10, que tem Ubuntu para Windows, e acho que isso está causando problemas de formato de arquivo para o vim. Neste caso, alterar o ff para unix, mac ou dos não fez nada além de mudar o ^ M para ^ J e vice-versa.

A solução neste caso:

 :%s/\r$/ /g :%s/ $//g 

A razão pela qual eu fui nessa rota é porque eu queria garantir que não estava sendo destrutivo com meu arquivo. Eu poderia ter :%s/\r$//g mas isso teria excluído os retornos de carro, e poderia ter resultados inesperados. Em vez disso, convertemos o caractere CR singular, aqui um caractere ^ M, em um espaço e, em seguida, removemos todos os espaços no final das linhas (o que para mim é um resultado desejável, independentemente)

Desculpe por reviver uma pergunta antiga que já foi respondida há muito tempo, mas parecia haver alguma confusão em andamento e eu pensei em ajudar a esclarecer um pouco disso, já que isso está chegando às pesquisas do Google.

Nenhum desses funcionou para mim, então eu tentei isso, o que funcionou:

tipo :%s/

pressione CTRL-V CTRL-M

tipo //g

pressione Enter

Então o comando geral no Vim shoud se parece com :%s/^M//g

O que isto faz:: :%s (encontrar e replace) /^M/ (esse símbolo) / (sem chars) g (globalmente).

Sem precisar usar o Ctrl :%s/\r$//

Coisa simples que funcionou para mim

 dos2unix filename 

Eu fiz isso com sed:

sed -i -e 's/\r/\n/g' filename

^ M é recuperado por Ctrl + V e M , assim como

 s/^M//g 

Que tal apenas:: :%s/\r//g Isso funcionou totalmente para mim.

O que isto faz é apenas limpar o final da linha de todas as linhas, remove o ^ M e é isso.

Ctrl + M minimiza minha janela, mas Ctrl + Enter na verdade insere um caractere ^M Eu também tive que ter certeza de não levantar a tecla Ctrl entre as impressoras.

Então a solução para mim foi:

 :%s//\r/g 

Onde significa pressionar e segurar Ctrl , pressione e solte V , pressione e solte Enter e , em seguida, solte Ctrl .

Se você estiver trabalhando em um arquivo gerado pelo Windows

A solução acima irá adicionar uma linha adicional entre as linhas existentes, porque já existe um invisível após o ^M

Para evitar isso, você deseja excluir os caracteres ^M sem substituí-los.

 :%s///g 

Onde % significa “neste buffer”, s significa “substituto”, / significa “(localizar) o seguinte padrão,” refere-se às teclas a serem pressionadas para obter o caractere ^M acima), // significa “sem nada” (ou “com o padrão entre essas duas barras, que está vazio”), e g é um sinalizador que significa “globalmente”, em oposição à primeira ocorrência em uma linha.

Há muitas outras respostas a essa pergunta, mas ainda assim, o seguinte funciona melhor para mim, pois eu precisava de uma solução de linha de comando:

 vim -u NONE -c 'e ++ff=dos' -c 'w ++ff=unix' -cq myfile 

Explicação:

  • Sem carregar nenhum arquivo .vimrc, abra myfile
  • Execute :e ++ff=dos para forçar o recarregamento de todo o arquivo como final de linha.
  • Execute :w ++ff=unix para gravar o arquivo usando finais de linha unix
  • Saia do vim

No meu caso,

Nada acima trabalhado, eu tinha um arquivo CSV copiado para a máquina Linux do meu mac e eu usei todos os comandos acima, mas nada ajudou, mas o abaixo um

 tr "\015" "\n" < inputfile > outputfile 

Eu tinha um arquivo em que ^ M caracteres foram sandwitched entre linhas algo como abaixo

 Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico, 

Alternativamente, existem utilitários de código aberto chamados dos2unix e unix2dos disponíveis que fazem isso mesmo. Em um sistema linux, eles provavelmente são instalados por padrão; Para um sistema windows você pode baixá-los de http://www.bastet.com/ entre outros.

 sed s/^M//g file1.txt > file2.txt 

onde ^ M é typescript pressionando simultaneamente as 3 teclas, ctrl + v + m

Isso funcionou para mim:

  1. Definir o formato do arquivo para unix ( \n final da linha)
  2. Salve o arquivo

Então no vim:

 :set ff=unix :w 

use o utilitário dos2unix se o arquivo foi criado no windows, use o utilitário mac2unix se o arquivo foi criado no mac. 🙂

Isso funcionou para mim:

 :% s/\r\n/\r 

Para salvar pressionamentos de tecla , você pode evitar digitar Ctrl + V Ctrl + M colocando isso em um mapeamento. Basta abrir um arquivo contendo um caractere ^ M, arrancá-lo e colá-lo em uma linha como esta em seu .vimrc:

 nnoremap d :%s/^M//g 

Nenhuma destas sugestões funcionou para mim, tendo conseguido uma carga de ^M quebras de linha enquanto trabalhava com o vim e o eclipse. Eu suspeito que eu encontrei um caso externo, mas no caso de ajudar alguém que eu fiz.

 :%s/.$//g 

E isso resolveu o meu problema

 :g/^M/s// /g 

Se você digitar ^M usando Shift+6 Caps+M ele não será aceito.

Você precisa digitar ctrl+v ctrl+m .

Eu sei que isso pode ser muito antigo, mas espero que alguém consiga achar isso útil.

Use destes comandos:

 :%s/\r//g 

Ou

 :%s/\r\(\n\)/\1/g 

^M fornece quebras de linha indesejadas. Para lidar com isso, podemos usar o comando sed seguinte forma:

 sed 's/\r//g' 

Basta remover o set binary no seu .vimrc!

“Esta function preserva a lista de saltos

 fun! Dos2unixFunction() let _s=@/ let l = line(".") let c = col(".") try set ff=unix w! "%s/\%x0d$//e catch /E32:/ echo "Sorry, the file is not saved." endtry let @/=_s call cursor(l, c) endfun com! Dos2Unix keepjumps call Dos2unixFunction() 

Eu passei uma tarde lutando com \ n ctrl-v 012 (ambos me fornecem null). & trabalhado através deste segmento até chegar a metagrapher.

Trabalhou bem para mim!

 /),/s/),/)\r/g 

virou algo assim:

Lista negra extra: i386 (0.4.1, 0.4.1 + nmu1), libmount1: i386 (2.20.1-5.1, 2.20.1 -5.2), libblkid1: i386 (2.20.1-5.1, 2.20.1-5.2) , libapt-pkg4.12: i386 (0.9.7.4, 0.9.7.5), nmap: i386 (6.00-0.1, 6.00-0.2), libsane-common: i386 (1.0.22-7.3,

em algo como isto:

26 libwv-1.2-4: i386 (1.2.9-3, automático)
27 openjdk-6-jre-headless: i386 (6b24-1.11.4-3, automático)
28 jed: i386 (0.99.19-2.1)

Magia. Eu sou profundamente grato

Ou, em vez de usar o vim, você pode apenas corrigir as quebras de linha usando este comando

 fromdos  

Espero que ajude!