Vimの'encoding'オプションはVimが内部で扱うエンコーディングを設定する。この値がcp932やsjisなどだと、ユニコード文字が表示できない。今時ユニコード文字の表示なんてメモ帳でもできる。メモ帳に負けていいのか!否!
と言うわけで是非とも:set encoding=utf-8で使いたいわけだが、Windowsでこれをやるとシステムメッセージなどが見事に文字化けする*1。で、これを回避する方法*2。
- 言語ファイルを入手する
- download : vim onlineから言語ファイル(ftp://ftp.vim.org/pub/vim/extra/vim-7.2-lang.tar.gz)をダウンロードしてくる。
- 中身からja.poを取り出し、UTF-8に変換する。
- poファイルをmoファイルに変換する。
- 詳細は面倒なので割愛。google:po mo 変換とかなんとか見て頑張る。
- $VIMRUNTIME/lang/ja_JP.UTF-8/LC_MESSAGES ディレクトリを作り、そこにさきほどのmoファイルを vim.mo と言う名前で配置する。
- Windows的にはja_JP.65001とかの方がいいのかも?よくわかってないけどこれでできたので気にしないことにする。
- .vimrc で以下のように設定する。
let $LANG='ja_JP.UTF-8' set encoding=utf-8
-
- $LC_ALLでも大丈夫だった。
以上の手順で :set encoding=utf-8 しても文字化けしないはず!
ちなみに、 :language って言うコマンドもあるんだけど、これで設定しようとしてもエラーがでる。
:language ja_JP.UTF-8 E197: 言語を "ja_JP.UTF-8" に設定できません
なんでだろう。よくわかってない。
最後に、vimrcのエンコーディングに注意。例えば、 'statusline' にマルチバイト文字が含まれている場合、vimrcのエンコーディングがutf-8じゃないと文字化けする。vimrcの文字コードを変更するか、iconv()関数で変換する必要がある。
注意2。使用しているフォントがユニコードに対応してないとやっぱり表示できない。その場合は'guifont'オプションで設定する。