Skip to content

Commit

Permalink
Merge pull request #297 from t-mochizuki/update_quickfix_8.1.0026
Browse files Browse the repository at this point in the history
Update quickfix
  • Loading branch information
h-east committed Aug 11, 2018
2 parents 135a0b7 + 29bdcbd commit 1e06a13
Show file tree
Hide file tree
Showing 2 changed files with 408 additions and 46 deletions.
229 changes: 203 additions & 26 deletions doc/quickfix.jax
@@ -1,4 +1,4 @@
*quickfix.txt* For Vim バージョン 8.0. Last change: 2017 Mar 06
*quickfix.txt* For Vim バージョン 8.1. Last change: 2018 May 01


VIMリファレンスマニュアル by Bram Moolenaar
Expand Down Expand Up @@ -44,6 +44,12 @@ Vim の中でコマンドを実行し結果を得る方法の一つに|:make|コ
各コンパイラからのエラーメッセージを解釈させるためには、オプション
'errorformat' をセットする (下の|errorformat|を参照)。

*quickfix-ID*
各QuickFixリストはQuickFix IDと呼ばれる一意な識別子を持ち、この番号はVimセッ
ションの中で変わらない。getqflist() 関数はリストに割り当てられた識別子の取得に
使用できる。QuickFixリスト番号もある。この番号は、10個以上のリストがQuickFixス
タックに追加されるたびに変更される可能性がある。

*location-list* *E776*
ロケーションリストはウィンドウローカルなQuickFixリストである。`:vimgrep`,
`:grep`, `:helpgrep`, `:make` などのコマンドはQuickFixリストを作成するが、それ
Expand All @@ -57,6 +63,13 @@ Vim の中でコマンドを実行し結果を得る方法の一つに|:make|コ
ンリストのコピーを得る。ロケーションリストへの参照が全てなくなると、そのロ
ケーションリストは破棄される。

*quickfix-changedtick*
全てのQuickFixリストとロケーションリストはそのリストに行われた変更の総数を追跡
する読み込み専用のchangedtick変数を持つ。QuickFixリストが変更されるたびに、こ
の総数はインクリメントされる。これは、リストが変更されたときだけアクションを実
行することに使用できる。getqflist() および getloclist() 関数は changedtick の
現在の値を問い合わせるのに使用できる。changedtick変数を変更することはできない。

以下のQuickFixコマンドが利用できる。ロケーションリストコマンドはQuickFixコマン
ドに似ていて、QuickFixコマンドのプリフィックス 'c' が 'l' に置き換わっている。

Expand Down Expand Up @@ -284,9 +297,8 @@ Vim の中でコマンドを実行し結果を得る方法の一つに|:make|コ
かの理由で消されてしまう事があり、メッセージ "line changed" がその警告となる。
一度Vimを終了し再起動した場合マークは失われ正しいエラー位置は把握できない。

Vimが|+autocmd|機能つきでビルドされている場合、QuickFixコマンド (':make',
':grep' など) を実行する前後に2つの自動コマンドが利用できる。詳しくは
|QuickFixCmdPre||QuickFixCmdPost|を参照。
QuickFixコマンド (':make', ':grep' など) を実行する前後に2つの自動コマンドが利
用できる。詳しくは |QuickFixCmdPre||QuickFixCmdPost| を参照。

*QuickFixCmdPost-example*
'encoding' とロケールが異なる場合、コンパイラのエラーメッセージと Vim 内部のエ
Expand All @@ -304,6 +316,50 @@ Vimが|+autocmd|機能つきでビルドされている場合、QuickFixコマ
au QuickfixCmdPost make call QfMakeConv()
代わりに 'makeencoding' オプションを使うこともできる。

*quickfix-title*
すべてのQuickFixリストとロケーションリストはタイトルを持つ。デフォルトではタイ
トルはそのリストを作成したコマンドに設定される。|getqflist()||getloclist()|
関数はそれぞれQuickFixリストとロケーションリストのタイトルを取得するために使わ
れる。|setqflist()||setloclist()| 関数はそれぞれQuickFixリストとロケーショ
ンリストのタイトルを変更するために使われる。例: >
call setqflist([], 'a', {'title' : 'Cmd output'})
echo getqflist({'title' : 1})
call setloclist(3, [], 'a', {'title' : 'Cmd output'})
echo getloclist(3, {'title' : 1})
<
*quickfix-size*
あなたはQuickFixリストとロケーションリストの中の項目の数をそれぞれ
|getqflist()||getloclist()| 関数を使用して取得できる。例: >
echo getqflist({'size' : 1})
echo getloclist(5, {'size' : 1})
<
*quickfix-context*
任意のVimの型はQuickFixリストまたはロケーションリストとのコンテキストとして関
連付けることができる。|setqflist()||setloclist()| 関数はコンテキストを
QuickFixとロケーションリストにそれぞれ関連付けることに使用できる。
|getqflist()||getloclist()| 関数はそれぞれQuickFixとロケーションリストのコ
ンテキストの取得に使用できる。これは複数のQuickFix/ロケーションリストを取り扱
うVimプラグインにとって便利である。
例: >
let somectx = {'name' : 'Vim', 'type' : 'Editor'}
call setqflist([], 'a', {'context' : somectx})
echo getqflist({'context' : 1})
let newctx = ['red', 'green', 'blue']
call setloclist(2, [], 'a', {'id' : qfid, 'context' : newctx})
echo getloclist(2, {'id' : qfid, 'context' : 1})
<
*quickfix-parse*
|getqflist()| 関数を使用してQuickFixリストを作成または変更せずに、
'errorformat' を使用して行のリストをパースできる。例: >
echo getqflist({'lines' : ["F1:10:Line10", "F2:20:Line20"]})
echo getqflist({'lines' : systemlist('grep -Hn quickfix *')})
これは 'items' キーに行からパースされたQuickFixの項目のリストが含まれている辞
書を返す。以下は 'errorformat' オプションを変更せずにカスタム 'errorformat'
使って行をパースする方法を示している。 >
echo getqflist({'efm' : '%f#%l#%m', 'lines' : ['F1#10#Line']})
<

QuickFixリストやロケーションリスト中のバッファに対してコマンドを実行:
*:cdo*
Expand All @@ -330,8 +386,7 @@ QuickFixリストやロケーションリスト中のバッファに対してコ
Note: このコマンドを実行している間、Syntax 自動コマン
ドイベントが 'eventignore' に追加され、無効化される。
これは各バッファの編集を大幅にスピードアップさせる。
{Vi にはない} {|+listcmds| 機能なしでコンパイルされた
場合は使用できない}
{Vi にはない}
|:bufdo||:tabdo||:argdo||:windo||:ldo|
|:cfdo||:lfdo| も参照。

Expand All @@ -344,8 +399,7 @@ QuickFixリストやロケーションリスト中のバッファに対してコ
:{cmd}
etc.
< それ以外は `:cdo` の場合と同様である。
{Vi にはない} {|+listcmds| 機能なしでコンパイルされた
場合は使用できない}
{Vi にはない}

*:ldo*
:ld[o][!] {cmd} カレントウィンドウのロケーションリスト中の有効な各項
Expand All @@ -358,8 +412,7 @@ QuickFixリストやロケーションリスト中のバッファに対してコ
etc.
< ロケーションリスト中の有効な項目のみが使われる。
それ以外は `:cdo` の場合と同様である。
{Vi にはない} {|+listcmds| 機能なしでコンパイルされた
場合は使用できない}
{Vi にはない}

*:lfdo*
:lfdo[!] {cmd} カレントウィンドウのロケーションリスト中の各ファイル
Expand All @@ -371,8 +424,7 @@ QuickFixリストやロケーションリスト中のバッファに対してコ
:{cmd}
etc.
< それ以外は `:cdo` の場合と同様である。
{Vi にはない} {|+listcmds| 機能なしでコンパイルされた
場合は使用できない}
{Vi にはない}

=============================================================================
2. エラーウィンドウ *quickfix-window*
Expand All @@ -393,7 +445,9 @@ QuickFixリストやロケーションリスト中のバッファに対してコ
ウィンドウは w:quickfix_title 変数を持っている。この変
数はクイックフィックスリストを生成したコマンドを示して
いる。変数の値は 'statusline' が適切に調整されていれば
ステータスラインに表示される。
ステータスラインに表示される。このバッファがQuickFixコ
マンドまたは関数により変更されるたびに、
|b:changedtick| 変数はインクリメントされる。

*:lop* *:lopen*
:lop[en] [height] カレントウィンドウのロケーションリストを表示するウィン
Expand Down Expand Up @@ -438,12 +492,17 @@ QuickFixリストやロケーションリスト中のバッファに対してコ
タスラインをマウスで上へドラッグするなど)。

QuickFixウィンドウには各行に1個ずつエラーが表示される。その行数はエラー番号に
等しい。":.cc" でカーソル下のエラーに移動できる。<Enter>キーを押すのと行をダブ
ルクリックするのは同じ効果がある。そのエラーを含むファイルがQuickFixウィンドウ
の上に開かれる。そのファイルがすでにウィンドウに開かれていたらそのウィンドウが
アクティブになる。そのウィンドウにあるバッファが変更されていて、そのエラーが別
のファイルにある場合はエラーへの移動は失敗する。まず、そのウィンドウが破棄して
もよいバッファを含んでいることを確かめなければならない。
等しい。現在の項目はQuickFixLineハイライティングでハイライトされる。あなたはそ
れをあなたの好みに変更することができる。例: >
:hi QuickFixLine ctermbg=Yellow guibg=Yellow
":.cc" でカーソル下のエラーに移動できる。
<Enter>キーを押すのと行をダブルクリックするのは同じ効果がある。そのエラーを含
むファイルがQuickFixウィンドウの上に開かれる。そのファイルがすでにウィンドウに
開かれていたらそのウィンドウがアクティブになる。そのウィンドウにあるバッファが
変更されていて、そのエラーが別のファイルにある場合はエラーへの移動は失敗する。
まず、そのウィンドウが破棄してもよいバッファを含んでいることを確かめなければな
らない。
*CTRL-W_<Enter>* *CTRL-W_<CR>*
CTRL-W <Enter>を使うと、新しいウィンドウを開いてそこでエラーにジャンプできる。

Expand Down Expand Up @@ -490,6 +549,114 @@ Note: QuickFixウィンドウ内で変更を加えてもエラーのリストに
連付けられていなかった場合、ロケーションリストウィンドウに表示されているロケー
ションリストが関連づけられる。

*quickfix-window-ID*
|getqflist()||getloclist()| 関数を使用して、QuickFixウィンドウとロケーショ
ンリストウィンドウのウィンドウIDをそれぞれ取得できる(もしあれば)。例: >
echo getqflist({'winid' : 1}).winid
echo getloclist(2, {'winid' : 1}).winid
<
*getqflist-examples*
getqflist() 関数と getloclist() 関数は、それぞれQuickFixとロケーションリストの
さまざまな属性を取得するのに使用できる。これらの関数の使用例を以下に示す:
>
" 現在のQuickFixリストのタイトルを取得する
:echo getqflist({'title' : 0}).title
" 現在のQuickFixリストの識別子を取得する
:let qfid = getqflist({'id' : 0}).id
" スタックの中の4番目のQuickFixリストの識別子を取得する
:let qfid = getqflist({'nr' : 4, 'id' : 0}).id
" 特定の識別子を持つQuickFixリストが存在するかどうかを検査する
:if getqflist({'id' : qfid}).id == qfid
" スタックの中の現在のQuickFixリストのインデックスを取得する
:let qfnum = getqflist({'nr' : 0}).nr
" 識別子により指定されたQuickFixリストのitemsを取得する
:echo getqflist({'id' : qfid, 'items' : 0}).items
" idにより指定されたQuickFixリストの中の項目の数を取得する
:echo getqflist({'id' : qfid, 'size' : 0}).size
" スタックの中の3番目のQuickFixリストのcontextを取得する
:echo getqflist({'nr' : 3, 'context' : 0}).context
" スタックの中のQuickFixリストの数を取得する
:echo getqflist({'nr' : '$'}).nr
" 現在のQuickFixリストが変更された回数を取得する
:echo getqflist({'changedtick' : 0}).changedtick
" 識別子により指定されたQuickFixリストの中の現在の項目を取得する
:echo getqflist({'id' : qfid, 'idx' : 0}).idx
" 識別子を使用して全てのQuickFixリスト属性を取得する
:echo getqflist({'id' : qfid, 'all' : 0})
" linesのリストの値からテキストをパースしてQuickFixリストを返す
:let myList = ["a.java:10:L10", "b.java:20:L20"]
:echo getqflist({'lines' : myList}).items
" カスタム 'efm' を使用してテキストをパースしてQuickFixリストを返す
:echo getqflist({'lines' : ['a.c#10#Line 10'], 'efm':'%f#%l#%m'}).items
" QuickFixリストのウィンドウIDを取得する
:echo getqflist({'winid' : 0}).winid
" 現在のロケーションリストのcontextを取得する
:echo getloclist(0, {'context' : 0}).context
" 3番目のウィンドウのロケーションリストのウィンドウIDを取得する
:echo getloclist(3, {'winid' : 0}).winid
<
*setqflist-examples*
setqflist() 関数と setloclist() 関数は、それぞれQuickFixとロケーションリストの
さまざまな属性を設定するのに使用できる。これらの関数の使用例を以下に示す:
>
" titleとcontextを持つ空のQuickFixリストを作成する
:let t = 'Search results'
:let c = {'cmd' : 'grep'}
:call setqflist([], ' ', {'title' : t, 'context' : c})
" 現在のQuickFixリストのtitleを設定する
:call setqflist([], 'a', {'title' : 'Mytitle'})
" 識別子により指定されたQuickFixリストのcontextを設定する
:call setqflist([], 'a', {'id' : qfid, 'context' : {'val' : 100}})
" コマンド出力から新しいQuickFixリストを作成する
:call setqflist([], ' ', {'lines' : systemlist('grep -Hn main *.c')})
" カスタムefmを使用してテキストをパースして特定のQuickFixリストに追加する
:call setqflist([], 'a', {'id' : qfid,
\ 'lines' : ["a.c#10#L10", "b.c#20#L20"], 'efm':'%f#%l#%m'})
" 識別子により指定されたQuickFixリストにitemsを追加する
:let newItems = [{'filename' : 'a.txt', 'lnum' : 10, 'text' : "Apple"},
\ {'filename' : 'b.txt', 'lnum' : 20, 'text' : "Orange"}]
:call setqflist([], 'a', {'id' : qfid, 'items' : newItems})
" 識別子により指定されたQuickFixリストを空にする
:call setqflist([], 'r', {'id' : qfid, 'items' : []})
" スタックの中の全てのQuickFixリストを開放する
:call setqflist([], 'f')
" 4番目のQuickFixリストのtitleを設定する
:call setqflist([], 'a', {'nr' : 4, 'title' : 'SomeTitle'})
" スタックの最後に新しいQuickFixリストを作成する
:call setqflist([], ' ', {'nr' : '$',
\ 'lines' : systemlist('grep -Hn class *.java')})
" コマンド出力から新しいロケーションリストを作成する
:call setloclist(0, [], ' ', {'lines' : systemlist('grep -Hn main *.c')})
" 3番目のウィンドウのロケーションリスト項目を置き換える
:call setloclist(3, [], 'r', {'items' : newItems})
<
=============================================================================
3. 複数のエラーリストを使う *quickfix-error-lists*

Expand Down Expand Up @@ -533,14 +700,21 @@ Note: QuickFixウィンドウ内で変更を加えてもエラーのリストに
ングしているときに特に便利である。もっと最近のエラーリストを残しておきたい場合
は初めに ":cnewer 99" を行うこと。

QuickFixやロケーションリストのスタック数を取得するには、特別な値 '$' に設定さ
れたリスト番号でそれぞれ、|getqflist()| 関数と |getloclist()| 関数を使用でき
る。例: >
echo getqflist({'nr' : '$'}).nr
echo getloclist(3, {'nr' : '$'}).nr
スタック内の現在のリスト番号を取得するには: >
echo getqflist({'nr' : 0}).nr
<
=============================================================================
4. :makeの使い方 *:make_makeprg*

*:mak* *:make*
:mak[e][!] [arguments] 1. vimが|+autocmd|つきでビルドされているならば、
|QuickFixCmdPre|に関連付けられた自動コマンドが全て
:mak[e][!] [arguments] 1. |QuickFixCmdPre| に関連付けられた自動コマンドが全て
実行される。
2, オプション 'autowrite' がonならば変更のあるバッファ
2. オプション 'autowrite' がonならば変更のあるバッファ
は保存される。
3. 'makeef' からエラーファイルの名前が生成される。
'makeef' が "##" を含まずかつ既に名前が存在する場合
Expand All @@ -550,10 +724,8 @@ Note: QuickFixウィンドウ内で変更を加えてもエラーのリストに
出力がerrorfileに保存される (Unixではそれも画面に
echoされる)。
5. 'errorformat' を使ってerrorfileが読みこまれる。
6. vimが|+autocmd|つきでビルドされているならば、
|QuickFixCmdPost|に関連付けられた自動コマンドが全て
実行される。
後述のサンプルを参照。
6. |QuickFixCmdPost| に関連付けられた自動コマンドが全
て実行される。後述のサンプルを参照。
7. [!]が与えられていないときは最初のエラーに移動する。
8. エラーファイルが削除される。
9. |:cnext||:cprevious|などのコマンドでエラー間を移
Expand Down Expand Up @@ -1005,6 +1177,7 @@ Note: デフォルトでは大文字と小文字の違いは無視される。
基本要素

%f ファイル名 (文字列を検索)
%o モジュール名 (文字列を検索)
%l 行番号 (数字を検索)
%c 桁番号 (エラーの桁を表す数字 (<Tab>1個は1桁と数える))
%v 画面上の桁番号 (エラーの画面上の桁を表す番号 (<Tab>1個
Expand Down Expand Up @@ -1046,6 +1219,10 @@ nomagic" とされる。"%s" はエラー出力中の行番号がない行を探
きる。シェルコマンド "grep" の出力のように。
パターンがある場合は行番号は使われない。

"%o" はQuickfix項目の中のモジュール名を指定する。もし指定があればそれがファイ
ル名の代わりにQuickfixエラーウィンドウの中で使われる。モジュール名は結果を表示
するためだけに使われ、ファイル名はそのファイルにジャンプするときに使われる。

ディレクトリを変更する

次の大文字の変換文字は、特別なフォーマット文字列のタイプを指定する。これらのう
Expand Down

0 comments on commit 1e06a13

Please sign in to comment.