回答:
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エディターとして動作することを期待するユーザーの間に大きな混乱を生じさせないために、そのまま設定されていない唯一の理由です。
で.vimrc、set 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
オプションを参照してください。
vimdocによると、vimはファイルエンコーディングを自動的に検出しようとするため、既存のファイルを編集している場合は適切です。
を使用する場合は、いつでもエンコードを強制できます:set fileencodings=utf-8。ここでドキュメントを見つけることができます。
.vimrcです。実際、エンコーディングのデフォルト値は「latin1」または$ LANGの値であり、私のシステムではに設定されていen_US.UTF-8ます。この理由のために:set encoding与えますencoding=utf-8箱から出して。予想どおり、LANGが設定されていない場合、を返し:set encodingますencoding=latin1。すばらしい答えをありがとう!