vim mostra em todas as linhas que terminam ^ M
Como faço para substituir isso por uma quebra de linha 'normal'?
vim
line-breaks
ByteNirvana
fonte
fonte
Respostas:
Esta é a única coisa que funcionou para mim:
Encontrado em: http://vim.wikia.com/wiki/File_format
fonte
:e ++ff=dos
seguido por:set ff=unix
irá converter as terminações em um formato saudável.Comando
Onde
<Ctrl-V><Ctrl-M>
significa digite Ctrl+ Ve Ctrl+ M.Explicação
substituto,% = todas as linhas
^ M caracteres (o Ctrl-V é uma maneira do Vim de escrever o caractere Ctrl ^ e Ctrl-M grava o M após a expressão regular, resultando em ^ M caractere especial)
com nova linha (
\r
)E faça isso globalmente (não apenas a primeira ocorrência na linha).
fonte
:%s/<Ctrl-V><Ctrl-M>/\r/g
(onde \ r substitui o ^ M por uma nova linha).No Linux e Mac OS, os seguintes trabalhos,
onde
^V^M
significa digite Ctrl+ Ve depois Ctrl+ M.Nota: no Windows, você provavelmente deseja usar em
^Q
vez de^V
, pois, por padrão,^V
é mapeado para colar texto.fonte
%s/\r/\r/g
funcionava bem no MacVim para um arquivo exibido apenas^M
no final das linhas (uma longa linha em termos do MacVim). Claramente, \ r significa coisas diferentes no padrão versus peças de reposição deste comando.Dentro
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).
fonte
set ff=unix
um pequeno atalho da mesma maneira queft
é um atalho parafiletype
Um arquivo que eu criei com o BBEdit visto no MacVim exibia vários
^M
retornos de linha, em vez de retornos regulares. A seguinte cadeia de caracteres substituiu resolveu o problema - espero que ajude:É interessante porque estou substituindo quebras de linha com o mesmo caractere, mas suponho que o Vim precise apenas obter um novo \ r para exibir corretamente. Eu estaria interessado em conhecer a mecânica subjacente do porquê disso funciona.
fonte
\r
personagens,\n
apesar de especificar\r
como substituto. Sem reclamar, era exatamente o que eu queria. Estranho.Primeiro, use
:set ff?
para descobrir o formato do arquivo.Eu acho que poderia ser
unix
, então o problema é que seu arquivo foi criado com afileformat=dos
adição de "^ M ^ J" ao final da linha, mas lidaflieformat=unix
apenas com a remoção do "^ J" do final da linha, deixando o "^ M" lá.Basta digitar
: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.fonte
:e ++ff=dos
então:set ff=unix
e:w
para que o caractere ^ M correspondesse, tive que selecioná-lo visualmente e depois usar o comando OS copy to clipboard para recuperá-lo. Você pode testá-lo fazendo uma pesquisa pelo caractere antes de tentar o comando replace.
deve selecionar a primeira linha incorreta
substituirá todos os ^ M errantes por retornos de carro.
Isto é como funções no MacVim, que é baseado no gvim 7.
EDITAR:
Tendo esse problema novamente na minha máquina Windows 10, que possui o Ubuntu para Windows, e acho que isso está causando problemas de formato de arquivo para o vim. Nesse caso, alterar o ff para unix, mac ou dos não fez nada além de alterar o ^ M para ^ J e vice-versa.
A solução neste caso:
A razão pela qual segui esse caminho é porque 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 imediatamente e poderia ter tido 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 pensei em ajudar a esclarecer algumas dessas questões, já que isso está surgindo nas pesquisas do Google.
fonte
Nenhuma delas funcionou para mim, então eu tentei isso, que funcionou:
tipo
:%s/
pressione CTRL-VCTRL-M
tipo
//g
pressione Enter
Portanto, o comando geral no Vim deve parecer
:%s/^M//g
O que isso faz:
:%s
(encontre e substitua)/^M/
(esse símbolo)/
(sem caracteres)g
(globalmente).fonte
^ M é recuperado por Ctrl+ Ve M, também
fonte
Sem precisar usar Ctrl:
:%s/\r$//
fonte
Coisa simples que funcionou para mim
fonte
Eu fiz isso com sed:
sed -i -e 's/\r/\n/g' filename
fonte
sed -e 's/\r/\n/g' <<< 'over and over'
->oven and oven
sed
mas não para o BSDsed
(como encontrado no OSX). Qualquer um que conserte quebras de linha provavelmente está trabalhando com uma mistura de sistemas operacionais, por isso é útil esclarecer quando a resposta funcionará.Que tal apenas:
:%s/\r//g
Isso funcionou totalmente para mim.O que isso faz é apenas limpar o fim da linha de todas as linhas, remover o ^ M e pronto.
fonte
Existem muitas outras respostas para essa pergunta, mas ainda assim, o seguinte funciona melhor para mim, pois eu precisava de uma solução de linha de comando:
Explicação:
myfile
:e ++ff=dos
para forçar uma recarga do arquivo inteiro como terminações de linha dos.:w ++ff=unix
para gravar o arquivo usando terminações de linha unixfonte
Ctrl+ Mminimiza minha janela, mas Ctrl+ Enterrealmente insere um
^M
caractere. Eu também tinha que ter certeza de não tirar a Ctrltecla entre os pressionamentos.Então a solução para mim foi:
Onde
<Ctrl-V><Ctrl-Enter>
meios para pressionar e manter pressionado Ctrl , pressione e solte V, pressione e solte Enter, e depois solte Ctrl .Se você estiver trabalhando em um arquivo gerado pelo Windows
A solução acima adicionará uma linha adicional entre as linhas existentes, porque já existe um invisível
\r
após o^M
.Para evitar isso, você deseja excluir os
^M
caracteres sem substituí-los.Onde
%
significa "neste buffer",s
significa "substituto",/
significa "(encontre) o seguinte padrão",<Ctrl-V><Ctrl-Enter>
refere-se às teclas a serem pressionadas para obter o^M
caractere (veja acima),//
significa "sem nada" (ou "com o padrão" entre essas duas barras, que estão vazias ") eg
é uma bandeira que significa" globalmente ", em oposição à primeira ocorrência em uma linha.fonte
Isso funcionou para mim:
\n
final de linha)Então no vim:
fonte
No meu caso,
Nada acima funcionou, eu tinha um arquivo CSV copiado para a máquina Linux do meu mac e usei todos os comandos acima, mas nada ajudou, exceto o abaixo
Eu tinha um arquivo no qual ^ M caracteres eram entrelaçados entre linhas, algo como abaixo
fonte
Como alternativa, existem utilitários de código aberto chamados dos2unix e unix2dos disponíveis que fazem exatamente isso. Em um sistema Linux, eles provavelmente são instalados por padrão; para um sistema Windows, você pode baixá-los em http://www.bastet.com/, entre outros.
fonte
onde ^ M é digitado pressionando simultaneamente as 3 teclas, ctrl + v + m
fonte
use o utilitário dos2unix se o arquivo foi criado no Windows, use o utilitário mac2unix se o arquivo foi criado no mac. :)
fonte
Use um destes comandos:
Ou
fonte
Isso funcionou para mim:
fonte
Para salvar as teclas digitadas , evite digitar Ctrl+ VCtrl+ Mcolocando-o em um mapeamento. Basta abrir um arquivo contendo um caractere ^ M, puxá-lo e colá-lo em uma linha como esta em seu arquivo .vimrc:
fonte
Nenhuma dessas sugestões funcionou para mim, tendo conseguido um monte de
^M
quebras de linha enquanto trabalhava com o vim e o eclipse. Eu suspeito que encontrei um caso externo, mas no caso de ajudar alguém que fiz.E resolveu o meu problema
fonte
Se você digitar
^M
usandoShift+6 Caps+M
, não aceitará.Você precisa digitar
ctrl+v ctrl+m
.fonte
^M
dá quebras de linha indesejadas. Para lidar com isso, podemos usar osed
comando da seguinte maneira:fonte
Basta remover
set binary
no seu .vimrc!fonte
Para usar
sed
no MacOS, faça o seguinte:Explicação: A
$'STRING'
sintaxe aqui pertence ao shell bash. Macs não tratam\r
como caracteres especiais. Ao citar a string de comando,$''
você está dizendo ao shell para substituir\r
o\r
caractere real especificado no padrão ANSI-C.fonte
"Esta função preserva a lista de saltos
fonte
Passei uma tarde lutando com \ n ctrl-v 012 (os quais me fornecem nulo). & trabalhei nesse tópico até chegar ao metagrafista.
\r
funcionou bem para mim!virou algo assim:
em algo como isto:
Magia. Sou profundamente grato
fonte