QFixHowm - コマンド解説2

QuickfixウィンドウのON/OFF

QuickfixウィンドウのON/OFFには lopen,lclose等のコマンドが使えますが <C-w>, やコマンドモードから制御コマンドを使用すると前回のカーソル位置、ソート結果なども保存されます。

<C-w>,

<C-w>.

q

QuickfixウィンドウのON/OFF

Quickfixウィンドウに移動する。

多数のウィンドウを開いていても、一度でQuickfixウィンドウに移動出来ます。

5<C-w>. のようにカウント指定すると指定サイズの高さに変更されます。

Quickfixウィンドウ上で実行すると、高さがデフォルトに戻ります。

Quickfixウィンドウを閉じる

ToggleQFixWinでQuickfixウィンドウのON/OFFが出来ます。

.vimrc設定例

"QuickfixウィンドウをON/OFF

"この設定例ではgsが使用できなくなります。好みに応じて変更して下さい。

nnoremap <silent> gs :ToggleQFixWin<CR>

lopen/lcloseを使用した場合はカレントディレクトリを基準にしてパスが表示されますが、<C-w>,等ではQuickfixコマンド(grep,make,vimgrepなど)を実行した時のディレクトリを基準にしてパスが表示されます。

Quickfixウィンドウを独自に処理しているプラグイン等でパス表示が長くなる場合は以下を参照して下さい。

「Quickfix上のパス表示が長くなる」

各種オプションは以下を参照して下さい。

拡張Quickfixウィンドウのオプション

"Quickfixウィンドウの高さ

let QFix_Height = 10

絞り込み検索

Quickfixウィンドウでは絞り込みが出来ます。

s を押すと入力モードになるので、何か適当な文字列(たとえばファイル名)を入れてみてください。

入力した文字列で絞り込まれます。

r では逆に入力した文字列を ”含まない” 結果に絞り込みます。

絞り込み対象はQuickfixに表示されている部分(各行1kバイト)のみが対象になります。

一段階前に戻したい場合は u で最初の状態に戻すのはUです。

<C-r>/ で検索文字列が貼り付け可能で、入力画面では <C-u>、<C-w>、ヒストリも有効です。

ソートの種類

Quickfixウィンドウで S を押すとソートの種類を聞いてきます。

m,n,t のいずれかを入力します。

Sort type? (r:reverse)+(m:mtime, n:name, t:text h:howmtime) :

ソートの種類

逆順にしたい場合は rt のように、最初に r を付けて下さい。

ソート後に uや Uコマンドでソート前の状態に戻す事が出来ます。

u

U

Quickfixウィンドウ上での編集を一段階元に戻す。

Quickfixウィンドウ上でのソート、編集など全ての編集作業を元に戻す。

連結表示

@で現在Quickfixウィンドウに登録されているエントリの内容を全てまとめて別バッファに表示できます。

絞り込みやソートを行って、ばらばらのファイルにある内容をまとめたいときに便利です。

また3@の様に現在行から個数指定したり、ビジュアルモードで選択した状態で @ を押すと選択したファイルだけ連結表示します。

連結表示のバッファはスクラッチバッファ(ファイルと関連がなく、書き込まれる予定のないバッファ)として作成されます。

この時バッファ名としては通常の新規howmファイルと同じ名前が使用されます。

連結表示バッファを保存したい場合は g,wで保存してください。

Quickfixウィンドウを編集すると連結表示したくないファイルを削除したり、連結する順番を入れ替える事が出来ます。

絞り込みやソートも有効です。

Quickfixウィンドウ上での編集

絞り込み検索

ソート

(スクリーンショット)

"レジスタ"を検索して、 @ で連結表示した所。

連結表示バッファを複数作成したくない場合は連結表示バッファ名を指定してください。

連結表示バッファ名指定をすると常に指定名の一つのみ使用されます。

let QFixHowm_MergeEntryName = "Merg-00-0000-00-00-000000.howm"

連結バッファ名を指定しない場合は以下の生成規則が使われます。

QFixHowmの自動生成ファイル

連結表示は「アウトラインモード」を利用すると、エントリをタイトルで折りたたむことが出来て便利です。

一ファイル複数エントリや連結表示のエントリを分割保存する

一ファイル複数エントリや連結表示されたファイル内のエントリを分割して保存出来ます。

分割したいファイルを開いて ,W か、分割したいエントリが含まれる部分をビジュアルモードで選択してから ,W を実行すると、エントリ単位で新規ファイルが howm_dir へ作成されます。

自動生成するファイル名は以下のオプションで指定可能ですが、ファイル名のバッティングを避けるため%Sを含む必要があります。

" 自動生成ファイル名(,W ,X)

let qfixmemo_auto_generate_filename = '%Y-%m-%d-%H%M%S'

Quickfixウィンドウ上での編集

QFixHowmの連結表示の際に手動で不要なエントリ行を削除したり順番を変更したりするのに使用します。

ノーマルモード

dd

p

P

Quickfixウィンドウ上の行を削除する。

3ddのようにカウント指定も可能。

削除した行を現在行の後ろに挿入する。

削除した行を現在行の前に挿入する。

ビジュアルモード

d

Quickfixウィンドウ上の行を削除する。

ノーマルモード

u

U

Quickfixウィンドウ上での編集を一段階元に戻す。

Quickfixウィンドウ上でのソート、編集など全ての編集作業を元に戻す。

エントリフィルタ

エントリフィルタはタイトル検索やカテゴリ検索の一種として扱えます。

howmファイルを文字列検索してから、Quickfixウィンドウで # を押すと、エントリフィルタが実行されます。

エントリフィルタを使用すると、検索単語を含むエントリの一覧が表示できます。

  1. 単語を検索
  2. # で「エントリフィルタ」を実行
  3. 検索単語を含む全てのエントリのタイトルが表示される

この状態で必要なら s コマンドの絞り込みを行ってください。

検索結果を「連結表示」も出来ます。

タイトル・カテゴリ検索として使う

たとえば「映画」について検索して、 Quickfixウィンドウに検索結果が表示されているとします。

Quickfixウィンドウには「映画」が含まれる行が全て表示されているはずです。

この時 # を押すとQuickfixウィンドウに表示されている結果を含むエントリ一覧を表示します。

つまり「映画」に関するエントリ一覧表示のように使用できるわけです。

このままでもタイトル検索に近い結果になっていると思いますが、この状態で s コマンドを使用してタイトル行検索の絞り込みも出来ます。

よく使うエントリフィルタ検索はマクロアクションと組み合わせて、メニュー画面に登録しておくのもおすすめです。

% コマンドは検索結果のサマリーのみをエントリタイトルに変更します。

,S でカーソル位置のhowmタイムスタンプを現在時刻に更新

,S 実行するとカーソル位置のエントリの howmタイムスタンプを現在時刻へ更新します。

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

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

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

なんたらかんたら

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

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

本文その2

ペアリンクhowmファイル

特定のファイルと対になるメモファイルを書きたい時もあるかもしれません。

例えば現在 public.cppというソースファイルを開いていてコメントなりTODOなりを書き込みたいのだけれど、ソース自体は公開されるものなので個人的なメモを書き込みにくいというような場合です。

このような時 g,j で現バッファとリンクされた howmファイルを開いてメモしておくことが出来ます。

,j

ペアリンクhowmファイル

現在開いているファイルに対応するペアリンクhowmファイルを開く

開かれるhowmファイルは現バッファのファイル名に.howmを追加したファイルです。

開かれるファイルは現バッファのファイル名に .howmの拡張子を付加した howmファイルで howm_dir直下の QFixHowm_PairLinkDirで指定される場所に作成されます。

例えば現在 public.cpp を編集していたとしたら g,j で (howm_dir)/pairlink/public.cpp.howm がメモ用として開かれる事になります。

"ペアリンクファイルの保存場所

let QFixHowm_PairLinkDir = 'pairlink'

ファイル名

ペアリンクファイル名をフルパスから生成する事も出来ます。

"ペアリンクファイル名をフルパスから生成

let QFixHowm_PairLinkMode = 1

MRUでは鬱陶しいので非表示にする方がよいかもしれません。

" MRUに登録しないファイル名(正規表現)

let QFixMRU_IgnoreFile = '/pairlink/'

ファイルタイプ

ペアリンクhowmファイル」のペアファイルは対応するファイルのファイルタイプと同じ色分けを行います。

たとえば「test.py」のペアファイル「test.py.howm」 にソースをコピーすると pythonの色分けそのままで表示されます。

D:/usr/tmp/test.py という pythonのファイルを開いている時に g,j を実行すると以下のようなペアファイル test.py.howmが開かれます。

= >>> D:/usr/tmp/test.py

[2011/02/28 00:01]

vim: set ft=python.howm_memo :

このファイルには pythonのシンタックス表示(色分け)が行われますので、test.pyのコードを引用すると pythonそのままの色分けで確認することが出来ます。

不要ならモードライン指定を以下のようにすると howmだけのシンタックス表示になります。

vim: set ft=howm_memo :

モードライン自体を削除すると以下を指定したのと同じ事になります。

vim: set ft=python.howm_memo :

エントリのランダム表示

Howmコマンド(全てのバッファで有効)

,rr

,rR

エントリのランダム表示

3g,rrの用にカウント指定すると指定した数のエントリをランダム表示します。

エントリのランダム表示」用のエントリリストファイルをリビルドします。

Quickfixウィンドウ上の操作

<F5>

QFixGrep,QFixHowmの結果が表示されている場合「エントリのランダム表示」の実行

g,rr を実行するか、 QFixGrep、QFixHowmの検索結果が表示されている Quickfixウィンドウ上で <F5> を押すと全てのエントリから、ランダムにエントリを表示します。

10g,rrの用にカウント指定すると、指定した数のエントリをランダム表示します。

表示される可能性のある全てのエントリのリストはQFixHowm_RandomWalkFileに保存され、一度に表示する数はQFixHowm_RandomWalkColumnsで指定できます。

"ランダム表示用のエントリリスト保存ファイル

let QFixHowm_RandomWalkFile = '~/.howm-random'

"ランダム表示するエントリ数

let QFixHowm_RandomWalkColumns = 10

エントリリストファイルは作成時から10日以上経つと自動更新されますが、必要ならば g,rRを実行して、エントリリストファイルを再作成してください。

0に設定すると自動更新はしません。

"ランダム表示用エントリリストファイルを自動更新

let QFixHowm_RandomWalkUpdate = 10

ランダム表示させたくないタイトルはQFixHowm_RandomWalkExcludeに正規表現で指定します。

let QFixHowm_RandomWalkExclude = ':work\|:pc'

ランダム表示が動作しない場合

設定しなくても動作しますが androidでは1に設定したほうが乱数の質が良くなります。

" 乱数取得方法

" 0 : 各OS用のデフォルト(Windows, unix, mac)

" 1 : 環境変数 $RANDOMから取得 (unix, android)

" 2 : Vimのreltime()を使用して取得 (Vim汎用)

let qfixmemo_random_mode = 0

unix系のOSで動作しない場合は qfixmemo_random_modeを 1に設定すると動作するかもしれません。

reltime()を使用する乱数はVimであればほぼ動作しますが、質はあまり良くありません。

エントリのランダム表示」で使用する乱数はOSのシステムコールを利用しています。

特定のOS環境やOSのバージョンアップで乱数生成が動作しない場合にはQFixMemoRandom()を定義して任意の方法で乱数生成を行うことができます。

例えばPythonインターフェイスを利用して乱数生成を行う場合は.vimrc等で以下のように設定します。

(rangeで指定した範囲の整数を返すようにしてください)

" Pythonで乱数生成 function! QFixMemoRandom(range) python << EOF import vim, sys, random range = int(vim.eval('a:range')) random.seed() vim.command('let rand = '+str(random.randint(0, range))) EOF return rand endfunction

エントリ一覧表示の高速な代替コマンド

,a のエントリ一覧表示において大量のエントリがQuickfixウィンドウに登録されると起動やプレビューが重くなります。

このような場合は代替コマンドとして「Quickfixウィンドウを使用しない全エントリ一覧表示」を使用可能です。

,ra

Quickfixウィンドウを使用しない全エントリ一覧表示。

機能は限定されますが高速に動作します。

大量のエントリを作成しているために Quickfixウィンドウ版の ,a コマンドが使い物にならないような場合は、以下を設定すると ,a コマンドで「Quickfixウィンドウを使用しない全エントリ一覧表示」に変更可能です。

"全エントリ一覧表示でキャッシュを使用する

let QFixHowm_TitleListCache = 1

この時 ,a コマンドでは一度表示した全エントリ一覧表示を (grepを使用しないで)キャッシュ表示するので一瞬で表示されます。

最新の情報に変更したい場合は ,ra を実行してください。

,aと同様のソートや絞り込み検索、編集が行えますが若干機能は限定されています。

grepとして使用する

Grepとして使用する