Questão Como faço para encontrar a codificação do buffer atual no vim?


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?


79


origem




Respostas:


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 nos 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'. Vejo :help encoding e :help fileencoding no Vim 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.


87



Perfeito. Mesmo que seja um pouco contra intuitivo. Obrigado! - innaM
Infelizmente, não está correto. Para o Vim não pode encontrar a codificação do arquivo que você está lendo. Não está escrito no arquivo. Ele só pode adivinhar com base nos caracteres disponíveis no arquivo. Por exemplo, um arquivo com o texto "abcdef" pode estar em várias codificações, já que praticamente todos suportam esses caracteres, mas um arquivo com "šđčćž" provavelmente estará em CP1252. Então, você não está lendo a codificação de algum lugar, mas adivinhando qual codificação poderia ser, e com base nisso, exibindo-a corretamente. - Rook
O que você está fazendo aqui é explicitamente configuração a codificação, com base em suas observações do conteúdo do arquivo. Se você deseja que o vim tente várias codificações, ao abrir um arquivo, coloque várias delas na opção em seu _vimrc. - Rook
@ldigas, obrigado pelo feedback, atualizei a resposta para ficar um pouco mais claro (espero!) - jtimberman
Provavelmente vale a pena mencionar que as listas de materiais são 1.) Não é exclusivo do UTF-8 - embora o UTF-8 seja diferente de outros BOMs, 2.) Não é necessário e muitas vezes não é encontrado em UTF-8. - ruffin


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

:!chardet %

A resposta fornecida por 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 (ou seja, UTF-8).

A coisa boa sobre chardet é que ele fornece 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 א para um longo arquivo de código PHP faz chardet acho que o arquivo é ISO-8859-2 com uma confiança de 0,72, enquanto adicionando a frase um pouco mais longa שלום, עולם!‏ dá UTF-8 com uma pontuação de confiança 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.


12