« Yash 2 その 87 | トップページ | Internet Explorer 8 入れてみた »

2009年3月16日 (月)

Vim の modeline で fileencoding を設定すべからず

Vim の modeline でそのファイルのエンコーディングを指定しようとしてはいけない。

Vim の modeline はファイルを読みこむ時ではなくファイルを読み込んだに有効になるので、ファイルに vim: fenc=utf-8 などと書いてあってもそれはファイルを読み込む際には考慮されない。つまりファイルを開く際の文字化け防止には使えない。むしろ、ファイルを開く際に文字化けしてしまった後に modeline でエンコーディングが再設定された後、そのままファイルを編集して保存してしまうと、文字化けした部分のデータが壊れてしまう。従って modeline で fileencoding (fenc) を設定してはいけない。

ちなみに、fileencoding オプションが各ファイルをディスクに読み書きする際のエンコーディングを指定するのに対し、encoding オプションは vim がファイルの編集中にプログラム内部で使用するエンコーディングを指定する。前者はファイルごとに異なるものを指定できるのに対し、後者は vim プログラム全体で共通の (グローバルな) 設定である。encoding は vimrc で起動時に一回設定するだけで、あとはいじる必要はない (もちろん modeline で設定してもいけない)。また fileencodings (fencs) オプションはファイルを開く際のエンコーディングの候補を指定する。自分は vimrc で set fileencodings=ucs-bom,utf-8,iso-2022-jp,sjis,cp932,euc-jp,cp20932 と設定している。普通の日本語環境ではこれでほとんど問題ないと思う。前に書いてあるエンコーディングの方が優先されるので値を並び替えたくなるかもしれないが、ucs-bom だけは必ず最初に置くこと。

|

« Yash 2 その 87 | トップページ | Internet Explorer 8 入れてみた »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: Vim の modeline で fileencoding を設定すべからず:

« Yash 2 その 87 | トップページ | Internet Explorer 8 入れてみた »