1- *quickfix.txt* For Vim バージョン 8.0 . Last change: 2017 Mar 06
1+ *quickfix.txt* For Vim バージョン 8.1 . Last change: 2018 May 01
22
33
44 VIMリファレンスマニュアル by Bram Moolenaar
@@ -44,6 +44,12 @@ Vim の中でコマンドを実行し結果を得る方法の一つに|:make|コ
4444各コンパイラからのエラーメッセージを解釈させるためには、オプション
4545'errorformat' をセットする (下の| errorformat | を参照)。
4646
47+ *quickfix-ID*
48+ 各QuickFixリストはQuickFix IDと呼ばれる一意な識別子を持ち、この番号はVimセッ
49+ ションの中で変わらない。getqflist() 関数はリストに割り当てられた識別子の取得に
50+ 使用できる。QuickFixリスト番号もある。この番号は、10個以上のリストがQuickFixス
51+ タックに追加されるたびに変更される可能性がある。
52+
4753 *location-list* *E776*
4854ロケーションリストはウィンドウローカルなQuickFixリストである。`:vimgrep ` ,
4955`:grep ` , `:helpgrep ` , `:make ` などのコマンドはQuickFixリストを作成するが、それ
@@ -57,6 +63,13 @@ Vim の中でコマンドを実行し結果を得る方法の一つに|:make|コ
5763ンリストのコピーを得る。ロケーションリストへの参照が全てなくなると、そのロ
5864ケーションリストは破棄される。
5965
66+ *quickfix-changedtick*
67+ 全てのQuickFixリストとロケーションリストはそのリストに行われた変更の総数を追跡
68+ する読み込み専用のchangedtick変数を持つ。QuickFixリストが変更されるたびに、こ
69+ の総数はインクリメントされる。これは、リストが変更されたときだけアクションを実
70+ 行することに使用できる。getqflist() および getloclist() 関数は changedtick の
71+ 現在の値を問い合わせるのに使用できる。changedtick変数を変更することはできない。
72+
6073以下のQuickFixコマンドが利用できる。ロケーションリストコマンドはQuickFixコマン
6174ドに似ていて、QuickFixコマンドのプリフィックス 'c' が 'l' に置き換わっている。
6275
@@ -284,9 +297,8 @@ Vim の中でコマンドを実行し結果を得る方法の一つに|:make|コ
284297かの理由で消されてしまう事があり、メッセージ "line changed" がその警告となる。
285298一度Vimを終了し再起動した場合マークは失われ正しいエラー位置は把握できない。
286299
287- Vimが| +autocmd | 機能つきでビルドされている場合、QuickFixコマンド (':make',
288- ':grep' など) を実行する前後に2つの自動コマンドが利用できる。詳しくは
289- | QuickFixCmdPre | と| QuickFixCmdPost | を参照。
300+ QuickFixコマンド (':make', ':grep' など) を実行する前後に2つの自動コマンドが利
301+ 用できる。詳しくは | QuickFixCmdPre | と | QuickFixCmdPost | を参照。
290302
291303 *QuickFixCmdPost-example*
292304'encoding' とロケールが異なる場合、コンパイラのエラーメッセージと Vim 内部のエ
@@ -304,6 +316,50 @@ Vimが|+autocmd|機能つきでビルドされている場合、QuickFixコマ
304316 au QuickfixCmdPost make call QfMakeConv()
305317 代わりに 'makeencoding' オプションを使うこともできる。
306318
319+ *quickfix-title*
320+ すべてのQuickFixリストとロケーションリストはタイトルを持つ。デフォルトではタイ
321+ トルはそのリストを作成したコマンドに設定される。| getqflist() | と| getloclist() |
322+ 関数はそれぞれQuickFixリストとロケーションリストのタイトルを取得するために使わ
323+ れる。| setqflist() | と | setloclist() | 関数はそれぞれQuickFixリストとロケーショ
324+ ンリストのタイトルを変更するために使われる。例: >
325+ call setqflist([], 'a', {'title' : 'Cmd output'})
326+ echo getqflist({'title' : 1})
327+ call setloclist(3, [], 'a', {'title' : 'Cmd output'})
328+ echo getloclist(3, {'title' : 1})
329+ <
330+ *quickfix-size*
331+ あなたはQuickFixリストとロケーションリストの中の項目の数をそれぞれ
332+ | getqflist() | と | getloclist() | 関数を使用して取得できる。例: >
333+ echo getqflist({'size' : 1})
334+ echo getloclist(5, {'size' : 1})
335+ <
336+ *quickfix-context*
337+ 任意のVimの型はQuickFixリストまたはロケーションリストとのコンテキストとして関
338+ 連付けることができる。| setqflist() | と | setloclist() | 関数はコンテキストを
339+ QuickFixとロケーションリストにそれぞれ関連付けることに使用できる。
340+ | getqflist() | と | getloclist() | 関数はそれぞれQuickFixとロケーションリストのコ
341+ ンテキストの取得に使用できる。これは複数のQuickFix/ロケーションリストを取り扱
342+ うVimプラグインにとって便利である。
343+ 例: >
344+
345+ let somectx = {'name' : 'Vim', 'type' : 'Editor'}
346+ call setqflist([], 'a', {'context' : somectx})
347+ echo getqflist({'context' : 1})
348+
349+ let newctx = ['red', 'green', 'blue']
350+ call setloclist(2, [], 'a', {'id' : qfid, 'context' : newctx})
351+ echo getloclist(2, {'id' : qfid, 'context' : 1})
352+ <
353+ *quickfix-parse*
354+ | getqflist() | 関数を使用してQuickFixリストを作成または変更せずに、
355+ 'errorformat' を使用して行のリストをパースできる。例: >
356+ echo getqflist({'lines' : ["F1:10:Line10", "F2:20:Line20"]})
357+ echo getqflist({'lines' : systemlist('grep -Hn quickfix *')})
358+ これは 'items' キーに行からパースされたQuickFixの項目のリストが含まれている辞
359+ 書を返す。以下は 'errorformat' オプションを変更せずにカスタム 'errorformat' を
360+ 使って行をパースする方法を示している。 >
361+ echo getqflist({'efm' : '%f#%l#%m', 'lines' : ['F1#10#Line']})
362+ <
307363
308364QuickFixリストやロケーションリスト中のバッファに対してコマンドを実行:
309365 *:cdo*
@@ -330,8 +386,7 @@ QuickFixリストやロケーションリスト中のバッファに対してコ
330386 Note: このコマンドを実行している間、Syntax 自動コマン
331387 ドイベントが 'eventignore' に追加され、無効化される。
332388 これは各バッファの編集を大幅にスピードアップさせる。
333- {Vi にはない} {| +listcmds | 機能なしでコンパイルされた
334- 場合は使用できない}
389+ {Vi にはない}
335390 | :bufdo | 、| :tabdo | 、| :argdo | 、| :windo | 、| :ldo | 、
336391 | :cfdo | 、| :lfdo | も参照。
337392
@@ -344,8 +399,7 @@ QuickFixリストやロケーションリスト中のバッファに対してコ
344399 :{cmd}
345400 etc.
346401< それ以外は `:cdo ` の場合と同様である。
347- {Vi にはない} {| +listcmds | 機能なしでコンパイルされた
348- 場合は使用できない}
402+ {Vi にはない}
349403
350404 *:ldo*
351405:ld[o][!] {cmd} カレントウィンドウのロケーションリスト中の有効な各項
@@ -358,8 +412,7 @@ QuickFixリストやロケーションリスト中のバッファに対してコ
358412 etc.
359413< ロケーションリスト中の有効な項目のみが使われる。
360414 それ以外は `:cdo ` の場合と同様である。
361- {Vi にはない} {| +listcmds | 機能なしでコンパイルされた
362- 場合は使用できない}
415+ {Vi にはない}
363416
364417 *:lfdo*
365418:lfdo[!] {cmd} カレントウィンドウのロケーションリスト中の各ファイル
@@ -371,8 +424,7 @@ QuickFixリストやロケーションリスト中のバッファに対してコ
371424 :{cmd}
372425 etc.
373426< それ以外は `:cdo ` の場合と同様である。
374- {Vi にはない} {| +listcmds | 機能なしでコンパイルされた
375- 場合は使用できない}
427+ {Vi にはない}
376428
377429=============================================================================
3784302. エラーウィンドウ *quickfix-window*
@@ -393,7 +445,9 @@ QuickFixリストやロケーションリスト中のバッファに対してコ
393445 ウィンドウは w:quickfix_title 変数を持っている。この変
394446 数はクイックフィックスリストを生成したコマンドを示して
395447 いる。変数の値は 'statusline' が適切に調整されていれば
396- ステータスラインに表示される。
448+ ステータスラインに表示される。このバッファがQuickFixコ
449+ マンドまたは関数により変更されるたびに、
450+ | b:changedtick | 変数はインクリメントされる。
397451
398452 *:lop* *:lopen*
399453:lop[en] [height] カレントウィンドウのロケーションリストを表示するウィン
@@ -438,12 +492,17 @@ QuickFixリストやロケーションリスト中のバッファに対してコ
438492タスラインをマウスで上へドラッグするなど)。
439493
440494QuickFixウィンドウには各行に1個ずつエラーが表示される。その行数はエラー番号に
441- 等しい。":.cc" でカーソル下のエラーに移動できる。<Enter> キーを押すのと行をダブ
442- ルクリックするのは同じ効果がある。そのエラーを含むファイルがQuickFixウィンドウ
443- の上に開かれる。そのファイルがすでにウィンドウに開かれていたらそのウィンドウが
444- アクティブになる。そのウィンドウにあるバッファが変更されていて、そのエラーが別
445- のファイルにある場合はエラーへの移動は失敗する。まず、そのウィンドウが破棄して
446- もよいバッファを含んでいることを確かめなければならない。
495+ 等しい。現在の項目はQuickFixLineハイライティングでハイライトされる。あなたはそ
496+ れをあなたの好みに変更することができる。例: >
497+ :hi QuickFixLine ctermbg=Yellow guibg=Yellow
498+
499+ ":.cc" でカーソル下のエラーに移動できる。
500+ <Enter> キーを押すのと行をダブルクリックするのは同じ効果がある。そのエラーを含
501+ むファイルがQuickFixウィンドウの上に開かれる。そのファイルがすでにウィンドウに
502+ 開かれていたらそのウィンドウがアクティブになる。そのウィンドウにあるバッファが
503+ 変更されていて、そのエラーが別のファイルにある場合はエラーへの移動は失敗する。
504+ まず、そのウィンドウが破棄してもよいバッファを含んでいることを確かめなければな
505+ らない。
447506 *CTRL-W_<Enter>* *CTRL-W_<CR>*
448507CTRL-W <Enter> を使うと、新しいウィンドウを開いてそこでエラーにジャンプできる。
449508
@@ -490,6 +549,114 @@ Note: QuickFixウィンドウ内で変更を加えてもエラーのリストに
490549連付けられていなかった場合、ロケーションリストウィンドウに表示されているロケー
491550ションリストが関連づけられる。
492551
552+ *quickfix-window-ID*
553+ | getqflist() | と | getloclist() | 関数を使用して、QuickFixウィンドウとロケーショ
554+ ンリストウィンドウのウィンドウIDをそれぞれ取得できる(もしあれば)。例: >
555+ echo getqflist({'winid' : 1}).winid
556+ echo getloclist(2, {'winid' : 1}).winid
557+ <
558+ *getqflist-examples*
559+ getqflist() 関数と getloclist() 関数は、それぞれQuickFixとロケーションリストの
560+ さまざまな属性を取得するのに使用できる。これらの関数の使用例を以下に示す:
561+ >
562+ " 現在のQuickFixリストのタイトルを取得する
563+ :echo getqflist({'title' : 0}).title
564+
565+ " 現在のQuickFixリストの識別子を取得する
566+ :let qfid = getqflist({'id' : 0}).id
567+
568+ " スタックの中の4番目のQuickFixリストの識別子を取得する
569+ :let qfid = getqflist({'nr' : 4, 'id' : 0}).id
570+
571+ " 特定の識別子を持つQuickFixリストが存在するかどうかを検査する
572+ :if getqflist({'id' : qfid}).id == qfid
573+
574+ " スタックの中の現在のQuickFixリストのインデックスを取得する
575+ :let qfnum = getqflist({'nr' : 0}).nr
576+
577+ " 識別子により指定されたQuickFixリストのitemsを取得する
578+ :echo getqflist({'id' : qfid, 'items' : 0}).items
579+
580+ " idにより指定されたQuickFixリストの中の項目の数を取得する
581+ :echo getqflist({'id' : qfid, 'size' : 0}).size
582+
583+ " スタックの中の3番目のQuickFixリストのcontextを取得する
584+ :echo getqflist({'nr' : 3, 'context' : 0}).context
585+
586+ " スタックの中のQuickFixリストの数を取得する
587+ :echo getqflist({'nr' : '$'}).nr
588+
589+ " 現在のQuickFixリストが変更された回数を取得する
590+ :echo getqflist({'changedtick' : 0}).changedtick
591+
592+ " 識別子により指定されたQuickFixリストの中の現在の項目を取得する
593+ :echo getqflist({'id' : qfid, 'idx' : 0}).idx
594+
595+ " 識別子を使用して全てのQuickFixリスト属性を取得する
596+ :echo getqflist({'id' : qfid, 'all' : 0})
597+
598+ " linesのリストの値からテキストをパースしてQuickFixリストを返す
599+ :let myList = ["a.java:10:L10", "b.java:20:L20"]
600+ :echo getqflist({'lines' : myList}).items
601+
602+ " カスタム 'efm' を使用してテキストをパースしてQuickFixリストを返す
603+ :echo getqflist({'lines' : ['a.c#10#Line 10'], 'efm':'%f#%l#%m'}).items
604+
605+ " QuickFixリストのウィンドウIDを取得する
606+ :echo getqflist({'winid' : 0}).winid
607+
608+ " 現在のロケーションリストのcontextを取得する
609+ :echo getloclist(0, {'context' : 0}).context
610+
611+ " 3番目のウィンドウのロケーションリストのウィンドウIDを取得する
612+ :echo getloclist(3, {'winid' : 0}).winid
613+ <
614+ *setqflist-examples*
615+ setqflist() 関数と setloclist() 関数は、それぞれQuickFixとロケーションリストの
616+ さまざまな属性を設定するのに使用できる。これらの関数の使用例を以下に示す:
617+ >
618+ " titleとcontextを持つ空のQuickFixリストを作成する
619+ :let t = 'Search results'
620+ :let c = {'cmd' : 'grep'}
621+ :call setqflist([], ' ', {'title' : t, 'context' : c})
622+
623+ " 現在のQuickFixリストのtitleを設定する
624+ :call setqflist([], 'a', {'title' : 'Mytitle'})
625+
626+ " 識別子により指定されたQuickFixリストのcontextを設定する
627+ :call setqflist([], 'a', {'id' : qfid, 'context' : {'val' : 100}})
628+
629+ " コマンド出力から新しいQuickFixリストを作成する
630+ :call setqflist([], ' ', {'lines' : systemlist('grep -Hn main *.c')})
631+
632+ " カスタムefmを使用してテキストをパースして特定のQuickFixリストに追加する
633+ :call setqflist([], 'a', {'id' : qfid,
634+ \ 'lines' : ["a.c#10#L10", "b.c#20#L20"], 'efm':'%f#%l#%m'})
635+
636+ " 識別子により指定されたQuickFixリストにitemsを追加する
637+ :let newItems = [{'filename' : 'a.txt', 'lnum' : 10, 'text' : "Apple"},
638+ \ {'filename' : 'b.txt', 'lnum' : 20, 'text' : "Orange"}]
639+ :call setqflist([], 'a', {'id' : qfid, 'items' : newItems})
640+
641+ " 識別子により指定されたQuickFixリストを空にする
642+ :call setqflist([], 'r', {'id' : qfid, 'items' : []})
643+
644+ " スタックの中の全てのQuickFixリストを開放する
645+ :call setqflist([], 'f')
646+
647+ " 4番目のQuickFixリストのtitleを設定する
648+ :call setqflist([], 'a', {'nr' : 4, 'title' : 'SomeTitle'})
649+
650+ " スタックの最後に新しいQuickFixリストを作成する
651+ :call setqflist([], ' ', {'nr' : '$',
652+ \ 'lines' : systemlist('grep -Hn class *.java')})
653+
654+ " コマンド出力から新しいロケーションリストを作成する
655+ :call setloclist(0, [], ' ', {'lines' : systemlist('grep -Hn main *.c')})
656+
657+ " 3番目のウィンドウのロケーションリスト項目を置き換える
658+ :call setloclist(3, [], 'r', {'items' : newItems})
659+ <
493660=============================================================================
4946613. 複数のエラーリストを使う *quickfix-error-lists*
495662
@@ -533,14 +700,21 @@ Note: QuickFixウィンドウ内で変更を加えてもエラーのリストに
533700ングしているときに特に便利である。もっと最近のエラーリストを残しておきたい場合
534701は初めに ":cnewer 99" を行うこと。
535702
703+ QuickFixやロケーションリストのスタック数を取得するには、特別な値 '$' に設定さ
704+ れたリスト番号でそれぞれ、| getqflist() | 関数と | getloclist() | 関数を使用でき
705+ る。例: >
706+ echo getqflist({'nr' : '$'}).nr
707+ echo getloclist(3, {'nr' : '$'}).nr
708+ スタック内の現在のリスト番号を取得するには: >
709+ echo getqflist({'nr' : 0}).nr
710+ <
536711=============================================================================
5377124. :makeの使い方 *:make_makeprg*
538713
539714 *:mak* *:make*
540- :mak[e][!] [arguments] 1. vimが| +autocmd | つきでビルドされているならば、
541- | QuickFixCmdPre | に関連付けられた自動コマンドが全て
715+ :mak[e][!] [arguments] 1. | QuickFixCmdPre | に関連付けられた自動コマンドが全て
542716 実行される。
543- 2, オプション 'autowrite' がonならば変更のあるバッファ
717+ 2. オプション 'autowrite' がonならば変更のあるバッファ
544718 は保存される。
545719 3. 'makeef' からエラーファイルの名前が生成される。
546720 'makeef' が "##" を含まずかつ既に名前が存在する場合
@@ -550,10 +724,8 @@ Note: QuickFixウィンドウ内で変更を加えてもエラーのリストに
550724 出力がerrorfileに保存される (Unixではそれも画面に
551725 echoされる)。
552726 5. 'errorformat' を使ってerrorfileが読みこまれる。
553- 6. vimが| +autocmd | つきでビルドされているならば、
554- | QuickFixCmdPost | に関連付けられた自動コマンドが全て
555- 実行される。
556- 後述のサンプルを参照。
727+ 6. | QuickFixCmdPost | に関連付けられた自動コマンドが全
728+ て実行される。後述のサンプルを参照。
557729 7. [!]が与えられていないときは最初のエラーに移動する。
558730 8. エラーファイルが削除される。
559731 9. | :cnext | や| :cprevious | などのコマンドでエラー間を移
@@ -1005,6 +1177,7 @@ Note: デフォルトでは大文字と小文字の違いは無視される。
10051177基本要素
10061178
10071179 %f ファイル名 (文字列を検索)
1180+ %o モジュール名 (文字列を検索)
10081181 %l 行番号 (数字を検索)
10091182 %c 桁番号 (エラーの桁を表す数字 (<Tab> 1個は1桁と数える))
10101183 %v 画面上の桁番号 (エラーの画面上の桁を表す番号 (<Tab> 1個
@@ -1046,6 +1219,10 @@ nomagic" とされる。"%s" はエラー出力中の行番号がない行を探
10461219きる。シェルコマンド "grep" の出力のように。
10471220パターンがある場合は行番号は使われない。
10481221
1222+ "%o" はQuickfix項目の中のモジュール名を指定する。もし指定があればそれがファイ
1223+ ル名の代わりにQuickfixエラーウィンドウの中で使われる。モジュール名は結果を表示
1224+ するためだけに使われ、ファイル名はそのファイルにジャンプするときに使われる。
1225+
10491226ディレクトリを変更する
10501227
10511228次の大文字の変換文字は、特別なフォーマット文字列のタイプを指定する。これらのう
0 commit comments