2010/06/26

Recent entries from same category

  1. clangd を使う時に便利なコマンド compiledb
  2. VimConf 2018 に行ってきた。
  3. Software Design 2018年7月号「Vim 絶対主義」の執筆に参加しました。
  4. Vim の :terminal の中から外の Vim を操る方法
  5. Vim と日本語入力の話。

まず、ちょっとタイトルがおかしいので、最後まで読んで下さい。

WindowsのVimを使っている方ならば、KaoriYaのVimを使っておられる方が多いと思います。
KaoriYa.net

Vim 7.2 Vim 7.2を公開します。vim.org等で配布されるオリジナルに、日本語を扱う上で便利な設定やスクリプトが追加されています。Vimはユーザーの方々からの意見などの支援によって育てら...

http://www.kaoriya.net/
KaoriYaが配布しているVimには複数のpatchが当たっていて、migemo検索やフルスクリーンといった便利な機能が入っています。
その中の一つに、modelineの中でfileencodingが指定出来るという物があります。
Vimでは、ファイルのエンコーディングを調べるのにfileencodingsで指定された複数のエンコーディングを失敗しなくなるまで試すという、若干きな粉臭い手法が用いられているのです。ですので例えばファイル内書かれているバイトコードとエンコーディングがサポートする領域によっては誤認識する事もあります。例えばWindowsのCP932等は、サポートする範囲が広いので文字数が少ないとEUC-JPと誤爆する事もあります。
これを解決する為に、ファイル単位で設定を指定出来るmodelineという設定行にfileencoding(fenc)を指定出来るというpatchをKoRoNさんが書きました。
実はこれ、KaoriYaにこのパッチが入る数年前に別のpatchとしてvim-devに送った事があり、その時は「うーん」とBram氏に言われて終わってしまった機能です。

KaoriYaでないVimを使っている場合、modelineにfenc指定があると読み込んだファイルに対してfileencodingを変更する...という動きになってしまい、ファイルが更新されたという扱いになってしまいます。もちろんそのエンコーディングでファイルが開かれる訳でもありません。
このKaoriYa仕様に慣れてしまった方が、modeline内fencを指定したファイルを世に配ってしまう事があります。
そしてそのファイルをKaoriYa仕様でないVimを使っている人が開くと、開いた途端にファイルが更新される...というとても悲しい結末になってしまいます。

今日はその問題を解決するプラグインを書きました。

mattn's modelinefenc-vim at master - GitHub

enable to specify 'fenc' in modeline.

http://github.com/mattn/modelinefenc-vim
これをpluginフォルダにインストールすると、KaoriYa仕様のVimと同じように(modeline内fencに関してだけ)動作します。ファイルを書いた人がmodelineに指定したエンコーディングの通りファイルが表示されます。

KaoriYa仕様でないVimmerには便利かなと思います。ただし、1点守って下さい。

このプラグインでmodeline内にfencを指定出来る様になったはいいのですが、それが指定されているファイルはバラまかないで下さい。
Vimは世界中で使われているテキストエディタです。KaoriYa版でない人、modelinefenc-vimを入れてない人は星の数ほどいます。
あくまで、そんなファイルを開いた時に気持ち悪くなりたくない...という人向けの機能です。

ですのでタイトルは「modeline内でfencを指定されたファイルを開いてイヤーンとならないVimプラグイン書いた。」が正解です。
Posted at by | Edit


blog comments powered by Disqus