VIMのデフォルトエンコーディングをUTF-8に設定するにはどうすればよいですか?


62

翻訳された文字列を提供するオープンソースプロジェクトに貢献したいと思います。要件の1つは、寄稿者がPOファイルのエンコーディングとしてUTF-8を使用する必要があることです。

LinuxでVIM 7.3を使用しています。.poファイルを正しい方法で編集して保存できるように、VIMのエンコードがUTF-8に設定されていることを確認するにはどうすればよいですか?

回答:


64

Vimは既存のファイルを読み取るとき、ファイルのエンコードを検出しようとします。ファイルを書き出すとき、Vimは検出したファイルエンコーディングを使用します(異なる方法で指示した場合を除く)。したがって、UTF-8として検出されたファイルはUTF-8として書き込まれ、Latin-1として検出されたファイルはLatin-1として書き込まれます。

デフォルトでは、検出プロセスは粗雑です。Vimで開いたすべてのファイルは、先頭にUnicodeバイト順マークが検出されない限り、Latin-1と見なされます。バイトオーダーマークのないUTF-8ファイルは、マルチバイト文字が単一の文字ではなく文字シーケンスとしてバッファに表示されるため、編集が困難になります。

さらに悪いことに、VimはデフォルトでLatin-1を使用してバッファー内のテキストを表します。そのため、バイト順マーク付きの UTF-8ファイル、Latin-1へのダウンコンバージョンによって破損します。

解決策は、UTF-8を内部で使用するようにVimを構成することです。実際、これはVimのドキュメントで推奨されており、Vimが基本的にLatin-1エディターとして動作することを期待するユーザーの間に大きな混乱を生じさせないために、そのまま設定されていない唯一の理由です。

.vimrcset encoding=utf-8Vimを追加して再起動します。

または、LANG環境変数を設定して、UTF-8が優先文字エンコードであることを示します。これは、Vimだけでなく、LANGテキストの表現方法を決定するために依存するすべてのソフトウェアに影響します。たとえば、テキストを英語(en)で表示することを示すには、米国で話されているように(US)、UTF-8(utf-8)としてエンコードされ、を設定しLANG=en_US.utf-8ます。

これで、VimはUTF-8を使用してバッファー内のテキストを表します。さらに、ファイル内のUTF-8エンコードを検出するために、より明確な努力をします。バイトオーダーマークを探すだけでなく、Latin-1にフォールバックする前に、バイトオーダーマークのないUTF-8もチェックします。そのため、UTF-8でコーディングされたファイルが破損することはなくなり、編集セッション中にUTF-8文字が適切に表示されるはずです。

Vimはファイルのエンコーディングを検出する方法の詳細については、以下を参照してくださいVimのドキュメントのオプションをfileencodings

Vimが内部的に使用するエンコーディングの設定の詳細については、encoding オプションを参照してください。

ファイルをディスクに書き戻すときに使用されるエンコードをオーバーライドする必要がある場合はfileencoding オプションを参照してください。


3
実際、編集の手間をかける必要さえないよう.vimrcです。実際、エンコーディングのデフォルト値は「latin1」または$ LANGの値であり、私のシステムではに設定されていen_US.UTF-8ます。この理由のために:set encoding与えますencoding=utf-8箱から出して。予想どおり、LANGが設定されていない場合、を返し:set encodingますencoding=latin1。すばらしい答えをありがとう!
パオロ

それは一般的に有用かもしれませんので、答えに追加しました。
-MetaEd

latin1としてエンコードされたファイルを開くと、この設定はファイルのエンコードを変更しませんか?Vimにファイルのエンコーディングをそのままにして、新しいファイルにはutf-8を好むようにするにはどうすればよいですか?
デビッドケネディ

@DaveKennedy Vimは、ファイルが明確にLatin-1である場合にのみ、ファイルをLatin-1として処理できます。エンコーディングがあいまいな場合、Vimは選択する必要があります。たとえば、7ビットASCIIコードのみを含むファイルは有効なLatin1ですが、UTF-8なども有効です。通常、このようなファイルはUTF-8として扱われます。この結果を回避する1つの方法は、ファイルエンコーディングを明確にすることです。私が見たトリックは、0xF7コードの文字列を追加することです。UTF-8では、0xF7は無効です。しかし、Latin-1では、除算記号(÷)を表します。通常、VimはファイルがLatin-1であると判断します。
MetaEd

4

vimdocによると、vimはファイルエンコーディングを自動的に検出しようとするため、既存のファイルを編集している場合は適切です。

を使用する場合は、いつでもエンコードを強制できます:set fileencodings=utf-8ここでドキュメントを見つけることができます。


6
fileencodings = utf-8を指定すると、Vimは入力ファイルをUTF-8として認識しますが、Latin-1への非可逆変換を実行します。さらに、VimがUTF-16を認識できなくなります。より良い解決策は、Vimをネイティブの1バイトエデ​​ィターからネイティブのマルチバイトエデ​​ィターに変更するencoding = utf-8を設定することです。
-MetaEd

@MetaEdはあなたのコメントを詳しく説明するためにこれに答えることができます:)
hhh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.