Friday, September 28, 2007

vim で文字コードを指定するには?

たとえば次のように設定すればいい。

set encoding=utf-8
set fileencodings=utf-8,iso-2022-jp,euc-jp,cp932,latin1

encoding で vim 内部で使う文字コードを指定する。vim 内部とはバッファやレジスタ内の文字列、.viminfo ファイル内のテキストなどに使用されるという意味らしい。

fileencodings ではファイルを読み書きするときに考慮する文字コードのリストを指定する。ファイルを読み出すときに、このリストの順に文字コードを試していき、該当するものがあれば、それを使う。もし、その文字コードが encoding に指定しているものと異なる場合は文字コードの変換がなされるが、書き込むときは元のコードに再変換して書き込まれる。一致するものがリストにないなら encoding の文字コードで読み出される。

ファイル編集時に

set fileencoding?

とすると、ファイルの文字コードと判定された文字コード名が示される。上に書いたことから分かるように、これは fileencodings に指定したリスト内のいずれかになる。リスト内に一致したものがない場合は、この fileencoding は空になる。

fileencodings の設定で、latin1 (ISO_8859-1) を先頭に指定すると、UTF-8 や EUC-JP のファイルでも Latin1 と判定されてしまった。これは、それらのファイル内の少なくとも最初の部分の文字を構成するバイトが Latin1 でコードポイントを与えられているからだろう。

Windows の gvim の設定で(gvimrc ファイル) encoding に CP932 以外を指定すると、メニューなどの文字が文字化けした。冒頭で書いたように、テキストだけではなく vim 内部で使用する文字コードが設定されることが原因だろう。


参考サイト: vim の全オプション

No comments: