Was ist der Unterschied zwischen Standortliste und Quickfix-Liste in vim?

92

Das Folgende stammt aus der Dokumentation zur Quickfix- und Standortliste. Aber ich bin mir nicht sicher, was eigentlich anders ist. Das Bild unten zeigt die gleichen Dinge aus der Standortliste und der Quickfix-Liste. Wann verwende ich das eine oder andere in vimgrep und 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.

...

Geben Sie hier die Bildbeschreibung ein

AKTUALISIEREN

Von hier aus habe ich folgendes gefunden .

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.

Der Unterschied besteht also in allen Fenstern für die Quickfix-Liste und im lokalen Fenster für die Standortliste. Ich kann die Standortliste jedoch in jedem anderen Fenster öffnen. Was ist dann der Unterschied?

Schienbein
quelle

Antworten:

107

Die Standortliste ist lokal für das aktuelle Fenster, sodass Sie so viele Standortlisten wie Fenster haben können: 30 Fenster? Kein Problem, hier sind Ihre 30 gleichzeitigen Standortlisten.

Die Quickfix-Liste ist global, sodass nicht mehr als eine gleichzeitig verfügbar sein kann. Es gibt Befehle, mit denen Sie die aktuelle Quickfix-Liste durch eine vorherige ersetzen können, aber Sie können nicht zwei Quickfix-Listen gleichzeitig haben.

Verwechseln Sie die Standort- / Quickfix- "Listen" (die Datenstrukturen) nicht mit den Standort- / Quickfix- "Fenstern" (den Fenstern, in denen der Inhalt dieser Datenstrukturen angezeigt wird). Die "Fenster" haben ein ähnliches Verhalten, die "Listen" jedoch nicht. Der Unterschied ist wichtig, da diese Fenster glücklicherweise nicht die einzigen Möglichkeiten sind, mit diesen Listen zu interagieren: Es gibt viele Befehle, mit denen wir uns durch diese Listen bewegen können, ohne die zugehörigen Fenster zu öffnen, und der Unterschied zwischen diesen Listen ist der Schlüssel zur effizienten Verwendung dieser Befehle .

Beispiel zum Anfassen:

$ vim -O foo.txt bar.txt

  1. Hat :lvim foo %in foo.txteine Standortliste für das Fenster erstellen enthält foo.txt.

  2. Hat :lneein paar Mal Sprung auf ein paar fooin foo.txt.

  3. Konzentrieren Sie sich auf bar.txtund tun Sie es :lne. Was geschieht?

  4. Nun tut :lvim bar %in bar.txteine Standortliste für das Fenster erstellen enthält bar.txt.

  5. Mach :lneein paar mal. Zu welchen Spielen springst du? In welchem ​​Puffer? In welchem ​​Fenster?

  6. Wechseln Sie zum anderen Fenster und wiederholen Sie dies :lneeinige Male. Was geschieht?

  7. Wechseln Sie erneut zu bar.txt. Was macht :lnedas

  8. Nun tut :vim bar %in bar.txteiner quickfix Liste zu erstellen.

  9. Hat :cnein paar Mal Sprung auf ein paar barin bar.txt.

  10. Konzentrieren Sie sich nun darauf foo.txt, was zu :cntun ist.

Der Ort, zu dem Sie springen, :lnehängt von dem Fenster ab, in dem Sie sich befinden. Der Fehler, zu dem Sie springen, :cnist jedoch immer der gleiche (bis Sie die aktuelle Quickfix-Liste durch eine andere ersetzen).

Beide Listen haben relativ klare Rollen IMO: Die Quickfix-Liste (und damit das Quickfix-Fenster) ist normalerweise und ganz logisch Fehlern gewidmet, und die Standortliste scheint (für mich) für die Suche geeignet zu sein.

romainl
quelle
10
Allgemeiner: Die Quickfix-Liste ist am besten geeignet, wenn Ihre Suche oder Kompilierung mehrere Dateien umfasst, die Speicherortliste am besten, wenn nur eine einzige Datei beteiligt ist.
Trebor Rude
5
Insbesondere wenn Sie vim mit starten -q errors.txt, nachdem Sie Kompilierungsfehler eingegeben haben errors.txt(dh gcc -Wall *.c >errors.txt 2>&1), füllt vim die Quickfix-Liste aus der Liste der Kompilierungsfehler, was sehr praktisch ist.
Kevin
@ TreborRude, das glaube ich nicht. Zum Beispiel, sagen sie , Sie zwei vertikal geteilte Fenster und will (wie in der Antwort oben) , um mehrere Dateien (Suche foo1.txt, foo2.txt...) für fooim linken Fenster und mehr Dateien ( bar1.txt, bar2.txt, ...) für barim rechten Fenster. Sie können :lv foo foo*im linken Fenster und dann :lv bar bar*im rechten Fenster ausführen . Dann wird im linken Fenster :lnedie nächste Übereinstimmung für angezeigt foo, nicht bar. Dies liegt daran, dass :lvdie Standortliste des Fensters verwendet wird, in dem Sie es ausführen, sodass jede Suche eine eigene Standortliste hat.
ma11hew28