Como encontro a codificação do buffer atual no vim?

81

Digamos que eu esteja editando algum arquivo com o vim (ou gvim). Eu não tenho idéia sobre a codificação do arquivo e eu quero saber se está em UTF-8 ou ISO-8859-1 ou o que quer que seja? Posso de alguma forma dizer ao vim para me mostrar qual codificação é usada?

    
por innaM 24.08.2009 / 15:48

2 respostas

92

A configuração de codificação de arquivo mostra a codificação do buffer atual:

:set fileencoding
fileencoding=utf8

Realmente não existe uma maneira comum de determinar a codificação de um arquivo de texto simples, já que essas informações não são salvas no próprio arquivo - exceto Arquivos UTF-8, nos quais você tem uma chamada BOM que indica a codificação. . É por isso que os arquivos xml e html possuem metatags charset.

Você pode impor uma codificação específica com a configuração "codificação". Veja :help encoding e :help fileencoding no Vim para saber como o editor lida com essas configurações. Você também pode adicionar várias configurações de codificação de arquivo ao seu vimrc para detectar o vim try com base nas listadas.

    
por 24.08.2009 / 15:52
12

Observe que a codificação dos arquivos não é explicitamente declarada em nenhum lugar de um arquivo. Assim, o VIM e outros aplicativos devem adivinhar a codificação. A maneira canônica de fazer isso é com o aplicativo chardet , que pode ser executado a partir do VIM da seguinte forma:

:!chardet %

A resposta fornecida pelo jtimberman mostra a codificação do buffer atual , que pode não ser a mesma codificação do arquivo no disco. Assim, você notará que chardet às vezes mostrará uma codificação diferente da VIM, especialmente se você tiver o VIM configurado para sempre usar uma codificação específica (por exemplo, UTF-8).

O bom sobre chardet é que ele dá uma pontuação de confiança para seu palpite, enquanto o VIM pode estar (e freqüentemente está) errado em adivinhar a codificação se não houver muitos caracteres acima de \ x7F (ASCII 127). Por exemplo, adicionar um único א a um arquivo longo de código PHP faz com que chardet pense que o arquivo é ISO-8859-2 com uma confiança de 0,72, enquanto que adicionar a frase um pouco mais longa שלום, עולם!‏ dá confiança a UTF-8 pontuação de 0,99. Em ambos os casos, set fileencoding? mostrou UTF-8 não porque o arquivo no disco era UTF-8, mas porque o VIM está configurado para usar o UTF-8 internamente.

    
por 26.12.2013 / 07:59