QFixHowm - 更新時間の管理

howmではファイルの更新時間をエントリの更新時間として扱っています。

一ファイル複数エントリの場合はファイルを保存すると、同じファイル内の全てのエントリの更新時間は最新のものとして扱われます。

このため一ファイル複数エントリでhowmを使用する場合、最近更新したエントリを一覧表示や検索すると少々面倒です。

一ファイル複数エントリでも更新時間でエントリを扱いたい場合、まずは ,m の「howm専用MRU」を使用してください。

一ファイル複数エントリでもエントリ個別に最近アクセスした順に並ぶので、エントリ単位で最近作成・更新されたエントリにアクセスすることが出来ます。

ただしMRUリストの保持数を超えていたりすると、MRUリストではアクセスできないケースも当然あります。

一ファイル複数エントリでも、最近更新したエントリをエントリ単位で検索する方法としては手動で更新する方法と自動で更新する方法があります。

以下の方法では、更新時間を埋め込む事になりますが、エントリの更新時間をきちんと扱う事が出来ます。

手動で更新時間を変更する

g,S を使用するとカーソル位置の howmタイムスタンプは現在時間に更新されます。

つまり g,S を利用すると g,L の「最近 "作成" されたエントリをhowmタイムスタンプで検索」は手動で更新フラグを付ける、「最近 "作成・更新した" エントリの検索」として扱えることになります。

簡易的ですが、このように g,S g,L を利用すると一ファイル複数エントリでも最近作成・更新されたエントリに、エントリ単位でアクセスすることが出来ます。

自動で更新時間を変更する

QFixHowmにはエントリの更新時間を自動更新するオプションも用意されています。

QFixHowm_RecentMode = 2を設定した場合、保存時に「カーソル位置のエントリ」のみhowmタイムスタンプを現時刻に変更します。

なお g,wを使用して保存した場合は QFixHowm_RecentMode の設定にかかわらずhowmタイムスタンプは変更しないで保存します。

QFixHowm_RecentMode を 2 に設定すると ,l と ,L が自動的に入れ替わり、 ,l の一覧表示は一ファイル複数エントリでもエントリ単位で更新時間を認識するようになります。

QFixHowm_RecentMode = 2 に設定すると保存時に、「カーソルのある位置のエントリ」のみhowmタイムスタンプが更新時間に変更されます。

".vimrcで設定

let QFixHowm_RecentMode = 2

= エントリのタイトル行1

[2000-01-01 01:01] ←このエントリのhowmタイムスタンプは保存時に更新時間へ変更される

本文■ ←カーソルはこの位置にある

なんたらかんたら

= エントリのタイトル行2

[2000-01-02 02:01] ←このエントリのhowmタイムスタンプは変更されない

本文その2

QFixHowm_RecentMode

QFixHowm_RecentMode = 0

QFixHowm_RecentMode = 2

howmタイムスタンプは作成時刻を表す。

エントリの更新時間はファイルの更新時間から取得する。

カーソル位置のエントリ時刻のみ更新。

エントリの更新時間はエントリのhowmタイムスタンプに書き込まれる。

  • 予定やtodo形式の時間は更新されません。
  • QFixHowm_RecentMode = 2 はカーソルのある位置のエントリの更新時間のみ更新されます。
    • ただしタイトル行のみのエントリには自動的にhowmタイムスタンプが付加されます。

QFixHowm_RecentMode = 0 の時でもエントリの更新時間に変更したい場合は QFixHowm_SaveTimeを設定します。

QFixHowm_RecentMode と QFixHowm_SaveTimeの違いは主に ,l と ,L を入れ替える かどうかにあります。

QFixHowm_SaveTime

QFixHowm_SaveTime = -1

QFixHowm_SaveTime = 0

QFixHowm_SaveTime = 2

何もしない

エントリ内にhowmタイムスタンプがない場合のみタイムスタンプを付加する。

カーソル位置のエントリ時刻のみ更新。

エントリの更新時間は通常通り、ファイルの更新時間から取得する。

最近更新した検索の高速化

QFixHowm_RecentMode = 2 の場合、一ファイル複数エントリでも、最近更新したエントリ部分のみgrepに引っかかるようになります。

このためファイル数がどれだけ多くても「,l で最近更新したファイルを検索」の処理速度はヒット数(最近更新したエントリの数)にのみ依存する事になります。

大量のhowmファイルを使用する場合は検討する価値があると思います。

またChangelogのように一つのファイルに大量のエントリを書くシステムとして扱うなら、QFixHowm_RecentMode = 2, 4で、ファイルを一月一ファイルなどとするのが処理速度的には一番有利になるでしょう。

ただしQFixHowm_RecentMode = 2 には実装上の問題から注意すべき点があります。

QFixHowm_RecentMode = 2 の場合の注意事項

保存時に "カーソル位置のエントリ時刻のみ" 更新なので、たとえ変更されていても現在のカーソル位置に該当しないエントリの時刻は更新されません。

エントリ部分を更新した後、カーソルが更新エントリ内にあるうちに必ず保存するか、カーソルを更新したエントリ内に移動してg,Sでエントリ時刻を更新して下さい。

この問題はバッファを読み込んでからの全ての変更行を知る方法がわからないため、保存時に自動で更新された全てのエントリ時刻を更新する機能が未実装になっているために起こっています。