てきとうなメモ

本の感想とか技術メモとか

Vimの文字コード認識

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

そうなのか。勘違いしてmodelineで指定しようとしていた。


ただ、以下のリンク先によるとKaoriYaさんのVimはmodelineでfencが設定できるようになっているらしい。

また、通常のVimでもmodelineでfencを設定できるプラグインを作成されたとのこと

ソース見るとfencの値を見て開きなおしているということかな
ただ、他の人がプラグインを利用しているかどうかはわからないので、個人的に使うぶんにはいいけど、配布するのには向かない。

まあ、fencsの設定だけで十分な気もする。fencsはそれぞれのエンコーディングを試してエラーが発生しなければそのエンコーディングをfencに設定するというもの。誤認識しないエンコーディング順に設定するのがいいのだろうけど、ネットみると人によってまちまちだな。とりあえず以下のように設定してみる。

set encoding=utf-8
set fileencodings=ucs-bom,utf-8,iso-2022-jp,sjis,euc-jp