howmの検索リンクとアクションロック

QFixHowm - howmの検索リンクとアクションロック

vim/gvim用howmプラグイン「QFixHowm」の使い方についての解説ページ

始めに

このページはhowmの検索リンク(gotoリンク、come-fromリンク、Wiki風リンク)とアクションロックについて書かれています。

検索リンク化されたキーワードにカーソルを合わせて<CR>を押すと、そのキーワードを検索します。

体系的なメモをhowmで作成する時や、ある程度のメモがたまってきた時のメモ間リンクに使用すると便利です。

日付など強調表示されている部分にカーソルを合わせて<CR>を押すと、様々な入力補助機能が使えます。

検索リンク以外は主に、予定やTODOを扱う場合に利用することになります。

QFixHowmでは複数のコマンドの組み合わせ(キー操作)を、マクロにして実行する事が出来ます。

単純な自動化だけでなく、ファイル内リンクなどにも使えます。

このページではhowmとして QFixHowm をインストールし、キーマップを g と設定したものとして説明しています。

QFixHowmのインストールや使い方については「QFixHowm - vim用howmプラグイン」を参照して下さい。

検索リンク

検索リンク化されてアンダーラインが引かれているキーワードに、カーソルを合わせて<CR>を押すと検索が始まります。

オートリンク上のタグジャンプ」を使用するとcome-fromリンクやWikiスタイルリンクの定義部分に直接ジャンプすることが出来ます。

<<< はcome-fromリンク

come-fromリンクは、キーワードを検索したら最初に参照して欲しい所(キーワードの定義部分など)を定義します。

come-fromリンク( <<< )で定義されたキーワードは全てのファイルでオートリンクされます。

たとえば次のようなhowmファイルを作成して保存します。

= ファイアボール作戦、あるいは新たなる希望
[2009-01-01 01:01]
<<<ドロッセル
形式:ハイツレギスタ社製JUNO-XIV
製造時の設定年齢:14歳
重量:りんご179個分
<<< ゲデヒトニス
形式:ハイツレギスタ社製Tauri 34
製造時の設定年齢:50歳
実年齢:20800歳
趣味:浴室のぬめり取り、スキンケア 

こうすると、come-fromリンクの文字列( "ドロッセル" と "ゲデヒトニス" )は、全てのhowmファイルでアンダーラインが引かれ検索リンクになります。

検索リンク化されたキーワードにカーソルを合わせて<CR>を押すとキーワードの検索が始まります。

また、検索リンクや g,s などから "ドロッセル" を検索すると、ファイルの更新時間にかかわらず、

<<<ドロッセル

のある行が常に先頭に表示されます。

"ゲデヒトニス" でも同様です。

<<<はタイトルに書いてあってもかまいません。

オートリンク上のタグジャンプ」を使用するとcome-fromリンクやWikiスタイルリンクの定義部分に直接ジャンプすることが出来ます。

同じ定義のcome-fromリンクを複数のファイルで定義してもかまいませんが、基本的には一つだけ定義して使います。

(スクリーンショット)

come-fromリンクによってオートリンクが有効になっている様子。

Quickfixウィンドウでは検索された"ドロッセル"のcome-fromリンクが検索の先頭になっています。

キーワードに対応するファイルを開く

Wikiのように <CR>を押すことで検索ではなくキーワードと対応するファイルを開く様に設定することが出来ます。

例えば <<< 自動リンク という リンクを作成すると、どのhowmファイルの 「自動リンク」 上でも<CR>を押すと 自動リンク.howm を開く様になります。

"オートリンクでファイルを開く
let QFixHowm_Wiki = 1

対応するファイルは howm_dir直下に作成されます。

QFixHowm_Wikiを有効にする場合は come-fromリンクは意味が無くなりますので Wikiスタイルリンクを使用するようにしてください。

自動リンクファイルの保存場所は QFixHowm_WikiDirで howm_dir 直下の特定ディレクトリに指定可能です。

"オートリンクでファイルの保存場所
let QFixHowm_WikiDir = 'wiki'

デフォルトではEmacs版に合わせてgrep検索を行うようになっていますが、Emacs版と違い検索自体は ,f などで簡単に行えるため、キーワードは対応するファイルを開く用にするのが個人的にはおすすめです。

この場合 [[ と ]] で囲んでキーワード化する Wikiスタイルリンクと動作的に変わらなくなるので Wikiスタイルリンクを基本に使用する方が良いでしょう。

[[ ]]で囲むとWikiスタイルリンク

[[キーワード]]

のように [[ と ]] で文字列を囲むとWikiスタイルリンクになります。

Wikiスタイルリンクはcome-fromリンクと同じように、オートリンクされます。

デフォルトでは Emacs版のような検索実行のオートリンクですが、Wikiのように キーワードに対応するファイルを開くことも出来ます。

(スクリーンショット)

"Aperture Science"と"トレーニングセンター"、"テスト"がWikiスタイルリンクになっている

検索実行のWikiスタイルリンク

デフォルトでは <CR>を押すとキーワードが検索されます。

come-fromリンクとの違いは、検索してもWikiスタイルリンクの定義部分が特別扱いされないので必ずしも一番上には来ないことと、同一行に複数定義可能なところです。

例えば [[$書籍代$]] というWikiスタイルリンクをどこかで定義して、本を購入するたび $書籍代$ として書いておくと、後でリンクから検索して集計出来ます。

この場合come-fromリンクのように定義部分が必ず一番上に来る必要がないので、Wikiスタイルリンクの方が適切ということになります。

オートリンク上のタグジャンプ」を使用するとcome-fromリンクやWikiスタイルリンクの定義部分に直接ジャンプすることが出来ます。

キーワードに対応するファイルを開く

Wikiのように <CR>を押すことで検索ではなくキーワードと対応するファイルを開く様に設定することが出来ます。

例えば [[自動リンク]] という Wikiスタイルリンクを作成すると、どのhowmファイルの 「自動リンク」 上でも<CR>を押すと 自動リンク.howm を開く様になります。

デフォルトではEmacs版に合わせてgrep検索を行うようになっていますが、Emacs版と違い検索自体は ,f などで簡単に行えるため、キーワードは対応するファイルを開く用にするのが個人的にはおすすめです。

"オートリンクでファイルを開く
let QFixHowm_Wiki = 1

対応するファイルは howm_dir直下に作成されます。

QFixHowm_Wikiを有効にする場合は come-fromリンクは意味が無くなりますので Wikiスタイルリンクを使用するようにしてください。

自動リンクファイルの保存場所は QFixHowm_WikiDirで howm_dir 直下の特定ディレクトリに指定可能です。

"オートリンクでファイルの保存場所
let QFixHowm_WikiDir = 'wiki'

>>> はgotoリンク

>>>ファイアボール

のように適当な行の >>> に続けて文字を入力するとアンダーラインが引かれます。

アンダーラインになっている部分にカーソルを合わせて<CR>を押すと、この例では"ファイアボール"が検索対象になります。

このgotoリンクのキーワード "ファイアボール" はオートリンクされないので、他のファイルでは普通の文字列として扱われます。

>>> の後ろが *.txt か *.howm 以外のファイル名やhttp://、 file://、 ftp://で始まる場合はブラウザで開かれます。

*.txt か *.howm のようなファイル名だと vimで開かれます。

カーソル位置のURIをブラウザで開く

空白や日本語を含むパスを文中にリンクを書きたい場合は [c:/temp/コピー ~ 001.jpg:] のように [ と :] で囲む事で可能です。

また、QFixHowm限定ではありませんが、.vimrc に以下を追加してやると現在のファイル名を簡単に貼り付け可能です。

これで howmファイル間だけでなく、様々なファイルへのリンクが簡単に追加できるようになります。

キー設定は適当に変更してください。

if has('win32')
  nnoremap <silent> gkf :let @*=expand('%:p')<CR>:echo "Copy filename to noname register."<CR>
elseif has('unix')
  nnoremap <silent> gkf :let @"=expand('%:p')<CR>:echo "Copy filename to noname register."<CR>
endif

ローカルファイルへのリンクは howm_dir を移動しても無効にならないように howm://を使用してリンクを張ると良いかもしれません。

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

日本語ファイル名

gotoリンクを使用する場合には日本語ファイル名が使用可能です。

>>> c:/temp/ファイアボール.jpg

(注意)

Windowsで内部エンコーディングを UTF-8に設定して InternetExplorerを使用する場合は、初回のみDOSプロンプトが残ります。

また既にInternet Explorerが起動している場合にはDOSプロンプトは残りません。

検索リンクのキーワード

検索リンクを定義しているファイルを削除しただけでは、オートリンクは削除されません。

削除したキーワードがまだリンクになっている場合は、g,rk でキーワードファイルをリビルドして下さい。

検索リンクのオートリンクキーワードファイルは次のオプションで保存場所を指定できます。

let howm_keywordfile     = '~/.howm-keys'

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

howm://を使用して特定ディレクトリ(デフォルトは howm_dir) のローカルファイルにリンクを張ることができます。

howm://を使用すると howm_dirを移動してもローカルファイルへのリンクを維持することが可能です。

また Windowsと Linuxでも howmファイルの変更無しに同じローカルファイルへのリンクが維持されます。

howm_dir が c:/howm と設定されていた場合

howm://2010/01/2010-01-23-012345.howm

c:/howm/2010/01/2010-01-23-012345.howm として扱われます。

howmで参照したいローカルファイルを c:/howm/_files_ 以下にまとめておくと便利かもしれません。

howm://_files_/test.jpg

c:/howm/_files_/test.jpg として扱われます。

こうしておくと howm_dir を d:/data/howmへ移動してもhowmファイルを変更する必要はありません。

同様にWindowsとLinuxで同じ howmデータを使用する事が出来ます。

Linuxで howm_dir が ~/howm と設定されていた場合

howm://2010/01/2010-01-23-012345.howm

~/howm/2010/01/2010-01-23-012345.howm として扱われます。

同様に rel://を使用すると任意のディレクトリにリンクを張れます。

let QFixHowm_RelPath = 'c:/temp'
QFixHowm_RelPath が c:/temp と設定されていた場合
rel://2010/01/2010-01-23-012345.howm

c:/temp/2010/01/2010-01-23-012345.howm として扱われます。

アクションロック

日付変更

日付部分にカーソルを合わせて<CR>を押すと、メニューが出て簡単に日付を変更する事が出来ます。

1970年より前と2038年以降は、ライブラリの制限で日付のチェックはしません。

日付チェックをしない場合、 2100年13月11日 や 1900年10月40日 などあり得ない数値でもそのまま設定されます。

時刻変更

同様に時刻部分にカーソルを合わせて<CR>を押すと、時刻を変更する事が出来ます。

処理リスト

{ } にカーソルを合わせて<CR>を押すと、以下の順にループして変化します。

{ } → {*} → {-}

{_} にカーソルを合わせて<CR>を押すと、次のように変化します。

{_} → [2009-01-01 01:01].

[2009-01-01 01:01]. の日付と時刻部分は今日の日付と時刻になります。

以下の表のように使用すると便利かもしれません。

処理リストは、環境オプションを変更する事で、順番を変更したり増やしたり出来ます。

次のように設定してやると、ループはしませんが未処理フラグまで扱えて便利かもしれません。

let QFixHowm_SwitchListActionLock = ['{ }', '{-}', '{*}', '{_}']

ユーザーアクションロック

アクションロックはユーザー定義も可能です。

let QFixHowm_UserSwActionLock = ['[ ]', '[:mail]', '[:pc]', '[:vim]']

上記のように [] の中に , で区切って、スイッチを書くとカテゴリスイッチが実装できます。

: がついているのは、カテゴリ検索するときに誤爆しないようにするためです。

こうしてから:memoなどを検索リンクでキーワードにして、メニュー画面に追加するとカテゴリ検索になります。

QFixHowm_UserSwActionLock
QFixHowm_UserSwActionLock2
QFixHowm_UserSwActionLock3
...
QFixHowm_UserSwActionLock8

の8個のユーザーアクションロックが使えます。

とくに連番でないといけないことはありません。

QFixHowm_UserSwActionLockの最大有効数を指定可能です。

"ユーザアクションロックの最大有効数
let QFixHowm_UserSwActionLockMax = 32

マクロアクション

QFixHowmでは複数のコマンドの組み合わせ(キー操作)を、マクロにして実行する事が出来ます。

簡単な例として、ファイル内に #link00 という文字と、次のマクロアクションを書き込みます。

ファイル内リンク <|> $/#link00<CR>
#link00
  • <|>以降がマクロアクションの定義になります。
  • <|>の前にはリンクの名称や説明を書いて下さい。
    • 名称や説明は省略してもかまいません。

「ファイル内リンク」の上で、<CR>を押すと#link00が検索されます。

g,, のメニューの「解説目次」で使用していますので、一度見てみてください。

他にも、たとえば2009年1月に作成したエントリから 「$$$」 を探すなら次のようになります。

いつも howmメモに $$$ に続けて使用した金額と品物を書いているとすると、2009年1月に使ったお金が検索できます。

2009年01月作成のファイルから「$$$」を検索 <|> 0g,s<C-u>$$$<CR>:OpenQFixWin<CR>Sn<CR>s2009-01-[-0-9]\+\.howm<CR>

適当なhowmファイルに上記をコピーして、カーソルを合わせた状態で<CR>を押すと以下の処理が行われます。

  1. マクロアクションの実行時に、自動的にQuickfixウィンドウがオフにされます。
  2. カーソルを行頭へ移動(機能上の意味は特にありません)
  3. g,sでgrep実行(マップリーダーがgに設定されているとき。変更している場合は各自の設定に合わせてください。)
  4. <C-u>でデフォルト設定の文字列をクリア
  5. 「$$$」をセットしてgrep
  6. 文字列がヒットしなかった場合でもQuickfixウィンドウをオープンする
  7. 検索されたファイル名順にソート
  8. sコマンドで2009-01-*.howmを絞り込み

マクロアクションを実行する場合は、常にQuickfixウィンドウがオフにされた状態から始まります。

マクロ内でQuickfixウィンドウの表示を制御したい場合は、<C-w>,や :ToggleQFixWin<CR>などを使用して下さい。

マクロアクションは、一度実行すると再実行可能です。

デフォルトの状態では g,M でマクロアクションの実行になります。

マクロアクションのオプション

マクロアクションの識別子は、 QFixHowm_MacroActionPattern で指定します。

QFixHowm_Key = 'g'、QFixHowm_MacroActionKey = 'M'の時、マクロアクションのコマンドは、g,M になります。

QFixHowm_MacroActionKeyか、QFixHowm_MacroActionPattern のどちらかが、何も定義されていないならマクロアクションは無効になります。

よく使うマクロアクションは g,, で起動するメニュー画面に追加すると便利かもしれません。

"マクロアクションの識別子
let QFixHowm_MacroActionPattern = '<|>'
"マクロアクションを登録するキー
let QFixHowm_MacroActionKey = 'M'

次のページ「howmの予定とTODO」 へ移動