第21回 Vimスクリプト入門みたいの(スクリプトを読みながら勉強してみる、2-2)
今回はちょっと補足をしてみます。順序が逆になってしまいましたが、「なぜ howm-mode.vim なのか」だとか、「そもそも howm-mode.vim って何なのか」から書きたいと思います。
そもそも howm-mode.vim って何?
前回書いたように、今回の「読み」は howm-mode.vim がターゲットです。 howm-mode.vim というのは Emacs 上で動作するメモとり環境 howm : Hitori Otegaru Wiki Modoki を Vim 上で動作するようにしたものです。http://sworddancer.funkyboy.jp/howm_vim/ の中の人が書かかれたものです。
書いたメモを grep で検索するというのが基本の形です。それに、期日にあわせて自動浮沈をする ToDo と、予定表と、キーワードリンクの機能をくわえたものだと思っています。
自分は、本家 howm を見たことがないので、http://howm.sourceforge.jp/uu/ を見ていま。
なぜ howm-mode.vim なのか
きっかけは2ちゃんねるのUNIX板にあるスレッド「Vim Part14」のテンプレです。
それまで ChangeLog メモを使っていたのですが、複数行のメモがとりにくくて嫌だったんです。乗り換えようか迷っていました。ひとまず id:kuhukuhun に「これが気になってる」と教えたところ、試してくれて「なかなか良い」とのことだったので、自分も使うことにした次第です。
で、前回は何をしていたの?
howm-mode.vim は migemo 検索の機能を備えているのですが、C/Migemo か Ruby/Migemo を要求します。
自分は Windows で Kaoriya 配布の Vim7 のバイナリを使用しているので、+migemo でコンパイルされています。なので migemo() が呼べます。この関数が呼べるなら、組み込まれたもの以外に、わざわざ C/Migemo をダウンロードするのは面倒です。既にあるものを使えるのに、使わないのはもったいない。migemo() を使う形にしてやろうという考えです。
migemo() を使うために、まずは修正すべき範囲を調べています。調べていく過程で見つけた b:searchWord という変数のせいで修正範囲が大きくなってしまうので、小さくしようと修正を加えています。あと、うまく動作しなかった部分を修正した。修正点は以下。
- FullTextSearch() では b:searchWord に代入する場所のみにした
- HighlightPreview() の引数を削除して、 b:searchWord を使う形にした
- OpenSearchWindow() と HightlightPreview() の共通部分を HighlightSearchWord() で抜き出した
- nmap から
を削除 - AddKeyword() の function に ! を付けた
これらの修正点を手順にしたがって、だらだらと書いたのが前回です。これから数回は、あのだらだらが続きます。
以上です。