Skip to content

Commit 1e06a13

Browse files
authored
Merge pull request #297 from t-mochizuki/update_quickfix_8.1.0026
Update quickfix
2 parents 135a0b7 + 29bdcbd commit 1e06a13

File tree

2 files changed

+408
-46
lines changed

2 files changed

+408
-46
lines changed

doc/quickfix.jax

Lines changed: 203 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
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

308364
QuickFixリストやロケーションリスト中のバッファに対してコマンドを実行:
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
=============================================================================
378430
2. エラーウィンドウ *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

440494
QuickFixウィンドウには各行に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>*
448507
CTRL-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
=============================================================================
494661
3. 複数のエラーリストを使う *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
=============================================================================
537712
4. :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

Comments
 (0)