Quando o Vim lê um arquivo existente, ele tenta detectar a codificação do arquivo. Ao gravar o arquivo, o Vim usa a codificação de arquivo detectada (exceto quando você o informa de forma diferente). Portanto, um arquivo detectado como UTF-8 é gravado como UTF-8, um arquivo detectado como Latim-1 é gravado como Latim-1 e assim por diante.
Por padrão, o processo de detecção é bruto. Todo arquivo que você abrir com o Vim será assumido como Latin-1, a menos que detecte uma marca de ordem de bytes Unicode na parte superior. Um arquivo UTF-8 sem uma marca de ordem de bytes será difícil de editar, pois qualquer caractere multibyte será mostrado no buffer como sequências de caracteres em vez de caracteres únicos.
Pior, o Vim, por padrão, usa Latin-1 para representar o texto no buffer. Portanto, um arquivo UTF-8 com uma marca de ordem de bytes será corrompido pela conversão para latino-1.
A solução é configurar o Vim para usar UTF-8 internamente. De fato, isso é recomendado na documentação do Vim, e o único motivo para não ser configurado dessa maneira é evitar criar uma enorme confusão entre os usuários que esperam que o Vim opere basicamente como um editor Latin-1.
No seu .vimrc
, adicione set encoding=utf-8
e reinicie o Vim.
Ou então, defina a LANG
variável de ambiente para indicar que UTF-8 é sua codificação de caracteres preferida. Isso afetará não apenas o Vim, mas qualquer software que dependa LANG
de como ele deve representar o texto. Por exemplo, para indicar que o texto deve aparecer em inglês ( en
), falado nos Estados Unidos ( US
), codificado como UTF-8 ( utf-8
), definido LANG=en_US.utf-8
.
Agora o Vim usará UTF-8 para representar o texto no buffer. Além disso, também fará um esforço mais determinado para detectar a codificação UTF-8 em um arquivo. Além de procurar uma marca de ordem de bytes, também verificará o UTF-8 sem uma marca de ordem de bytes antes de retornar ao Latin-1. Portanto, ele não corromperá mais um arquivo codificado em UTF-8 e deverá exibir corretamente os caracteres UTF-8 durante a sessão de edição.
Para obter mais informações sobre como o Vim detecta a codificação de arquivo, consulte a
fileencodings
opção na documentação do Vim .
Para mais informações sobre como definir a codificação que Vim usa internamente, ver a encoding
opção .
Se você precisa substituir a codificação usada quando se escreve um arquivo de volta para o disco, consulte a fileencoding
opção .
.vimrc
; de fato, o valor padrão da codificação é "latin1" ou o valor de $ LANG, que está definido no meu sistemaen_US.UTF-8
. Por esta razão:set encoding
dáencoding=utf-8
fora da caixa. Como esperado, se LANG não estiver definido,:set encoding
dáencoding=latin1
. Obrigado pela ótima resposta!