QFixHowm - MRUリスト

はじめに

MRUリストは最近編集/閲覧したファイルをアクセス時間順にリストにしたものです。

,l の「最近 "更新" したファイルの検索」では更新保存したファイルしか対象になりませんが、MRUリストでは単純に閲覧しただけ、バッファを切り替えただけでも対象になるため、 最近 "作成 / 更新 / 閲覧" した全てのファイルが一覧表示されます。

これにより一度検索を利用して閲覧しただけのファイルでも、再び検索で探すような必要が無くなります。

内部grepを使用している場合や、howmファイルをUSBメモリやネットワークドライブに置いていて、検索が遅いときなどにも有効です。

実際には howm専用というわけではないので howm_dir内のファイルは何でも登録されます。

膨大なメモが存在していたとしても、実際に必要とするメモの9割は最近使用したメモのリストに含まれるという観点からいうと、殆どの場合はMRUリストを使用することで必要なメモへアクセス可能になると考えられます。

,m

howmのMRUリスト表示

最近 "閲覧/作成/更新" したリストを表示する。

カウント指定すると指定カウント分を表示します。

,l と違いファイルの更新保存だけでなく閲覧(バッファ切替)だけでも対象になり、また grepを使用せずにオンメモリで処理されるので ,l より高速です。

g,mで MRUリストが表示されます。

また 10g,mのようにカウント指定すると表示数を変更することが出来ます。

内部では 300件(デフォルト)までエントリリストを保持しているので表示数を変更しただけでは MRUリストは失われません。

なお howm以外のファイルでもMRUリストに登録されます。

Windowsと Linuxなど複数環境で、複数の howm_dirのMRUを共用したい場合は以下を参照して下さい。

基準ディレクトリと複数のhowm_dir

MRUリストからの削除

QuickFixウインドウにMRUリストが表示されている場合、 K を押すとMRUリストから現在行のエントリを削除します。

MRUリストから削除されるだけなのでファイル自体は削除されません。

MRUリストのオプション

" MRU表示数
let QFixMRU_Entries      = 30
" MRUの保存ファイル名
let QFixMRU_Filename     = '~/.qfixmru'
" MRUに登録しないファイル名(正規表現)
let QFixMRU_IgnoreFile   = ''
" MRUに登録するファイルの正規表現(設定すると指定ファイル以外登録されない)
let QFixMRU_RegisterFile = ''
" MRUに登録しないタイトル(正規表現)
let QFixMRU_IgnoreTitle  = ':invisible'
" MRU内部のエントリ最大保持数
let QFixMRU_EntryMax     = 300

比較するファイル名はフルパスで ~ は展開され ¥ 記号は / に置換して正規化されています。

MRUに登録されると鬱陶しいファイルは正規表現で登録しないよう設定可能です。

たとえば「ペアファイル」をMRUに登録しないようするには以下のように設定します。

" MRUに登録しないファイル名(正規表現)
let QFixMRU_IgnoreFile   = '/pairlink/'

比較するファイル名はフルパスで ~ は展開され ¥ 記号は / に置換して正規化されています。

また指定ファイルのみ登録するようにもできます。

" MRUに登録するファイルの正規表現(設定すると指定ファイル以外登録されない)
let QFixMRU_RegisterFile = '\.\(howm\|txt\|mkd\|wiki\)$'

この例では拡張子が howm, txt, mkd, wiki のファイルのみMRUに登録されることになります。

howm_dir内のファイルのみすべてMRU登録の対象にしたい場合はhowm_dirのパスを指定すると良いかもしれません。

" MRUに登録するファイルの正規表現(設定すると指定ファイル以外登録されない)
let QFixMRU_RegisterFile = '/howm/'

この例ではパスに /howm/ を含むファイルのみ全てMRUに登録されることになります。

タイトル行の指定

拡張子がhowmのファイルで行頭が = * . で始まる行を全てをタイトル行としてMRUリストに登録したいとします。

* をチャプター記号にしていたり、階層化テキストで howmファイルを書いているような場合です。

以下を .vimrcに追加します。

" タイトル行検索正規表現の辞書を初期化
let QFixMRU_Title = {}
" MRUでエントリタイトルと見なす正規表現
let QFixMRU_Title['howm'] = '^[=*.]'

辞書の初期化は設定ファイル内で一度だけにしてください。

同様に拡張子ごとのエントリタイトルを設定することができます。

" タイトル行検索正規表現の辞書を初期化
let QFixMRU_Title = {}
let QFixMRU_Title['howm'] = '^[=*.]'
let QFixMRU_Title['txt']  = '^[=*.]'
let QFixMRU_Title['mkd']  = '^#'
let QFixMRU_Title['wiki'] = '^='

辞書の初期化は設定ファイル内で一度だけにしてください。

タイトルの正規表現

Ver.3では「エントリ一覧表示」に使うgrep用正規表現も QFixMRU_Titleから取得するのでタイトル行の形式を変更した場合、grep検索用正規表現の設定が必要になることがあります。(通常は自動設定で問題ありません)

例えば # 見出し ではなく ### 見出し をタイトル行として検索するには以下のようにします。

この例では拡張子が mkdに対する正規表現になります。

ファイルタイプに対する正規表現を指定するわけでないので気をつけてください。

" ファイル拡張子をmkdにする
let howm_filename = '%Y/%m/%Y-%m-%d-%H%M%S.mkd'
" ファイルタイプをmarkdownにする
let QFixHowm_FileType = 'markdown'
" タイトル記号 let QFixHowm_Title = '###'
以降は自動設定で問題なければ設定しなくてもかまいません。
(タイトル記号が一文字または同じ記号が続く形式なら問題ないようです)
" タイトル行検索正規表現の辞書を初期化
let QFixMRU_Title = {}
" MRUでタイトル行とみなす正規表現(Vimの正規表現で指定)
let QFixMRU_Title['mkd']       = '^###[^#]'
" grepでタイトル行とみなす正規表現(使用するgrepによっては変更する必要があります)
let QFixMRU_Title['mkd_regxp'] = '^###[^#]'

辞書の初期化は設定ファイル内で一度だけにしてください。

QFixHowmのファイル共有設定(基準ディレクトリ)

複数PCでファイルを共有する場合は howm_dirの設定も共通であれば問題はないのですが、あるPCでは c:/howm、別のPCでは d:/howmというように howm_dirが異なる場合もあるかもしれません。

このように howm_dirが異なる場合は単純なファイル共有ではMRUリストやファイル内リンクが共有できないことがありますが、この問題は基準ディレクトリを使用することで解消できます。

またWindowsとLinuxでhowmファイルを共有するような場合にも有効です。

基準ディレクトリ

基準ディレクトリを使用してローカルファイルにリンクを張る

QFixMRU

MRUリストはQFixMRUという汎用的なMRUプラグインを使用しています。

QFixMRUとしてのより詳しい説明は doc/qfixmru.txtを参照してください。