Vim Advent Calendar 2013: KaoriYa 版 Vim の +migemo を試してみた

この記事は Vim Advent Calendar 2013 76日目の記事になります。
バレンタインデーネタとか全くないです。


さて、最近 migemoインクリメンタルサーチしたいなーと思っていたんですが KaoriYa 版 Vim にそういう機能が組み込まれているそうなので簡単に試してみました。
ちなみに Vim において migemo がどういう扱いになっているのかはよくわかっていません。
(パッチがあるのかとか KaoriYa 版以外の Vim で利用できるのか etc...

[インストール]

以下のページから migemo の dll や辞書ファイルなどをダウンロードします。


ダウンロードが終わったら以下の手順に従い Vim に組み込みます。

インストール手順
 以下の説明ではVimをインストールした(gvim.exeの置いてある)ディレクトリを$VIM
 と表記しています。必要ならば各自の環境に読み替えてください。

 1. migemo.dllをインストールする
  migemo.dllをgvim.exeと同じディレクトリに置きます。同じディレクトリでなくて
  も環境変数PATHに含まれる場所のどれかであれば構いません。
 2. スクリプト(migemo.vim)をインストールする
  runtime/plugin/migemo.vimを$VIM/runtime/plugin/に置きます。この作業は同梱
  のruntimeディレクトリを$VIMへ上書きコピーすれば完了できます。関係の無い
  ファイルはまったく触らず上書きできますので安心して上書きコピーしてくださ
  い。その他、個人ディレクトリvimfiles/pluginに置くこともできます。
 3. 辞書ファイルをインストールする
  $VIM/dictというディレクトリを作り、migemo-dict、roma2hira.dat、han2zen.dat
  そしてhira2kata.datを置きます。この作業は同梱のdictディレクトリを$VIMへ上
  書きコピーすれば完了できます。関係の無いファイルはまったく触らず上書きでき
  ますので安心して上書きコピーしてください。

 つまりのアーカイブに含まれる全てのファイルとディレクトリを$VIMへコピーすれば
 インストールは完了します。

https://github.com/koron/cmigemo/blob/master/doc/vimigemo.txt

これで Vim から migemo を利用することができます。

[動作確認]

echo has("migemo")

で、1 が返ってくれば migemo の機能を利用することができます。


試しに migemo() を利用してローマ字から日本語にマッチする正規表現を取得してみると

" ローマ字から日本語にマッチする正規表現を返す
echo migemo("miku")
" => \%(μ\|ミ\_s*ク\|皇\_s*國\|三\_s*\%([隈口国國雲]\|行\_s*半\|下\_s*\%(半\|り\_s*半\)\)\|見\_s*[下比較]\|御\_s*\%([國国車厨]\|蔵\_s*島\)\|ミ\_s*ク\|未\_s*来\|美\_s*[来久]\|み\_s*く\|m\_s*i\_s*k\_s*u\|m\_s*i\_s*k\_s*u\)

という風に動作することがわかります。


ちなみに、migemo() 組み込み関数ですが、has("migemo") が 0 の時にこの関数を呼び出すと Vim がぶっ壊れるので注意して下さい。
試しに呼び出してみたらステータスラインが文字化けしてビビった。

[実際に使ってみる]

g/ で migemo を使用した検索を行うことができます。

こんな感じで動作します。
migemo を常に使用するのであれば

nnoremap / g/

とキーを割り当てておくとよいでしょう。


パフォーマンスが気になっていたのですが、通常の検索とほとんど気にならないレベルでした。
ぶっちゃけ、日本語を検索する事はあまりないのでそこまで有効かと思っていなかったんですがこれなら常駐させておいても問題なさそうですね。