web-dev-qa-db-ja.com

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

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

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

63
Paolo

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

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

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

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

あなたの.vimrc、 追加 set encoding=utf-8とVimを再起動します。

または、代わりに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オプション を参照してください。

67
MetaEd

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

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

5
Mr Shunz