QFixHowm - 快適に使うためのtipsvim/gvim用howmプラグインの検索高速化とtipsこのページはvim/gvim用howmプラグイン「QFixHowm」のオプション設定についての解説ページです。 howmの基本的な使い方は「howmの基本的な使い方」を参照して下さい。 操作一覧 コマンド一覧 解説ページ QFixHowm | インストール | 基本的な使い方 | コマンド一覧 | 検索リンクとアクションロック | 予定とTODO | オプション | 快適な使用のために | 更新時間の管理 快適に使用するための設定エントリファイルが増えてきて処理速度的に問題が出てきたと思ったら、まず内部grep(vimgrep)ではなく外部grepを使用してください。全ての検索処理が最低でも4~5倍程度は高速化されます。 使用方法にも依りますが、メモ取りシステム全般で扱うファイルの9割以上が最近作成/更新されたファイルであるようです。 これは最近作成/更新したファイルだけでも高速アクセス可能なら、かなり快適に扱えるということを意味します。 コマンドとしては ,m 「MRUリスト」 ,u 「クイックメモ」 ,<Space> 「日記を書く」がオンメモリで処理するのでもっとも高速です。 エントリにアクセスするには ,m をメインに使用して、必要に応じて ,l で一覧表示するか、,s で検索するというのがおすすめです。 まず最近 作成/更新/閲覧 したファイルにアクセスするには ,mの「MRUリストを最近更新のファイル検索として使用する」を使用して下さい。 MRUリストはgrepを使わずオンメモリで高速に処理されるため体感速度が相当上がります。 単に一時的なメモ、一行だけのメモが多いなら「クイックメモ」をテンポラリメモに使用すると瞬時にアクセスできます。 クイックメモのように一ファイル複数エントリで使用する際の補助コマンドとして「一ファイル複数エントリの補助コマンド」が用意されています。 エントリは ,W コマンドで個別エントリに分割したり、単純なファイル連結や連結表示で一ファイル複数エントリに変更することが可能です。 「アウトラインモード」を使用すると特定エントリ以外は折りたたむ事も出来ます。 QFixHowmではQuickfixウィンドウを使用している関係で、パフォーマンス的にはファイル数が一番大きな要素になります。 このため古くて基本的に更新しないようなファイルはバックアップを取って削除(howm_dir外へ移動)する手もありますが、一ファイルにまとめてしまうと速くなります。 ファイルは単純に連結してやると、一ファイル複数エントリのhowmファイルとして扱えます。 この時「更新時間の管理」を使用すれば、一ファイル複数エントリでも個別に更新時間管理が行えます。 また「更新時間の管理」を利用すると、副作用的に「,l で最近更新したファイルを検索」が高速化されます。 仕事と、プライベート、あるいはプロジェクト単位などで環境を切り替えることも出来ます。 この時に検索対象のディレクトリごと切り替えると、検索対象ファイル数が減るので速度も上がります。 howmでカテゴリ分けは必須ではありませんが、必要な場合のみカテゴリタグを付加することも可能です。 「howmの設定を切り替える」 作者の実際の使用法は「QFixHowmの使い方」にまとめました。 howmでは日本語を扱うことが多いと思いますが、vimで日本語入力が面倒だと感じると howmを使う意味が半減します。 たとえば vimではノーマルモードと挿入モードを行き来して編集しますが、日本語入力/編集の際にはIMEの切替が面倒に感じるかもしれません。 QFixHowmと直接の関係は有りませんが、日本語を扱う際の個人的な対処についてまとめました。 「vimで日本語を使いやすくする」 1. MRUリストを最近更新のファイル検索として使用する最近更新・閲覧したファイルへアクセスするのを高速化するために ,m のMRUリストをメインに使用します。MRUリストでアクセスできないファイルには、 ,l で「最近更新したファイルを検索」するか普通に検索して探す、という使い方になります。 MRUはgrepを使用せず、オンメモリで処理するため非常に高速です。 内部grepを使用している場合や、howmファイルをUSBメモリやネットワークドライブに置いていてgrepが遅いときなどにも有効です。 「howm専用MRUを使用する」 ,m ,l ,L のキーマップはカスタマイズ可能ですので、使いやすいように設定してください。 「最近 "作成/更新/閲覧" したファイル表示のキーマップ」 2. 「最近更新したファイルを検索」を高速化するファイル数が増えてくると、「,l で最近更新したファイルを検索」や「,a で全エントリを一覧表示」が遅くなります。これらのコマンドは全エントリを検索してからファイルの更新時間を取得し、ソートして表示しているのですが、ファイル数が増えるとgrepではなく、Quickfixウィンドウへの登録処理時間の増大が顕著になるためです。 「更新時間の管理」は本来、一ファイル複数エントリでもファイル単位ではなく各エントリ個別に更新時間を扱うためのもので、高速化を目的としたものではありませんが、副作用として「最近更新したファイルを検索」コマンドが高速化されます。 これは「更新時間の管理」を使用した場合は、grepの時点で検索結果数が絞り込まれているために登録処理数が減ることによります。 テストケース 以下は ,l の「最近更新したファイルを検索」で「更新時間の管理」を利用した場合と、しない場合の処理時間を表にしたものです。外部grepの処理時間は grep実行時間+Quickfix登録時間で、内部grepの登録処理時間は0なので検索時間のみです。 何度か同じ検索を実行した上での3回平均なので、ディスク関係の処理時間はほぼ一定です。 このケースでは単純にhowm_dir 内のファイルをディレクトリごと何度もコピーしているので階層が非常に深くなっていて、実際に運用した際の grep速度より遅くなっているかもしれません。 外部grepの場合 ファイル数220、最近更新したファイル20
ファイル数2400、最近更新したファイル60
ファイル数が少ないうちは大して変わりませんが、ファイル数が増えてくるとかなり違ってくるのがわかると思います。 「更新時間の管理」を使用しない場合は、ファイル数が多くなるほどQuickfix登録処理時間が増えていきますが、「更新時間の管理」を使用した場合は、処理時間がほぼgrep時間と同じになります。 内部grepの場合 ファイル数220、最近更新したファイル20
ファイル数2400、最近更新したファイル60
正直な所、内部grep使用では実用レベルと言いづらい速度です。 ちなみに ,aコマンドでは内部grepと外部grepで平均で4~6倍程度の差がつきます。 環境の関係で外部grepを使用できない場合は、,m の 「MRUリスト」をメインに使用することを検討して下さい。 「MRUリスト」はオンメモリで処理されるので処理時間は0です。 また、一度検索した結果を保存しておくと、g,kで呼び出す事が出来ます。 こちらもgrepと前処理する時間が0になります。 「Quickfixウィンドウの保存と読込」 3. 一ファイル複数エントリで使用するhowmは一ファイル複数エントリで使用することも出来ます。速度的には一ファイル複数エントリでまとめてしまった方が有利になります。 また一日一ファイルにすれば g,c でファイルを開いた時、存在していれば今日のファイルが検索なしで開かれることになります。 一日単位の仕事メモなどには最適かもしれません。 一月一ファイルなどで使用するとパフォーマンス的には非常に有利になります。 "一日一ファイルで使用する 一ファイル複数エントリでも、エントリ単位で更新時間を管理する事が出来ます。 更新時間をhowmタイムスタンプとして埋め込むと、一ファイル一エントリと変わらない感じで扱えます。 「更新時間の管理」 一ファイル複数エントリで使用する際の補助コマンドは以下にまとめてあります。 「一ファイル複数エントリの補助コマンド」 4. 古いファイルを一つにまとめるファイルが増えてきた場合、古いファイルを削除する代わりに一つのファイルにすると速度が上がります。ファイルの連結や削除・移動はQFixHowmの機能を使わず、他のファイラやテキストファイルの連結ソフトなりコマンドなりを使用した方がよいかもしれません。 ファイル自体は単純に連結すれば、問題なく一ファイル複数エントリのファイルとして扱えます。 この場合も「更新時間の管理」を使用してやると、一ファイル複数エントリでも更新時間の管理が出来ます。 QFixHowmで連結する場合は以下のようになります。
5. 外部grepのオプションを活用するhowm_dir を subversionなどのバージョン管理ソフトを使用して管理している場合、差分を保存するディレクトリが howm_dir内に作成されることがあります。grepで --exclude 等のオプションが使えるなら設定してやると速くなるかもしれません。 外部grepに独自のオプションを指定して実行したい場合は、 MyGrepcmd_useroptに設定します。 let MyGrepcmd_useropt = '--exclude-dir=CVS'MyGrep_ExcludeRegを使用しても同様に特定のディレクトリ内のファイルを無視することが出来ます。 ほとんどの場合どちらでも速度はさほど変わりませんが、--excludeを使用した方が速くなることがあります。 「grepの対象にしたくないファイル名の正規表現」 howmの設定を切り替えるカタゴリタグhowmではカテゴリ分け自体は推奨されていませんが、カテゴリタグが有効な場合もあります。 特定の時だけカテゴリタグを付けたいという時は以下のキーマップを .vimrcに追加して下さい。 キーマップは特にg,を使用する必要はありませんので、お好みで変更してください。 適当なファイルで :vimや :privateを Wikiスタイルリンクにしておくとカテゴリ検索になります。 nnoremap <silent> g,ht :<C-u>call QFixHowmCreateNewFileWithTag('[ ]')<CR>
「ユーザーアクションロック」でカテゴリタグを定義しているので<CR>で変更できます。カテゴリタグはタイトル行になければいけないという物でもないので、キーマップを使わず直接 [ ] を入力して、アクションロックで変更しても良いでしょう。 デフォルトの QFixHowmCreateNewFileWithTag(tag)は以下のようなスクリプトです。 function! QFixHowmCreateNewFileWithTag(tag) カスタマイズしたQFixHowmCreateNewFileWithTag(tag) は.vimrcか、適当なファイルに追加してランタイムパスの通った場所にコピーしてください。 ユーザ定義のQFixHowmCreateNewFileWithTag(tag)が存在する場合はそちらが優先されます。 新規ファイル作成時のテンプレートについては「コマンドで挿入されるテンプレートのカスタマイズ」を参考に適当にカスタマイズして下さい。 howm-chenv.vim またhowm-chenv.vimを使用すると、仕事用とプライベート用など howm環境を簡単に切り替えることが出来て、vimを終了しても前回終了時と同じ設定が使えます。以下のスクリプトQFixHowmと同じディレクトリにコピーして下さい。 howm-chenv.vim .vimrcの設定 .vimrcで、必ずQFixHowmChDirかhowm_dirを明示的にを設定する必要があります。 let QFixHowmChDir = 'c:/howm'この例ではc:\howm以下にhowmのデータを設定することになります。 c:\howmというフォルダを作成してから実行してみてください。 それぞれの環境ごとに異なるディレクトリを使用してデータを格納します。 上記の例の g,hw なら c:\howm\work というディレクトリにデータが作成される事になります。 g,hhで現在の環境を表示します。 g,hmとg,hvでは一エントリ一ファイルで、g,hwとg,hdでは一日一ファイルで実行します。 g,hvの時はタイトルにカテゴリタグ '= [:vim] ' を常に付加します。 g,haでは全てのエントリを検索することが出来ます。 インストール後の初回使用時のみ必ず、g,haなど、どれかのコマンドを実行してください。 以降は前回の設定が使用されます。 あんまり細かく分けてしまうと適当にメモを書いて適当に検索するhowmの良さが無くなりますが、仕事のメモとプライベートなメモなどを分けておくのは有効かと思います。 キーマップやpath、ファイル設定などは「コマンドで挿入されるテンプレートのカスタマイズ」も参考に適当にカスタマイズして下さい。 またWindowsでは QFixHowmChDir を次のように設定すると、vimと同じドライブのデータを参照できます。 let QFixHowmChDir = matchstr($VIM, '^[A-Za-z]:').'/howm'vim/gvimをUSBメモリなどから起動している場合などは便利です。 本サイトで配布している「vim UTF-8日本語版」は、レジストリを使用しませんので、そういう用途に適しているかもしれません。 一ファイル複数エントリの補助コマンドQFixHowmを一ファイル複数エントリでも利用しやすいように、いくつかのhowmバッファローカルコマンドが用意されています。
前のページ「オプション」へ戻る QFixHowm | インストール | 基本的な使い方 | コマンド一覧 | 検索リンクとアクションロック | 予定とTODO | オプション | 快適な使用のために | 更新時間の管理 |