Digitar :digraphsno vim mostra a tabela do dígrafo à qual @LightnessRacesinOrbit vinculou.
askewchan
1
Ao tentar substituir esse tipo de caractere usando php, tente esta preg_replace('/[\x01]/', ' ' ,$str); Espero que ajude.
Rachel Geller
Respostas:
561
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. ^Macontece que o vim exibe 0xD (0x0D = 13, M é a 13ª letra do alfabeto inglês).
Você pode remover todos os ^Mcaracteres 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 ^Mcom a sequência vazia (ou seja, nada). Eu uso isso para se livrar de ^Marquivos copiados do Windows para Unix (Solaris, Linux, OSX).
Caso você esteja no Windows, Ctrl + V provavelmente será mapeado para colar. Se for esse o caso, os padrões remapearão a tecla "escape de caractere especial" para Ctrl + Q.
R. Martinho Fernandes
8
A verdadeira questão é por que o Vim algumas vezes detecta automaticamente as terminações da linha e é exibido corretamente, outras vezes não.
24513 Scott
10
Você verá o ^Mcaractere 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 ^Mpersonagem, 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á).
Mikkel Paulson 27/05
9
Nota para iniciantes vi, esse comando precisa ser digitado manualmente. Apenas colá-lo em um terminal aberto com a viexecução resultará em um erro "padrão não encontrado".
IQAndreas 9/10
51
@bluesm Na verdade, eu precisava usar :%s/\r//gpara 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.
jonnybot
139
:%s/\r//g
trabalhou para mim hoje. Mas minha situação pode ter sido um pouco diferente.
a opção g não é necessária, existe apenas uma nova linha por linha. :%s/\r//seria suficiente.
Frogcoder
7
A opção g pode muito bem ser necessária, porque um retorno de carro não é necessariamente uma nova linha. Quando aberto no modo Unix, o retorno de carro é apenas outro caractere e, quando aberto no modo Windows, o retorno de carro é especial apenas imediatamente seguido pelo avanço de linha.
O que isso realmente deveria fazer? Para mim, parece que está fazendo uma substituição de like por like, o que eu não posso imaginar mudaria alguma coisa. Estou perdendo algo especial sobre como a sintaxe funciona aqui?
Platinum Azure
16
@PlatinumAzure Não sei por que ninguém nunca pensou em responder sua pergunta. \rtem um comportamento diferente na parte de pesquisa versus a parte de substituição. Consulte stackoverflow.com/a/3834303, por exemplo.
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 datacomando
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 dos2unixDUAS VEZES no mesmo arquivo fez o truque! O uso do filecomando 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.
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
Se você não especificou um fileformatintencionalmente diferente (por exemplo, :e ++ff=unixpara 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 fileformatfor definido unixautomaticamente pelo Vim ao lê-lo, ^M (<CR>)aparecerá. Nesses casos, fileformatsentra em jogo. Veja :help ffspara os detalhes.
Descobri que polui arquivos há semanas devido ao fato de que minha instância do Homebrew Mvim foi configurada para usar filetype = dos. Fez a alteração necessária em .vimrc ....
: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: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).fonte
^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 avi
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.trabalhou para mim hoje. Mas minha situação pode ter sido um pouco diferente.
fonte
:%s/\r//
seria suficiente.Para converter a nova linha em vez de removê-la:
fonte
\r
tem um comportamento diferente na parte de pesquisa versus a parte de substituição. Consulte stackoverflow.com/a/3834303, por exemplo.:%s/^V^M/^V^M/g
veja aqui:%s/\r//g
Provavelmente significa que você tem retornos de carro (sistemas operacionais diferentes usam maneiras diferentes de sinalizar o final da linha).
Use
dos2unix
para corrigir os arquivos ou definir os formatos de arquivo no vim:fonte
Digamos que seu arquivo de texto seja - file.txt, e execute este comando -
Ele converte o arquivo de texto dos para o formato unix.
fonte
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
comandoEmbora 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 dofile
comando mostra o que está acontecendo ao longo do caminho.E a versão final do arquivo foi importada perfeitamente para o banco de dados.
fonte
No Unix, é provavelmente mais fácil usar o comando 'tr'.
fonte
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).fonte
Você pode corrigir isso no vim usando
onde ^ é o caractere de controle.
fonte
^M
é.Esta é a única coisa que funcionou no meu caso:
:e ++ff=dos
:wq
fonte
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
fonte
No FreeBSD, você pode limpar o
^M
manual digitando o seguinte::%s/
Ctrl+ V, depois Ctrl+ M, depois Ctrl+ Mnovamente.fonte
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, efileformat
for definidounix
automaticamente pelo Vim ao lê-lo,^M (<CR>)
aparecerá. Nesses casos,fileformats
entra em jogo. Veja:help ffs
para os detalhes.fonte
Descobri que polui arquivos há semanas devido ao fato de que minha instância do Homebrew Mvim foi configurada para usar filetype = dos. Fez a alteração necessária em .vimrc ....
fonte
tente
:%s/\^M//
Pelo menos isso funcionou para mim.fonte