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


89

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

回答:


104

fileencoding設定は、現在のバッファーのエンコードを示します。

:set fileencoding
fileencoding=utf8

プレーンテキストファイルのエンコードを決定する一般的な方法は、その情報がファイル自体に保存されないため、実際にはありません-エンコードを示すいわゆるBOMを持っているUTF-8ファイルを除きます。これが、xmlおよびhtmlファイルに文字セットメタタグが含まれている理由です。

「エンコード」設定で特定のエンコードを強制できます。参照:help encoding:help fileencoding編集者がこれらの設定をどのように処理するかについてのVimインチ また、vimrcにいくつかのファイルエンコーディング設定を追加して、リストされている設定に基づいてvimが検出を試みるようにすることもできます。


1
パーフェクト。多少直感に反しても。ありがとうございました!
innaM

7
残念ながら、正しくありません。Vimはあなたが読んでいるファイルのエンコーディングを見つけることができませ。ファイルには書き込まれません。ファイル内の使用可能な文字に基づいてのみ推測できます。たとえば、「abcdef」というテキストのファイルは、実際にはすべてがこれらの文字をサポートしているため、いくつかのエンコーディングにできますが、「šđčćž」のファイルはCP1252にある可能性があります。だから、どこかからエンコーディングを読んでいるのではなく、それがどのようなエンコーディングになり得るのかを推測し、それに基づいて適切に表示しています。
ルーク

6
ここで行っているのは、ファイルの内容の観察に基づいて、エンコードを明示的に設定することです。vimで複数のエンコーディングを試す場合は、ファイルを開くときに、_vimrcのオプションにそれらのいくつかを入れます。
ルーク

@ldigas、フィードバックのおかげで、その答えをもう少し明確にするために更新しました(私は願っています!)
jtimberman 09

2
おそらく)のBOMが1であることを言及する価値がUTF-8に固有のものではない - UTF-8のは)2、他のBOMは区別されても必要ないと多くの場合、UTF-8には見られません
ルフィン14年

13

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

:!chardet %

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

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


OS間でのchardetの利用可能性について一言言及することをお勧めします。
Soundararajan

@Soundararajan:DebianとCentOSのみを使用しているので、私はおそらくそれを言及する人ではありません。ただし、関連情報がある場合は、回答を編集するように招待されます。ありがとう!
-dotancohen

VIMの内部でそれを行う必要はありませんが、外部から行う方が良いでしょうchardet <file>。それでも、良い提案。
lepe

-1

私はそれを見つけました:https : //vim.fandom.com/wiki/Reloading_a_file_using_a_different_encoding

Vimが正しいエンコーディングを検出できなかった場合、別のエンコーディングを使用してファイルをリロードできます。

:e ++enc=<encoding>

どこにありencodingますかcp850, ISO-8859-1, UTF-8, ...

dotancohenによって提案されたfile yourfilenameエンコーディングまたはchardetect(Linuxディストリビューションによって提供されるpython-chardetuchardet依存する)を見つけるために使用できます。


これは、現在のエンコードを見つける方法の質問には答えません。代わりに、このコマンドはバッファーに他のエンコードを強制します。
ルスラン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.