QFixHowm - メニューとカレンダー

QFixHowmではメニュー、カレンダー、サブメニューを使用することができます。

メニュー画面は予定・TODOや最近閲覧したエントリを同時に閲覧可能で、カレンダー・サブメニューはウィンドウを分割して開くバッファです。

サブメニューはイメージ的にはブログのサイドバーのようなバッファで、スクラッチバッファのように自由に編集可能で、変更は終了時に自動保存されます。サブメニューにはアウトライン機能も内蔵されています。

サブメニュー
メニュー画面

サブメニューは通常のバッファと違い、タブによるインデント対応のフォールディング(折り畳み)とアウトライン記号がサポートされ、また複数のサブメニューを簡単に切り替えて使用可能です。

メニューとカレンダーは以下のコマンドで表示されます。

QFixHowmが適切に設定されていれば howm_calendar.vim自体については何も設定する必要はありませんが、休日定義ファイルを導入していない場合は以下を参照してください。

予定・TODO (休日定義ファイル)

カレンダー

カレンダーは以下のコマンドで表示されます。

,q

,Q

カレンダーを表示

表示方向を変更する

カレンダー
  • 今日は2011年11月11日で、 11月3日と11月23日が休日のためハイライトされています。
  • その他赤く表示されているのが休日です。
  • +記号がついてハイライトされている日が日記が存在する日で、23日は日記も存在している休日なので#記号で表示されハイライトされています。

カレンダーの日付上で <CR>を押すと日記を書くことができます。

未来の日記を書くこともできるので簡単な予定・TODO機能としても使用できるかもしれません。

カレンダー上のサインは次の表のように表示されます。

休日定義ファイル

QFixHowmで休日が表示可能なら、特に設定しなくても休日が強調表示されます。

休日が表示されなかったり、明示的に指定したい場合は calendar_holidayfileを使用してください。

" カレンダーで使う休日定義ファイル指定(パス等は環境に合わせてください)

" 通常は自動設定されるので不要です let calendar_holidayfile = '~/howm/Sche-Hd-0000-00-00-000000.howm'

予定・TODO (休日定義ファイル)

Vim(非GUI)で休日サイン(@) が表示される場合

Vim(非GUI)では環境によって休日サイン(@) が表示されてしまうことがあります。

気になる場合は休日サインの色をカラースキームに合わせて変更してください。

日曜(CalSunday)と同じハイライトにすると気にならなくなるかもしれません。

" Vim(非GUI)で@マークが非表示の場合 hi link HowmCalConceal HowmCalSunday

カレンダーコマンド(表示月の移動)

カーソルを < > に合わせて<CR>を押すと前月、次月へ移動し . だと任意の日付へ移動します。

日付にカーソルを合わせて<CR>を押すと日付に対応した日記を書くことができます。

また 16<CR>のようにカウント指定して<CR>を押すと、指定日付の日記を書くことができます。

カレンダー表示中に . を押すと "< . > 2012/01" のようなコマンドマーカーへ移動します。

コマンドマーカー上で<CR>を押すと対応するコマンドを実行します。

コマンドマーカー

<

>

.

(YYYY/MM)

前の月へ

次の月へ

年月指定

表示月のみ指定 : 8 12 のように1-2桁の数字

表示年のみ指定 : 1984のように4桁の数字

表示年月指定 : 19912 201212のように5-6桁の数字

キーボードショートカット

カレンダーの表示オプション

カレンダーに表示する月数や方向はオプションで変更可能です。

" カレンダー表示の分割指定(vertical topleft, vertical botright,  rightbelow, leftabove) let QFixHowm_CalendarWinCmd = 'vertical topleft'
" カレンダーに表示する月数 let QFixHowm_CalendarCount = 3    

陰暦表示

$LANG='ja'の場合はカレンダー表示が日本語化され陰暦表示も行われます。

" カレンダー表示の日本語化 let calendar_jp = 2

カレンダーのヘルプ

カレンダー下部の表示が鬱陶しい場合は好みのものに変更してください。

" カレンダー下部のヘルプ表示用リスト let calendar_footer = ['ほげ', 'ふが']

サブメニュー

サブメニューは次のコマンドで表示されます。

サブメニューはスクラッチバッファのように自由に編集可能で、変更は終了時に自動保存されます。

,i

,I

q

サブメニューに移動する

カウント指定するとカウントに対応したサブメニューを開き、以降は最後にカウント指定したサブメニューが開かれることになります。

サブメニューをデフォルトサブメニューに変更して開きます。

サブメニュー上で実行するとサブメニューを閉じます。

サブメニュー表示例

サブメニュー

サブメニューは通常のバッファと違いタブによるインデント対応のフォールディング(折り畳み)とアウトライン記号がサポートされ、また複数のサブメニューを簡単に切り替えて使用可能です。

このためサブメニューに特定の目的に応じたキーワードを集めてアクセスしやすくしたり、アウトライン機能を利用して「映画や小説の登場人物紹介」や「特定分野の用語集」のような覚書メモを作ることなどができます。

またビルトインのアウトライン機能を持ったクイックメモのように扱うことも可能です。

サブメニューに検索リンク化されたキーワードを書いておくと、サブメニューから<CR>でキーワード検索が出来ます。

タイトルに[:vim]のようにカテゴリを設定しているなら、:vimをキーワードにしておくと、カテゴリ検索が出来ます。

基本的に通常のhowmメモと同じ機能が使えるので、自由に書き換えてください。

サブメニューの内容は自動保存されますが、サブメニュー上でキーワードを定義した場合は g,w で保存してキーワードを有効化してください。

サブメニューのタイトルは SubWindow_Titleで指定します。

" サブメニュータイトル let SubWindow_Title = '__submenu__'

内容を保存するファイルとして howm_dir直下に保存ファイルが作成されます。

タイトルではなくパス付きでファイル名指定も可能です。

" サブメニュータイトルにパス指定を含める let SubWindow_Title = '~/path/to/__submenu__'

カレンダー

デフォルトではカレンダーもサブメニュー内に表示されます。

分割方法は指定可能です。

" サブメニューで表示するカレンダーの分割指定(leftabove, rightbelow) let SubWindow_CalendarWinCmd = 'leftabove'

分割指定に空文字列を指定すると非表示になります。

カレンダー」と同様のコマンドが使用可能です。

アウトライン

サブメニューではデフォルトでインデント対応のアウトライン機能が使えます。

初めてサブメニューを表示したときは、ヘルプが表示されるので g,iで実際に表示して試してみてください。

サブメニューの内容をすべて削除してVimを再起動するとサブメニューを初期化できます。

アウトラインのオプション

" サブメニューのアウトラインで使用するシンタックス let qfixmemo_outline_syntax = 'ezotl'

" サブメニューのアウトライン折り畳みをデフォルトで有効化 let qfixmemo_outline_foldenable = 1

" サブメニューのアウトライン折り畳みのfoldmethod let qfixmemo_outline_foldmethod = 'indent'

" サブメニューのアウトライン折り畳みのfoldexpr let qfixmemo_outline_foldexpr = "getline(v:lnum)=~'^\\s*[=.*・]'?'>2':'1'"

アウトライン機能のfoldmethodについては :help foldmethod を参照してください。

デフォルトオプション

" サブメニュータイトル let SubWindow_Title = '__submenu__'

" サブメニューのウィンドウサイズ

let SubWindow_Size = 30 " サブメニューのウィンドウサイズを維持する

let SubWindow_KeepSize = 0 " サブメニューのウィンドウ表示方向

let SubWindow_Direction = 'topleft vertical'

" サブメニューのwrap let SubWindow_Wrap = 1

" サブメニューでアウトラインを使用する let SubWindow_Outline = 1

" サブメニューで表示するカレンダーの分割指定 let SubWindow_CalendarWinCmd = 'leftabove'

" サブメニューの強制保存キー(サブメニューローカル。g,wと同じ動作)

let qfixmemo_submenu_writekey = ''

  • SubWindow_Directionについては :help vertical を参照してください。

複数のサブメニュー

サブメニューはカウント指定可能で複数のサブメニューを作成できます。

カウント指定して実行してからは g,i で最後に使用したサブメニューが表示されます。

また g,I を実行するとデフォルトのサブメニューを表示します。

カウント指定時に使用されるオプションは SubWindow_Title1 のようにデフォルトオプションにカウントを付加したオプションです。

ただしSubWindow_Title1, SubWindow_Title2... はユニークな名前にしてください。

" カウント指定 3 で使用するサブメニューのタイトル let SubWindow_Title3 = '__submenu3__'

必要な指定は SubWindow_Title...だけで構いません。

SubWindow_Title以外も独自設定したい場合は設定するのは使用する番号の変更したいオプションだけで構いません。

カウントして樹のオプションを設定していない場合はデフォルトオプションと同じ値が使用されます。

" カウント指定 3 で使用するサブメニューのオプション

" サブメニューのタイトル let SubWindow_Title3 = '__submenu3__' " サブメニューのウィンドウサイズ

let SubWindow_Size3 = 10

" サブメニューのウィンドウ表示方向

let SubWindow_Direction3 = 'vertical topleft'

" サブメニューのwrap

let SubWindow_Wrap3 = 1

" サブメニューでアウトラインを使用する let SubWindow_Outline3 = 1

シングルウィンドウモード

デフォルトはシングルウィンドウモードなのでカウント指定でサブメニューを切り替えた場合、表示されていたサブメニューは閉じられます。

シングルウィンドウモードを無効化して画面上に複数のサブメニューを表示させることも可能です。

" サブメニューのシングルウィンドウモード let SubWindow_SingleMode = 0

アウトライン

以下に表示されているのはアウトライン機能のヘルプと同じ表示例です。

!!! 折り畳まれた行は !!! !!! l で開きます。 !!! *レベル タブでインデントすると レベルが変更されます。 レベルは4段階あります。 レベルに応じて 異なるシンタックスで 強調表示されます。 レベルが違う レベルが違う レベルが違う レベルが違う レベルが違う レベルが違う *フォールディング インデントを利用して、 折り畳みが使用可能です。 この行で zc を 実行してください。 行が折り畳まれたら、 l で閉じられた 折り畳みを開けます。 *タイトル 行頭が . * ・ だと タイトル行として .タイトル行 強調表示されます。 *ラベル 行頭が - + だと ラベルとして 強調表示されます。 -りんご +ごりら +らっぱ *コメント # 行頭が # だと # コメントとして # 強調表示されます。 # コメント行は # 折り畳まれません。

メニュー画面

メニュー画面は以下のコマンドで表示されます。

,,

メインメニューを表示

(注意) これまで howm-calendar.vim(QFixHowmをcalendar.vimに対応させるプラグイン)を使用していた場合は設定を含めて削除してください。

カレンダー表示機能を内蔵したhowm_calendar.vimを同梱しています。カレンダー表示に calendar.vimは必要としません。

g,,でメニュー画面を表示します。

また 3g,, の様にカウント指定すると予定・TODO表示の日数が変更になります。

メニュー画面

デフォルトでは howm_dir にあるファイル Menu-00-00-000000.howm がメニューファイルとして使用されます

(Menu-00-00-000000.howmが無い場合は自動的に作成されます)

デフォルトでは howm_dirに作成されるため、検索の対象になりますが、メニューファイルの内容が検索にかからないようにしたい場合は、QFixHowm_MenuDir を設定して howm_dir 以外のディレクトリに作成して下さい。

メニュー画面ファイルは何処にあってもリンク作成の対象になるので、よく使うオートリンクをメニューファイルで設定していても問題ありません。

"メニューファイルのディレクトリ。指定しない場合 howm_dir が使用される。

let QFixHowm_MenuDir = ''

"メニューファイル名

let QFixHowm_Menufile = 'Menu-00-00-000000.howm'

%reminder 等はコマンド実行時に以下のように置換されます。

%reminder

%recent

%random

予定・TODO

最近閲覧したエントリ

ランダム表示

メニューファイルはカーソルを一行目のファイル名に合わせて <CR>で編集可能です。

メニューファイルの保存時に時刻を自動で挿入されたくない場合は g,w で保存して下さい。

<CR>キー

メニュー画面の <CR> ではカウント指定が可能です。

18<CR> なら18行目に移動してから <CR> を押したのと同じ動作を行います。

この時18行目が howm:// で始まっているなら対応するファイルを開く事になります。

プレビュー

メニュー画面のプレビューではカーソル位置に howm:// で始まるファイル指定がある場合のみ自動的にプレビューウィンドウが開きます。

ウィンドウの開閉が鬱陶しい場合は QFixHowmMenuPreviewを 1 に設定してプレビューウィンドウを常に有効にしてください。

プレビューウィンドウはメニュー画面表示中に i でも On/Off切替可能です。

"メニュー画面のプレビューを常に表示
let QFixHowm_MenuPreview = 1

プレビュー自体を使用したくない場合は無効化してください。

" メニュー画面のプレビュー有効/無効
 let QFixHowm_MenuPreviewEnable = 0

カレンダー

カレンダー表示が鬱陶しい場合はオフにすることも出来ます。

" メニュー画面にカレンダーも表示する
 let QFixHowm_MenuCalendar = 1 

メニューのオートクローズ

howm://で表示されるファイル名にカーソル合わせて <CR>かダブルクリックでファイルを開くことができます。

この時自動的にメニュー画面を閉じるかどうかを設定可能です。

"メニュー画面からファイルを開くと非表示にする
let QFixHowm_MenuCloseOnJump = 1
新規メモ作成などでファイルを開く場合にも、この設定が有効です。
メニュー画面表示の分割方法
メニュー画面をデフォルトでウィンドウ分割して表示可能です。
分割方法は QFixHowm_MenuCmdでコマンドを実行して設定します
使用を想定しているコマンドは vertical split と wincmd w ですが wincmd L や wincmd H で分割位置を最端に移動させても良いかもしれません。
" メニュー画面の分割方法指定
" 垂直分割して左側
let QFixHowm_MenuCmd = 'vertical split'
" 垂直分割して右側
let QFixHowm_MenuCmd = 'vertical split | wincmd w'
" 水平分割
let QFixHowm_MenuCmd = 'split'
またメニュー画面の横幅も指定可能です。
" QFixHowmのメニュー画面の横幅指定
let QFixHowm_MenuWidth = 60
通常は横幅を設定する必要はありません。主にQuickfixウィンドウやプレビューウィンドウを水平表示する際に使用します。
拡張Quickfixウィンドウのオプション
その他のオプション
"メニュー画面の予定表示日数
let QFixHowm_ShowScheduleMenu = 10
"メニュー画面の予定・TODO表示に使われる識別子
let QFixHowm_ListReminder_MenuExt = '[-@+!~.]'
"メニュー画面で表示する最近のメモの数
let QFixHowm_MenuRecent = 5
"メニュー画面で表示するランダムメモの数
let QFixHowm_RandomWalkColumns = 10

ランダムメモの表示数は「ランダム表示」の初期値と共用です。

メニュー画面キーマップ

メニュー画面で " " の中のキーを押すか、メニューボタンにカーソルを合わせて <CR>またはダブルクリックで " "でくくられた中のコマンドが実行されます。

たとえば , を押すとメニュー画面の「予定・TODO」と「ランダムセレクト」が(表示されていれば)更新されます。

r, であれば「予定・TODO」がキャッシュ保持時間にかかわらず強制的に「予定・TODO」を再検索してメニュー画面を更新します。

-------------------------------------

%"i"[プレビュー] %","[menu更新(,)] %"r,"[Menu最新(r,)] %"I"[Help(H)]

-------------------------------------

%"."[新規(c)] %"u"[QMem(u)] %" "[日記(<Space>)] %"A"[日記一覧(A)]

%"m"[MRU(m)] %"o"[最近(l)] %"O"[最近(L)] %"a"[一覧(a)] %"ra"[高速一覧(ra)]

%"s"[固定(s)] %"S"[正規(g)] %"R"[ファイル一覧(rA)]

%"<Tab>"[予定(y)] %"t"[todo(t)] %"ry"[予定最新(ry)] %"rt"[Todo最新(rt)]

リビルド (%"rk"[キーワード(rk)] %"rR"[ランダム(rR)]) %"rN"[リネーム(rN)]

-------------------------------------

カスタマイズしたい場合は メニューファイルを編集して下さい。

なおメニューファイルからメニューボタンを削除しただけでは、ホットキーは削除されません。

(メニューファイルからメニューボタンを全て削除した場合はホットキーも全て削除されます)

ホットキーの変更

メニューファイルを修正しただけではホットキーは変換されないのでメニューローカルキーマップを定義する必要があります。

<Space>ではなく D で日記を書くボタンに変更する例

%"D"[日記(<Space>)]

コマンドは HowmMenuCmd()で QFixHowmのコマンドに変換されます。

<Space>ではなく D で日記を書くボタンに変更する例

.vimrc

" メニューのデフォルトキーマップを無効化
" let QFixHowm_MenuKey = 0
" メニューのユーザー定義キーマップ
function HowmMenuCmd()
  " <space>のキーマップを削除
  nunmap <buffer> <Space>
  " Dに日記コマンドを設定
  call HowmMenuCmdMap('D', ' ')
endfunction

メニューのデフォルトキーマップは QFixHowm_MenuKeyで無効化可能です。

第2パラメータを省略すると、第1パラメータのコマンドが実行されます。

call HowmMenuCmdMap('C', 'c')

call HowmMenuCmdMap('m')

C で g,cが実行される。

m で g,mが実行される。

独自のコマンドを呼び出したい場合は、直接バッファローカルなキーマップを設定して下さい。

function HowmMenuCmd()
  nnoremap <silent> <buffer> <Space> :Hoge<CR>
endfunction

その他

メニュー画面と言っても、ただのhowmファイルで内容に制限はありません。

よく使う「検索リンク」や「マクロアクション」を、好みに応じて追加してください。

メニュー画面の表示速度は予定・TODO の表示速度に依存します。

表示が遅くなってきたと思ったら以下を参照してみてください。

最初から設定していても基本的に副作用はありません。

予定・TODOの検索場所指定 (予定・TODO表示の高速化)