qual é o significado de ^ @, ^ I e $ in vi?

3

Quando eu tento usar Context.write (k, v) no MapReduce (usando Java) para gravar dados em um arquivo, eu encontro o seguinte conteúdo no arquivo (aberto com o vi, have: set list):

^@R^@u^@n^@^I1$
^@a^@c^@c^@e^@s^@s^@^I1$
^@d^@e^@f^@a^@u^@l^@t^@ 2$
^@o^@u^@t^@^I2$
^@p^@r^@o^@j^@e^@c^@t^@^I1$
^@t^@a^@s^@k^@^I1$
^@w^@i^@n^@d^@o^@w^@s^@^I1$
^@y^@o^@u^@r^@^I1$

Qual é o significado de ^@ ^I e $ ? O ^I significa \t ? Eu sei que $ significa o fim da linha, mas significa a chave de entrada, como \n ? Se sim, qual a diferença entre '$' e '^ M' no vi?

    
por Searene 10.12.2013 / 16:36

3 respostas

3

$ é o fim da linha conforme exibido por :set list com o valor padrão da opção listchar . ^I é o caractere de tabulação.

^@ é o caractere null .

Por alguma razão estranha, cada caractere significativo em seu arquivo é prefixado com um caractere null , exceto dígitos e (provavelmente) espaços.

Este não é um problema de Vi (m): verifique a documentação desse método para ver se há uma maneira de produzir seus dados sem esses null s.

    
por 10.12.2013 / 17:09
1

O arquivo que você abriu é codificado em UTF-16 ou UCS-2, que é o padrão em Java. vi (como em% realvi, não vim symlinked para vi ) só pode manipular texto ASCII (ou ISO-8859-1?). Use vim ou converta o arquivo em ASCII (por exemplo, iconv -f utf-16 -t ascii <input> <output> ).

    
por 10.12.2013 / 17:28
0

Se esse for o Vim por trás do comando vi , você poderá recarregar o arquivo com

:edit ++enc=ucs-2

ou especifique diretamente a codificação

$ vim ++enc=ucs-2 filename

ou, se precisar abrir esses arquivos com frequência, prefixar ucs-2 à opção 'fileencodings' , por exemplo, no seu ~/.vimrc .

    
por 10.12.2013 / 17:46