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

StackOverflow https://stackoverflow.com/questions/811193

  •  03-07-2019
  •  | 
  •  

Pergunta

mostra vim em cada linha que termina ^ M

Como eu faço para substituir este com uma quebra de linha 'normal'?

Foi útil?

Solução

Esta é a única coisa que funcionou para mim:

: e ++ ff = dos

Encontrado-lo em: http://vim.wikia.com/wiki/File_format

Outras dicas

Comando

:%s/<Ctrl-V><Ctrl-M>/\r/g

Onde meios <Ctrl-V><Ctrl-M> tipo Ctrl + V , em seguida, Ctrl + M .

Explicação

:%s

substituto,% = todas as linhas

<Ctrl-V><Ctrl-M>

^ M caracteres (o Ctrl-V é uma maneira Vim de escrever o Ctrl ^ caráter e Ctrl-M escreve o M após a expressão regular, resultante para ^ M carácter especial)

/\r/

com nova linha (\r)

g

E fazê-lo globalmente (e não apenas a primeira ocorrência na linha).

No Linux e Mac OS, as seguintes obras,

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

em que meios ^V^M tipo Ctrl + V , em seguida, Ctrl + M .

. Nota: no Windows, você provavelmente vai querer usar ^Q vez de ^V, uma vez por ^V padrão é mapeado para colar texto

Dentro vim, olhar para o formato de arquivo - DOS ou Unix:

:set filetype=unix

:set fileformat=unix

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

Um arquivo que eu tinha criado com BBEdit visto em MacVim foi exibindo um monte de linha ^M retornos em vez dos regulares. A string seguinte substituir resolveu o problema - espero que isso ajude:

:%s/\r/\r/g

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

Em primeiro lugar, o uso :set ff? para descobrir o formato de arquivo do arquivo é.

Eu acho que poderia ser unix, então o problema é o arquivo foi criado com fileformat=dos acrescentando "^ M ^ J" para o final da linha, mas ler com flieformat=unix única removendo o "^ J" a partir do final de linha, deixando o " ^ M" lá.

Apenas :e ++ff=dos entrada na linha de comando Vim para alterar o formato do seu arquivo do UNIX para o DOS. Ele deve resolver o problema. Se não, :%s/\r//g deve ajudá-lo.

a fim de obter o personagem ^ M para corresponder eu tinha para selecioná-lo visualmente e, em seguida, usar a cópia do sistema operacional para o comando da área de transferência para recuperá-lo. Você pode testá-lo, fazendo uma pesquisa para o personagem antes de tentar o comando substituir.

/^M

deve selecionar a primeira linha mau

:%s/^M/\r/g

irá substituir todo o errante ^ M com retornos de carro.

Este é como funções em MacVim, que é baseada no gvim 7.

EDIT:

Tendo este problema novamente na minha máquina Windows 10, que tem Ubuntu para Windows, e eu acho que isso está causando problemas FileFormat para vim. Neste caso, mudar o ff no Unix, Mac ou dos não fez nada a não ser para mudar o ^ M para ^ J e de volta.

A solução neste caso:

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

A razão que eu fui esta rota é porque eu queria para garantir que eu estava sendo não-destrutiva com o meu arquivo. Eu poderia ter :%s/\r$//g mas que teria eliminado os retornos de carro para a direita fora, e podia ter resultados inesperados. Em vez disso, converter o caractere CR singular, aqui um caracter ^ M, em um espaço e, em seguida, remover todos os espaços no final das linhas (que para mim é um resultado desejável independentemente)

Infelizmente para reviver uma velha questão que desde então tem sido respondida, mas parecia haver alguma confusão em andamento e eu pensei que eu ia ajudar a esclarecer alguns dos que até já que este é vindo para o alto nas buscas do Google.

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

tipo :%s/

prima CTRL-V CTRL-H

tipo //g

pressione Enter

Assim, o comando geral no Vim deviam parecer :%s/^M//g

O que isto significa:. :%s (localizar e substituir) /^M/ (esse símbolo) / (sem caracteres) g (globalmente)

Sem necessidade de usar 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

O que sobre apenas: :%s/\r//g Isso totalmente funcionou para mim.

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

Ctrl + M minimiza minha janela, mas Ctrl + Enter realmente insere um caractere ^M. Eu também tinha que ter certeza de não decolar o Ctrl chave entre prensas.

Portanto, a solução para mim foi:

:%s/<Ctrl-V><Ctrl-Enter>/\r/g

Onde meios <Ctrl-V><Ctrl-Enter> para pressione e segure Ctrl , pressione e solte V , pressione e solte Enter , e, em seguida, solte Ctrl .

Se você estiver trabalhando em um arquivo gerado do Windows

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

Para evitar isso, de que deseja excluir os personagens ^M sem substituí-los.

:%s/<Ctrl-V><Ctrl-Enter>//g

Onde meios % "neste tampão," meios s "substitutas", significa / "(encontrar) o seguinte padrão:" <Ctrl-V><Ctrl-Enter> refere-se às teclas de pressionar para obter o personagem ^M (veja acima), meios // "com nada"(ou 'com o padrão de entre estas duas barras, que está vazio'), e g é um bandeira significando 'global', em oposição à primeira ocorrência de uma linha.

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

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

Explicação:

  • sem carregar qualquer arquivo .vimrc, myfile aberta
  • Executar :e ++ff=dos para forçar uma recarga de todo o arquivo como terminações dos de linha.
  • Executar :w ++ff=unix para gravar o arquivo usando finais de linha Unix
  • Sair vim

Isso funcionou para mim:

  1. Definir formato de arquivo para unix (linha \n fim)
  2. Salve o arquivo

Assim, em vim:

:set ff=unix
:w

No meu caso,

Nada acima funcionou, 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 de um

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

Eu tinha um arquivo no qual caracteres ^ M foram sandwitched entre as linhas de 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,

Como alternativa, existem open-source utilitários chamados dos2unix e unix2dos disponíveis que fazer isso mesmo. Em um sistema linux eles provavelmente são instalados por padrão; para um sistema de janelas que você pode baixá-los a partir http://www.bastet.com/ entre outros.

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

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

utilidade uso dos2unix se o arquivo foi criado no Windows, usar a utilidade mac2unix se o arquivo foi criado no mac. :)

Isso funcionou para mim:

:% s/\r\n/\r

Para poupar movimentos , você pode evitar a digitação Ctrl + V Ctrl + M , colocando isso em um mapeamento. Basta abrir um arquivo contendo um caracter ^ M, arrancá-lo e colá-lo em uma linha com esta no seu .vimrc:

nnoremap <Leader>d :%s/^M//g<CR>

Nenhuma dessas sugestões foram trabalhar para mim ter conseguido obter uma carga de quebras de linha ^M ao trabalhar com ambos vim e eclipse. Eu suspeito que eu encontrei um caso fora, mas no caso de ajuda a ninguém que eu fiz.

:%s/.$//g

E é resolvido meu problema

:g/^M/s// /g

Se você digitar ^M usando Shift+6 Caps+M não vai aceitar.

Você precisa digitar ctrl+v ctrl+m.

^M dá quebras de linha indesejados. Para lidar com isso, podemos usar o comando sed da seguinte forma:

sed 's/\r//g'

Apenas removeset binary em seu .vimrc!

Use um destes comandos:

:%s/\r//g

ou

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

" Esta função 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 os quais me fornecer null). & Trabalhado através esta discussão até chegar metagrapher é.

\r funcionou bem para mim!

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

virou algo como isto:

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-comum: i386 (1.0.22-7.3,

em algo parecido com 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)

Mágica. Estou profundamente grato

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

fromdos <filename.txt>

Espero que ajude!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top