第22回 Vimスクリプト入門みたいの(スクリプトを読みながら勉強してみる、2-3)

ぺたり。

さて、もう一度 FullTextSearch() に戻る。ざっと流れを確認してみる。GrepSearch() の結果を ParseSearchResult() が受けとる。それが 0 より大きいか、引数がファイルパスなら mtime でソートして、結果を整形して、カーソル位置を調節して終了。引数がファイルパスだった場合は、ParseSearchResult の結果( b:file, b:line, b:content, b:searchResultNum ) を一つずつずらす。

b:file{i} という表記は b:file1 みたいな変数名になるんだろう。List がなかったころの手法なのかな。b:file じゃ他のスクリプトとぶつかりそうな気がしてならない。List やら Dictionary を自由に使っていいなら、以下のようにしたい。

let b:howm = {'searchResult': [{'file': file1, 'line': line1, 'content': content1}, {'file': file2, 'line': line2, 'content': content2}] }

第1引数は固定文字列 ( またはファイルパス ) だったり、正規表現だったりするんだけど、それを第2引数で判別しているわけじゃなくて、 GrepSearch() に渡すだけ。第1引数が正規表現だったら HowmExpand() しなくていいんじゃないのか。もし、しなくていいなら 第2引数使えばいいのにと思う。

今回の目標は migemo() を使う形に変更すること、そのためには FullTextSearch() を Vim正規表現に対応する形に変更したい。第2引数を bRegexp から searchType にして、0 を固定文字列、1 を正規表現 ( grep ) 、2 を正規表現 ( Vim ) としてやるのが綺麗なんじゃないかと思う。

ここまで見たところ、FullTextSearch() の他、OpenSearchWindow() と GrepSearch() に若干の修正を加えれば、実現できそうな気がしてきた。よし。