C/Migemo with utf-8 dictionary for Windows

Vim 7.2 の件 ( http://d.hatena.ne.jp/janus_wel/20090311/1236852798 ) と連動してというか Kaoriya さんとこを覗いたきっかけは C/Migemo だったんだけど ( vimp と同じように検索に Migemo を使いたいという歴史的には逆行している動機から ) 、配布されている dll package に同梱の辞書だと 'encoding' option を utf-8 にしてる場合使えなかったので自前で compile してみた経緯。対象は Windowsvim user だけど辞書の compile だけなら無理に Windows で頑張るよりも andLinux をいれてそちらで辞書 file を作って Windows 側に copy するという方法の方が絶対に速いと思うのでその方法も後述 ( [url] ) 。

まず Windows 側で頑張る場合。下準備からして地獄だぜ。

  1. C/MigemoWindows 用 dll package をインスコ ( http://www.kaoriya.net/#CMIGEMO ) 。同梱の vimigemo.txt は超しんせつなのでとりあえず読むべき。
  2. nmake.exe を手に入れる
  3. ActivePerl ( http://www.activestate.com/activeperl/ ) インスコ
  4. TortoiseSVN ( http://tortoisesvn.tigris.org/ ) か Lhaplus ( http://tortoisesvn.tigris.org/ ) インスコ
  5. 以下を落としてきてそれぞれ path を通しておく ( すべて別々に path 通すのはめんどくさいので My Documents 以下に bin folder とか作っておいてそこに path を通して binary だけ放り込むというのが楽 ) 。
  6. source code 取得。以降 source code のある場所 ( check out した directory か解凍して出来た directory ) を %CMIGEMO% とする。
  7. %CMIGEMO%\config.mk を編集。
    • FILTER_CP932 と FILTER_EUCJP の comment out を qkc と書いてある方にする ( nkf を使うってこと ) 。実際の編集内容はこの entry の一番最後に。
  8. 「ファイル名を指定して実行」とかから cmd.exe /f:on とかして command prompt を起動。 "/f:on" は Ctrl+F で補完が効くようになる option ( 事前に窓使いの憂鬱とかで Tab key を Ctrl+F として定義しとくとさらに使い勝手がよくなる ) 。
  9. Visual Studio を install した場合 command prompt で C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat ( default install した場合 ) を実行しておく。
  10. cd %CMIGEMO%
  11. nmake msvc-dict
  12. cd dict
  13. nmake euc-jp
  14. %CMIGEMO%\dict\utf-8.d と %CMIGEMO%\dict\euc-jp.d という folder の中に以下の file が出来ていれば OK 。 utf-8 は日本語だと一文字につき 3 byte 使うから file syze おおきくなります ?
    • han2zen.dat
    • hira2kata.dat
    • roma2hira.dat
    • zen2han.dat
    • migemo_dict
  15. あとは $VIM\dict 以下に辞書を仕込めばいい。うちは念のため encoding 3 種類の辞書を directory で分けて持って ( 既存の辞書 file を cp932.d に移してる ) 'migemodict' option に utf-8 版を指定してる。こうすると 'encoding' に応じて 'migemodict' を変えるだけで使えるようになるのでやむをえない場合でも C/Migemo が使えてよいハズ ( 開発中の 1.3 版だと自動的に切り替えてくれるらしいんだけど VS2008E VC++ だと build は成功するものの実際に使うと vim ごと落ちる、ので配布されてる 1.2 の binary で誤魔化す方向 ) 。
" C/Migemo
if has('migemo')
    set migemo
    set migemodict=$VIM/dict/utf-8.d/migemo-dict
endif

以上で Windows に関しては終了。あー config.mk の編集に関しては以下のような感じに。上が before で下が after ね。

FILTER_CP932	= qkc -q -u -s
FILTER_EUCJP	= qkc -q -u -e
FILTER_UTF8	= iconv -t utf-8 -f cp932
#FILTER_CP932	= nkf -s
#FILTER_EUCJP	= nkf -e
#FILTER_CP932	= qkc -q -u -s
#FILTER_EUCJP	= qkc -q -u -e
FILTER_UTF8	= iconv -t utf-8 -f cp932
FILTER_CP932	= nkf -s
FILTER_EUCJP	= nkf -e