Vimで文字化けを防ぐための設定に関する記事が結構見つかるのですが、 Help に記載されている文字認識のルールをきちんと解説していることが少ないようですので、基本に帰ってそのあたりから原則を書いてみます。
基本的な考え方
登場する設定値は以下になります。
値 | 役割 |
---|---|
encoding | Vim が内部処理に利用する文字コード。ただし、文字コード判定に失敗した場合はファイルの文字コードの最後の選択肢として利用される場合がある。 |
fileencodings | Vim が 既存ファイルの文字コード推定に使う文字コードのリスト。 |
fileencoidng | ローカル設定値は、文字コード推定の結果Vimが設定する。グローバル設定は 新規ファイルを作成する際の文字コードとして利用される。 |
判定ルールは以下の通り。
- 既存のファイルを開いた場合、以下の手順で
fileencoding
が選択されます:fileencodings
のリストを最初から順番に試し、エラーが発生しなかったものがfileencoding
の値として設定されます。fileencodings
をすべてでエラーが発生した場合はfileencoding
の値は空になります。この場合、ファイルの文字コードとしてはencoding
に設定されている値を利用します。
- 新しいファイルを開いた場合、
fileencodings
の値は無視され、fileencoding
のグローバル設定の値が利用されます。
.vimrc
に指定べきおすすめの設定
日本語をデフォルトの文字として使う方々におすすめの設定は以下の通り(確認した環境は Vim 8.2 MS-Windows 32 ビット版の公式配布バイナリです)
encoding
の値は、使っている環境により選択してください。- Windows 版の場合は、
cp932
がおすすめです。utf-8
を利用すると文字送りが崩れる場合があります。 - それ以外の環境では
utf-8
を利用すればよいでしょう。
- Windows 版の場合は、
fileencoding
の値をsetglobal
で設定しておきましょう。この値は利用者が新しくファイルを作る場合に使用するべき文字コードを設定してください。fileencodings
は、判定でエラーになりやすい順番で書くのがおすすめです。- どの値を利用するべきかの良い参考記事を上げておきます:
これらを反映し、私は以下のような設定にしています。
この設定値は後ほど公開します。
Help をきちんと読んでみましょう
このあたりの詳細の仕様については、 fileencoding
に関するヘルプに書いてありますので、一度以下を見てみることをおすすめします。
:help fileencodings
げ、英語だ… と思った方は以下の翻訳が役に立つと思われます: