Eu continuo recebendo ^M
caracteres no meu vimrc e isso quebra minha configuração.
:digraphs
no vim mostra a tabela do dígrafo à qual @LightnessRacesinOrbit vinculou.
preg_replace('/[\x01]/', ' ' ,$str);
Espero que ajude.
Eu continuo recebendo ^M
caracteres no meu vimrc e isso quebra minha configuração.
:digraphs
no vim mostra a tabela do dígrafo à qual @LightnessRacesinOrbit vinculou.
preg_replace('/[\x01]/', ' ' ,$str);
Espero que ajude.
Respostas:
O Unix usa 0xA para um caractere de nova linha. O Windows usa uma combinação de dois caracteres: 0xD 0xA. 0xD é o caractere de retorno de carro. ^M
acontece que o vim exibe 0xD (0x0D = 13, M é a 13ª letra do alfabeto inglês).
Você pode remover todos os ^M
caracteres executando o seguinte:
:%s/^M//g
Onde ^M
é inserido pressionando Ctrle digitando, vseguido de me soltando Ctrl. Às vezes, isso é abreviado como ^V^M
, mas observe que você deve inseri-lo como descrito na frase anterior, em vez de digitá-lo literalmente.
Esta expressão substituirá todas as ocorrências de ^M
com a sequência vazia (ou seja, nada). Eu uso isso para se livrar de ^M
arquivos copiados do Windows para Unix (Solaris, Linux, OSX).
^M
caractere se o arquivo tiver terminações de linhas incompatíveis. Use o comando fornecido pelo Tomasz e digite, :fileformat={unix|dos|mac}
dependendo do sistema operacional que você está alvejando. Se houver apenas algumas linhas sem o ^M
personagem, você provavelmente desejará :fileformat=dos
. Se você estiver editando arquivos em um editor que não seja o vim, verifique se ele está configurado para corresponder às terminações de linha (o Bloco de Notas não fará isso, mas qualquer editor respeitável como o Notepad ++ ou o TextMate fará).
vi
, esse comando precisa ser digitado manualmente. Apenas colá-lo em um terminal aberto com a vi
execução resultará em um erro "padrão não encontrado".
:%s/\r//g
para substituir os retornos de carro no meu arquivo. O padrão ^ V ^ M não pode ser encontrado no arquivo que eu tinha um monte de ^ personagens M no.
:%s/\r//g
trabalhou para mim hoje. Mas minha situação pode ter sido um pouco diferente.
:%s/\r//
seria suficiente.
Para converter a nova linha em vez de removê-la:
:%s/\r/\r/g
\r
tem um comportamento diferente na parte de pesquisa versus a parte de substituição. Consulte stackoverflow.com/a/3834303, por exemplo.
:%s/\r//g
Eu obtive um arquivo de texto originalmente gerado em uma máquina Windows por meio de um usuário Mac e precisava importá-lo para um banco de dados MySQL Linux usando o load data
comando
Embora o VIM exibisse o caractere '^ M', nenhuma das opções acima funcionava para o meu problema específico, os dados eram importados, mas sempre estavam corrompidos. A solução foi bastante fácil no final (depois de muita frustração).
Solução: A execução de dos2unix
DUAS VEZES no mesmo arquivo fez o truque! O uso do file
comando mostra o que está acontecendo ao longo do caminho.
$ file 'file.txt'
file.txt: ASCII text, with CRLF, CR line terminators
$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text, with CRLF line terminators
$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text
E a versão final do arquivo foi importada perfeitamente para o banco de dados.
No Unix, é provavelmente mais fácil usar o comando 'tr'.
cat file1.txt | tr "\r" "\n" > file2.txt
Eu os removi com o sed:
sed -i -e 's/\r//g' <filename>
Também pode substituir por uma sequência ou caractere diferente:
sed -i -e 's/\r/string/g' <filename>
Esses sed
comandos funcionam na versão GNU / Linux, sed
mas podem precisar de ajustes nos BSDs (incluindo o macOS).
Você pode corrigir isso no vim usando
:1,$s/^V^M//g
onde ^ é o caractere de controle.
^M
é.
Esta é a única coisa que funcionou no meu caso:
:e ++ff=dos
:wq
Se ele interromper sua configuração e os caracteres ^ M forem necessários nos mapeamentos, você poderá simplesmente substituir os caracteres ^ M por <Enter>
ou mesmo <C-m>
(ambos digitados como sequências simples de caracteres, com 7 e 5 caracteres, respectivamente).
Esta é a maneira única e portátil recomendada de armazenar códigos de chave especiais em mapeamentos
No FreeBSD, você pode limpar o ^M
manual digitando o seguinte:
:%s/
Ctrl+ V, depois Ctrl+ M, depois Ctrl+ Mnovamente.
Se você não especificou um fileformat
intencionalmente diferente (por exemplo, :e ++ff=unix
para um arquivo do Windows), é provável que o arquivo de destino tenha EOLs mistos.
Por exemplo, se um arquivo tiver algumas linhas com <CR><NL>
finais e outros com
<NL>
finais, e fileformat
for definido unix
automaticamente pelo Vim ao lê-lo, ^M (<CR>)
aparecerá. Nesses casos, fileformats
entra em jogo. Veja :help ffs
para os detalhes.