O que significa o personagem ^ M no Vim?

Eu continuo recebendo ^M personagem no meu vimrc e quebra minha configuração.

   

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 é a maneira como o vim exibe 0xD (0x0D = 13, M é a 13ª letra do alfabeto Inglês).

Você pode remover todos os caracteres ^M executando o seguinte:

 :%s/^M//g 

Onde ^M é inserido pressionando Ctrl e digitando v seguido por m , e então soltando Ctrl . Isso às vezes é abreviado como ^V^M , mas observe que você deve inseri-lo conforme descrito na sentença anterior, em vez de digitá-lo literalmente.

Esta expressão irá replace todas as ocorrências de ^M com a cadeia vazia (ou seja, nada). Eu uso isso para me livrar de ^M em arquivos copiados do Windows para o Unix (Solaris, Linux, OSX).

 :%s/\r//g 

trabalhou para mim hoje. Mas minha situação pode ter sido ligeiramente diferente.

Para traduzir a nova linha em vez de removê-la:

 :%s/\r/\r/g 

Isso provavelmente significa que você tem retornos de carro (sistemas operacionais diferentes usam maneiras diferentes de sinalizar o fim da linha).

Use dos2unix para corrigir os arquivos ou definir os formatos de arquivo no vim:

 set ffs=unix,dos 

Digamos que seu arquivo de texto seja – file.txt, então execute este comando –

 dos2unix file.txt 

Converte o arquivo de texto do dos para o formato unix.

No Unix, é provavelmente mais fácil usar o comando ‘tr’.

 cat file1.txt | tr "\r" "\n" > file2.txt 

Eu removi todos eles com sed:

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

Também poderia replace por uma string ou caractere diferente:

sed -i -e 's/\r/string/g'

Você pode consertar isso no vim usando

 :1,$s/^V^M//g 

onde ^ é o caractere de controle.

Eu tenho um arquivo de texto originalmente gerado em uma máquina Windows por meio de um usuário Mac e precisava importá-lo em um database MySQL Linux usando o comando load data .

Embora o VIM exibisse o caractere ‘^ M’, nenhum dos itens acima funcionou para o meu problema em particular, os dados seriam importados, mas sempre foram corrompidos de alguma forma. A solução foi bem fácil no final (depois de muita frustração).

Solução: A execução do dos2unix DUAS VEZES no mesmo arquivo resolveu o problema! Usando o comando de file 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 database.

Se ele quebrar sua configuração, e os caracteres ^ M forem necessários nos mapeamentos, você pode simplesmente replace os caracteres ^ M por ou até mesmo (ambos typescripts como sequências de caracteres simples, de 7 e 5 caracteres, respectivamente).

Esta é a maneira única e portátil recomendada de armazenar códigos de teclas especiais em mapeamentos

No FreeBSD, você pode limpar o ^M manualmente digitando o seguinte:

:%s/ Ctrl + V , depois Ctrl + M , depois Ctrl + M novamente.

Esta é a única coisa que funcionou no meu caso:

:e ++ff=dos

:wq

Descobri que venho poluindo arquivos há semanas devido ao fato de minha instância do Homebrew Mvim ter sido configurada para usar filetype = dos. Fiz a alteração necessária no .vimrc ….

tente :%s/\^M// Pelo menos isso funcionou para mim.

Se você não especificou intencionalmente um formato de fileformat diferente (por exemplo :e ++ff=unix para um arquivo do Windows), é provável que o arquivo de destino tenha EOLs misturados.

Por exemplo, se um arquivo tiver algumas linhas com terminações e outras com terminações , e o formato do fileformat for definido automaticamente para unix pelo Vim ao lê-lo, aparecerá ^M () . Nesses casos, os fileformats entram em cena. Veja :help ffs para os detalhes.