vimの場所リストとクイックフィックスリストの違いは何ですか


94

以下は、クイックフィックスリストとロケーションリストに関するドキュメントからの抜粋です。しかし、実際には何が違うのかわかりません。以下の画像は、ロケーションリストとクイックフィックスリストの同じものを示しています。vimgrepとlvimgrepでどちらを使用するのですか?

In Vim the quickfix commands are used more generally to find a list of positions 
in files.For example, |:vimgrep| finds pattern matches.  You can use the positions 
in a script with the |getqflist()| function. Thus you can do a lot more than the
edit/compile/fix cycle!
...
...

                         *location-list* *E776* 
A location list is similar to a quickfix list and contains a list of positions 
in files.  A location list is associated with a window and each window can have 
a separate location list.  A location list can be associated with only one window.  
The location list is independent of the quickfix list.

...

ここに画像の説明を入力してください

更新

こちらから以下を見つけました。

These commands all fill a list with the results of their search. "grep" and 
"vimgrep" fill the "quickfix list", which can be opened with :cw or :copen, 
and is a list shared between ALL windows. "lgrep" and "lvimgrep" fill the 
"location list," which is local to the current window, and can be opened 
with :lw or :lopen. Both of these lists can be used to instantly jump to 
the matching line in whatever file it occurs in.

したがって、違いは、QuickFixリストのすべてのウィンドウとロケーションリストのローカルウィンドウです。ただし、他のウィンドウから場所リストを開くことができます。それでは違いは何ですか?

回答:


110

ロケーションリストは現在のウィンドウに対してローカルであるため、ウィンドウと同じ数のロケーションリストを持つことができます。こちらが30か所の同時ロケーションリストです。

クイックフィックスリストはグローバルであるため、一度に複数を使用することはできません。現在のQuickFixリストを以前のQuickFixリストに置き換えることができるコマンドがありますが、同時に2つのQuickFixリストを持つことはできません。

ロケーション/クイックフィックス「リスト」(データ構造)とロケーション/クイックフィックス「ウィンドウ」(これらのデータ構造のコンテンツを表示するウィンドウ)を混同しないでください。「ウィンドウ」には同様の動作がありますが、「リスト」にはありません。ありがたいことに、これらのウィンドウはこれらのリストと対話する唯一の方法ではないため、違いは重要です。関連するウィンドウ開かずにこれらのリストを移動できる多くのコマンドがあり、これらのリストの違いを知ることは、これらのコマンドを効率的に使用するための鍵です。

実践的な図解の例:

$ vim -O foo.txt bar.txt

  1. を実行して:lvim foo %foo.txtを含むウィンドウのロケーションリストを作成しますfoo.txt

  2. やる:lne数にジャンプするには数回fooの中でfoo.txt

  3. に焦点を当ててbar.txt行います:lne。何が起こるのですか?

  4. 次に、を実行:lvim bar %bar.txtて、を含むウィンドウのロケーションリストを作成しますbar.txt

  5. やる:lne数回。どの試合にジャンプしますか?どのバッファに?どのウィンドウで?

  6. 別のウィンドウに切り替えて、:lne数回実行します。何が起こるのですか?

  7. もう一度に切り替えますbar.txt。何をし:lneますか?

  8. 今、やる:vim bar %におけるbar.txtQuickFixリストを作成します。

  9. やる:cn数にジャンプするには数回barの中でbar.txt

  10. 今、に焦点を当ててfoo.txt、何をし:cnますか?

ジャンプ先の場所:lneは、使用しているウィンドウによって異なりますが、ジャンプ先のエラー:cnは常に同じです(現在のクイックフィックスリストを別のクイックフィックスリストで置き換えるまで)。

どちらのリストにも比較的明確なIMOの役割があります。QuickFixリスト(およびQuickFixウィンドウ)は通常、非常に論理的にエラーに充てられており、ロケーションリストは(私には)検索に適しているようです。


10
より一般的に:クイックフィックスリストは、検索またはコンパイルに複数のファイルが含まれる場合に最適であり、ロケーションリストは、単一のファイルのみが含まれる場合に最適です。
Trebor Rude

5
特に、vimを-q errors.txtで起動した場合、コンパイルエラーをerrors.txt(つまりgcc -Wall *.c >errors.txt 2>&1)に配置した後、vimはコンパイルエラーのリストからクイックフィックスリストを生成します。これは非常に便利です。
Kevin

@TreborRude、私はそうは思いません。たとえば、あなたが2つの垂直分割ウィンドウを持っている(上記の回答のように)と、複数のファイル(検索したいとしましょうfoo1.txtfoo2.txtのために、...)、foo左側のウィンドウや複数のファイル(でbar1.txtbar2.txt用、...)bar右側のウィンドウでを。:lv foo foo*左側のウィンドウで実行して:lv bar bar*から、右側のウィンドウで実行できます。次に、左側のウィンドウ:lnefoo、ではなくの次の一致が表示されますbar。これは、:lvが実行するウィンドウのロケーションリストを使用するため、検索ごとに独自のロケーションリストがあるためです。
ma11hew28
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.