web-dev-qa-db-ja.com

現在のバッファのエンコーディングをvimで見つけるにはどうすればいいですか?

Vim(またはgvim)でファイルを編集しているとしましょう。ファイルのエンコーディングについてはわかりませんが、それがUTF-8なのかISO-8859-1なのか、それとも何なのか知りたいのですが。どのようなエンコーディングが使われているのかを私に示すようにどういうわけかvimに指示できますか?

88
innaM

Fileencoding設定は現在のバッファのエンコーディングを表示します。

:set fileencoding
fileencoding=utf8

平文ファイルのエンコーディングを決定する一般的な方法はありません。その情報はファイル自体に保存されないからです。エンコーディングを示すいわゆるBOMがあるUTF-8ファイルを除いて。これが、xmlおよびhtmlファイルに文字セットメタタグがある理由です。

'encoding'設定で特定のエンコーディングを強制することができます。エディタがこれらの設定を処理する方法についてはVimの:help encoding:help fileencodingを参照してください。リストされたものに基づいてvimが検出を試みるようにあなたのvimrcにいくつかのファイルエンコーディング設定を追加することもできます。

102
jtimberman

ファイルのエンコーディングはファイル内のどこにも明示的に記述されていないことに注意してください。したがって、VIMや他のアプリケーションはエンコーディングを推測する必要があります。これを行うための標準的な方法は、VIM内から実行できるchardetアプリケーションを使用することです。

:!chardet %

Jtimbermanによって提供された答えはあなたにカレントバッファのエンコーディングを示していますが、これはディスク上のファイルと同じエンコーディングではないかもしれません。したがって、特にVIMが常に特定のエンコーディング(つまりUTF-8)を使用するように設定されている場合、chardetがVIMとは異なるエンコーディングを表示することがあります。

chardetのいいところは、それがその推測に信頼性スコアを与えることですが、VIMは\ x7F(ASCII 127)より多くの文字がない場合、エンコーディングを推測するのは間違っていることがありえます。たとえば、PHP codeの長いファイルに単一のאを追加すると、chardetは0.72の信頼度を持つISO-8859-2であると見なしますが、少し長いフレーズשלום, עולם!‏を追加すると、信頼スコアはUTF-8になります0.99。どちらの場合も、ディスク上のファイルがUTF-8であるためではなく、VIMが内部的にUTF-8を使用するように構成されているため、set fileencoding?UTF-8を示しました。

12
dotancohen