fudist

QFixHowm - 更新時間の管理


QFixHowm | インストール | 基本的な使い方 | コマンド一覧 | 検索リンクとアクションロック | 予定とTODO | オプション | 快適な使用のために | 更新時間の管理

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

一ファイル複数エントリの場合はファイルを保存すると、同じファイル内の全てのエントリの更新時間は最新のものとして扱われます。
このため一ファイル複数エントリでhowmを使用する場合、最近更新したエントリを一覧表示や検索すると少々面倒です。

一ファイル複数エントリでも更新時間でエントリを扱いたい場合、まずは ,m の「howm専用MRU」を使用してください。
一ファイル複数エントリでもエントリ個別に最近アクセスした順に並ぶので、エントリ単位で最近作成・更新されたエントリにアクセスすることが出来ます。
ただしMRUリストの保持数を超えていたりすると、MRUリストではアクセスできないケースも当然あります。

一ファイル複数エントリでも、最近更新したエントリをエントリ単位で検索する方法としては手動で更新する方法と自動で更新する方法があります。
以下の方法では、更新時間を埋め込む事になりますが、エントリの更新時間をきちんと扱う事が出来ます。

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

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

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

更新時間での一覧表示関係のコマンドはキーマップを変更可能です。
最近 "作成/更新/閲覧" したファイル表示のキーマップ

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

QFixHowmにはエントリの更新時間を自動更新するオプションも用意されています。
一ファイル一エントリなら QFixHowm_RecentMode = 1, 3、一ファイル複数エントリなら QFixHowm_RecentMode = 2, 4を使用します。
以下の説明を理解して使用するなら QFixHowm_RecentMode = 2 が一ファイル一エントリでも、一ファイル複数エントリでも使用できるのでおすすめです。
g,wを使用すると QFixHowm_RecentMode の設定にかかわらずhowmタイムスタンプは変更しないで保存します。

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

更新時間での一覧表示関係のコマンドはキーマップを変更可能です。
最近 "作成/更新/閲覧" したファイル表示のキーマップ



QFixHowm_RecentMode = 1 に設定すると保存時に、「ファイル内の全エントリ」のhowmタイムスタンプが更新時間に変更されます。

".vimrcで設定
let QFixHowm_RecentMode = 1
= エントリのタイトル行1
[2000-01-01 01:01]
  このエントリのhowmタイムスタンプは保存時に更新時間へ変更される
本文■ ←カーソルはこの位置にある
なんたらかんたら

= エントリのタイトル行2
[2000-01-02 02:01←このエントリのhowmタイムスタンプも更新時間へ変更される
本文その2
QFixHowm_RecentMode = 2 に設定すると保存時に、「カーソルのある位置のエントリ」のみhowmタイムスタンプが更新時間に変更されます。
一ファイル一エントリで使用しているなら違いはありません。
".vimrcで設定
let QFixHowm_RecentMode = 2
= エントリのタイトル行1
[2000-01-01 01:01]
  このエントリのhowmタイムスタンプは保存時に更新時間へ変更される
本文■ ←カーソルはこの位置にある
なんたらかんたら

= エントリのタイトル行2
[2000-01-02 02:01←このエントリのhowmタイムスタンプ変更されない
本文その2

howmタイムスタンプの後にエントリ更新時間を埋め込む事も出来ます。
howmタイムスタンプ部分は更新されないので作成時刻のままです。
日記など作成日付が重要なときに使用する事を想定しています。
日記については「QFixHowmで日記を書く」方法もあります。

更新時間を別に埋め込むには QFixHowm_RecentMode = 3, 4を指定します。
".vimrcで設定
let QFixHowm_RecentMode = 3
= エントリのタイトル行
[2000-01-01 01:23] (200904301122)
本文
なんたらかんたら
ただし、QFixHowm_RecentMode = 3, 4の場合、この形式で更新時間の埋め込まれていないファイルは ,l コマンドでは検索されません。

これらの設定を使用すると、大量にあるファイルから最近days日以内のエントリを検索したい場合、grepの時点で絞り込まれているので処理時間の高速化も見込まれます。
以上を前提としてQFixHowmは過去days日分の 埋め込まれた更新時刻形式をタイトルとみなして検索した後、適切に表示します。

QFixHowm_RecentMode

 QFixHowm_RecentMode = 0  howmタイムスタンプは作成時刻を表す。
 エントリの更新時間はファイルの更新時間から取得する。
 QFixHowm_RecentMode = 1  ファイル内のエントリ時刻を全て更新。
 エントリの更新時間はエントリのhowmタイムスタンプに書き込まれる。
 QFixHowm_RecentMode = 2
 カーソル位置のエントリ時刻のみ更新。
 エントリの更新時間はエントリのhowmタイムスタンプに書き込まれる。
 QFixHowm_RecentMode = 3
 ファイル内のエントリ時刻を全て更新。
 エントリの更新時間はhowmタイムスタンプの後に書き込まれる。 
 QFixHowm_RecentMode = 4  カーソル位置のエントリ時刻のみ更新。
 エントリの更新時間はhowmタイムスタンプの後に書き込まれる。
  • 予定やtodo形式の時間は更新されません。
  • QFixHowm_RecentMode = 1, 3 と 2 ,4 は、カーソル位置のエントリのみ更新するかどうかの違いです。
    QFixHowm_RecentMode = 2, 4 はカーソルのある位置のエントリの更新時間のみ更新されます。
    一ファイル一メモで使用しているなら 1, 3 との違いはありません。
  • QFixHowm_RecentMode = 3, 4の時はタイムスタンプ形式自体が変更される事に留意して下さい。
またQFixHowm_RecentMode > 0 の時 ,f ,e ,s, ,g などのデフォルトソート方法も指定可能です。
"QFixHowm_RecentMode > 0 で通常検索時に howmタイムスタンプソートを使用する/しない
let QFixHowm_HowmTimeStampSort = 0
"QFixHowm_RecentMode > 0 の ,aコマンドで howmタイムスタンプソートを使用する/しない
"-1ならファイル名のリバースソート
let QFixHowm_AllTitleSearchSort = 0

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

QFixHowm_SaveTime

 QFixHowm_SaveTime = -1  何もしない
 QFixHowm_SaveTime = 0  エントリ内にhowmタイムスタンプがない場合のみタイムスタンプを付加する。
 QFixHowm_SaveTime = 1
 ファイル内のエントリ時刻を全て更新。
 エントリの更新時間は通常通り、ファイルの更新時間から取得する。
 QFixHowm_SaveTime = 2
 カーソル位置のエントリ時刻のみ更新。
 エントリの更新時間は通常通り、ファイルの更新時間から取得する。
 QFixHowm_SaveTime = 3  ファイル内のエントリ時刻を全て更新。
 エントリの更新時間はhowmタイムスタンプの後に書き込まれる。
 QFixHowm_SaveTime = 4  カーソル位置のエントリ時刻のみ更新。
 エントリの更新時間はhowmタイムスタンプの後に書き込まれる。

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

QFixHowm_RecentMode = 2, 4の場合、一ファイル複数エントリでも、最近更新したエントリ部分のみgrepに引っかかるようになります。
このためファイル数がどれだけ多くても「,l で最近更新したファイルを検索」の処理速度はヒット数(最近更新したエントリの数)にのみ依存する事になります。
大量のhowmファイルを使用する場合は検討する価値があると思います。

またChangelogのように一つのファイルに大量のエントリを書くシステムとして扱うなら、QFixHowm_RecentMode = 2, 4で、ファイルを一月一ファイルなどとするのが処理速度的には一番有利になるでしょう。
ただしQFixHowm_RecentMode = 2, 4 には実装上の問題から注意すべき点があります。

QFixHowm_RecentMode = 2 , 4 の場合の注意事項
保存時に "カーソル位置のエントリ時刻のみ" 更新なので、たとえ変更されていても現在のカーソル位置に該当しないエントリの時刻は更新されません。
エントリ部分を更新した後、カーソルが更新エントリ内にあるうちに必ず保存するか、カーソルを更新したエントリ内に移動してg,Sでエントリ時刻を更新して下さい。
この問題はバッファを読み込んでからの全ての変更行を知る方法がわからないため、保存時に自動で更新された全てのエントリ時刻を更新する機能が未実装になっているために起こっています。

更新時間でソートする

QFixHowm_RecentMode > 0 の時 ,f ,e ,s, ,g などのデフォルトソート方法でhowmタイムスタンプソートも指定可能です。
"QFixHowm_RecentMode > 0 で通常検索時に howmタイムスタンプソートを使用する/しない
let QFixHowm_HowmTimeStampSort = 0
"QFixHowm_RecentMode > 0 の ,aコマンドで howmタイムスタンプソートを使用する/しない
"-1ならファイル名のリバースソート
let QFixHowm_AllTitleSearchSort = 0



快適に使うためのtips」へ戻る