vi コマンドに f、F、t、T がある。これらのキーを押すとさらに 1 文字入力を求められ、カーソル位置から最も近いその文字のところへカーソルがジャンプする。非常に良くできた機能。
なのだが、日本語との相性は非常に悪い。vim では 1 文字入力待ちの状態で IME をオンにして……ということ自体はできるのだが、それでもまだるっこしい。
これ、ひらがな・カタカナ・漢字についてローマ字の読み、Latin-1 に基本形を持つ全角文字のその基本形、などを内部的に持っておいて、それを利用できないか。つまり「日本語の文章」の先頭にカーソルがあるとき、[cci]fb[/cci] と押せば「文」のところにカーソルが飛んでくというイメージ。若干 migemo と考え方は似ている。
問題は、どうやってローマ字の読みを得るかだ。ネイティブアプリなら、IME が提供する再変換 API で読みを得られるだろう。または MeCab のようなものを呼び出してもいい。しかし wasavi では無理だ。そういう web サービスはいくつかないこともないが:
- 日本語形態素解析API
http://developer.yahoo.co.jp/webapi/jlp/ma/v1/parse.html - Google CGI API for Japanese Input
http://www.google.co.jp/ime/cgiapi.html
しかしコマンドを実行するごとにネットワークアクセスが発生するのはなかなかに富豪的すぎる。何とかローカルのデータでもてないか。しかもできるだけコンパクトに。
Unicode の仕様の中に、unihan というものがある。これは CJK Ideograph、いわゆる漢字についてのさまざまな情報を集めたものだ。その中に、Unicode に収められている漢字について訓読みと音読みを定義しているデータベース Unihan_Readings.txt がある。例えばこんな感じ:
㞮 kJapaneseKun DERU DASU
㞮 kJapaneseOn SHUTSU SUI
㡡 kJapaneseKun TOBARI KAYA
㡡 kJapaneseOn CHU JIU
一 kJapaneseKun HITOTSU HITOTABI HAJIME
一 kJapaneseOn ICHI ITSU
これを元にぎゅっとつめ、せいぜい数十~数百 KB 程度のデータにならないかな。