58 howm-mode.vim (2-29) コマンド修飾子 :hide を使ってみる

http://d.hatena.ne.jp/eclipse-a/20080227/1204093292

うすうす感づいてはいた。気づかないふりをしていた。でも、それが明らかになった。 54 で書いた reltime() は :vimgrep の低速っぷりをそれはもうはっきりと証明してくれた。通常の grep に比べ、自分の環境で1.5〜2.5倍も差があれば、それはもうがっかりというよりは、Vim7の機能をフル活用して howm-mode.vim を使いやすくしてやんよ!という気持ちでいっぱいだったおれは、「もう死ねよ」と言い放たれて、ただ呆然とするばかりの熟れすぎたバナナになってしまい、「とりあえず、落ち着こうよ」という友人の一言を引き金にして、練炭自殺でもはじめかねない、そんな気持ちになってしまったわけだ。

:hide←結論。

で、今日の結論。一回目は遅くたっていいじゃない。メモリ食いすぎでもいいじゃない。:hide 使えばいいじゃない。コマンド修飾子 :hide を使うと、二回目以降は一回目におよそ 4 秒かかっていた :vimgrep が 1 秒に。reltime() とか必要ない。体感速度が違いすぎる。高速化の域を超えちゃった。スーパーっつーかハイパー。高速、否、超速、否、爆速。そう爆速。スピナー達も真っ青な次元に突入した。 quickfix 経由で処理的にすごく損していることが残念だけど、十分な速度が出ているように思う。

問題発生

:hide を使って高速化できたのは良かったが、今度は皆も見なれていると思う「スワップファイルが既に存在します」エラーが頻繁に出るという問題に直面した。これは、ただ検索しただけでスワップファイルを作ってしまうからだ。これへの対応として、検索する際は noswapfile としておいて、検索終了時に swapfile を戻すことで、検索しただけでスワップファイルを作ることを抑止し、あとは検索結果から選択し、ファイルを編集しはじめるときに、元の swapfile の設定をコピーしてやることにした。まあ、とにかく問題は解決したってこと!

そして、今回の狙えパッチ更新は……

vimgrep 高速化が普段使う上で一番大きいんだけど、他にもすこし機能追加してみた。特に大変だったのは、検索情報の表示。検索情報を表示できるようにしてみた。検索結果ウィンドウで i を押すと、検索時の情報が表示される。かかった時間や ignorecase の有無など、グローバル変数 howm_searchinfo_format でフォーマットの指定もできる。まだ、テスト中なんで、大幅に仕様変更するかもしれないけど、了承よろしく。細かい変更として migemo() よりも migemoprg を優先するように修正したこととか、正規表現(Vim)を使って検索できるようにしてみたり。予定一覧やTodo一覧で、:vimgrep 優先で使われるようになってて、おかしな感じだけど、そこはそのうち修正するつもり。おおまかな変更は以下。

 * :vimgrep 使用時の高速化
 * <leader>,v の追加
 * SearchInfo の追加 ( 検索結果で i )
 * migemo() より migemoprg を優先するように修正

もっと細かい部分だと以下のようになるけど、たぶん誰も見ないよね。うん。

 * s:Sort2() の追加
 * s:Search2() の追加
 * s:Search3() の追加
 * s:ShowSearchInfo() の追加
 * s:OpenPreviewWindow() の追加 ( 使ってはいない )
 * s:ShowScheduleParse() の追加
 * s:ShowTodoParse() の追加
 * s:enable_vimgrep, s:enable_migemo の追加
 * g:howm_reminder_old_format を削除
 * g:howm_migemocmd の追加 ( g:howm_grepcmd のようなもの )
 * g:howm_searchinfo_format の追加
 * g:howm_vimgrep_usehide の追加
 * <leader>,v の追加 ( 正規表現(Vim)で検索 )
 * 各種エラーメッセージ(定数)の追加
 * エラーメッセージの形式を統一
 * TODO:の書き方を統一
 * localtime() での計測を可能なら reltime() で行うように
 * HowmDebugLog() ( デバッグ用関数 ) 呼び出しの typo を修正
 * s:FullTextSearchInput()
 * s:ShowSchedule()
 * s:ShowTodo()
 * s:ShowDirectory()
   * ハイライトのタイミングの変更
   * s:Search3() を使うよう修正
 * s:FullTextSearchInput()
   * コメントの修正
 * s:ShowSchedule()
   * :vimgrep を使用できるよう変更
 * s:ShowTodo()
   * :vimgrep を使用できるよう変更
 * g:howm_migemoprg を migemo() より優先するよう修正
 * s:HighlightSearchWord() と s:OpenSearchWindow() を分離
 * s:ShowPreview()
   * 同じファイルなら読み直さないように修正

すっかり忘れていたダウンロード用アドレス

http://kuhun.s1.zmx.jp/Vim/howm_vim.patch

上記アドレスから適当にどうぞ。