Jaka jest różnica między listą lokalizacji a listą quickfix w vimie

94

Poniższe pochodzi z dokumentacji dotyczącej listy szybkich poprawek i listy lokalizacji. Ale nie jestem pewien, co właściwie się różni. Poniższy obrazek przedstawia te same rzeczy z listy lokalizacji i listy szybkich poprawek. Kiedy używam jednego lub drugiego w vimgrep i 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.

...

wprowadź opis obrazu tutaj

AKTUALIZACJA

Znalazłem następujące informacje tutaj .

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.

Więc różnica polega na tym, że wszystkie okna dla listy quickfix i okna lokalnego dla listy lokalizacji. Jednak mogę otworzyć listę lokalizacji z innych okien. Więc jaka jest różnica?

piszczel
źródło

Odpowiedzi:

111

Lista lokalizacji jest lokalna dla bieżącego okna, więc możesz mieć tyle list lokalizacji, ile okien: 30 okien? Nie ma problemu, oto Twoje 30 równoległych list lokalizacji.

Lista szybkich poprawek jest globalna, więc nie możesz mieć dostępnych więcej niż jednej na raz. Istnieją polecenia, które umożliwiają zastąpienie bieżącej listy szybkich poprawek poprzednią, ale nie można mieć dwóch równoległych list szybkich poprawek.

Nie należy mylić „list” lokalizacji / quickfix (struktur danych) z „oknami” lokalizacji / quickfix (okien wyświetlających zawartość tych struktur danych). „Okna” zachowują się podobnie, ale „listy” nie. Różnica jest ważna, ponieważ te okna na szczęście nie są jedynymi sposobami interakcji z tymi listami: istnieje wiele poleceń, które pozwalają nam poruszać się po tych listach bez otwierania powiązanych okien, a znajomość różnicy między tymi listami jest kluczem do efektywnego korzystania z tych poleceń .

Praktyczny ilustrowany przykład:

$ vim -O foo.txt bar.txt

  1. Zrób :lvim foo %w, foo.txtaby utworzyć listę lokalizacji dla okna zawierającego foo.txt.

  2. Zrób :lnekilka razy, aby przejść do kilku fooin foo.txt.

  3. Skoncentruj się bar.txti rób :lne. Co się dzieje?

  4. Teraz zrób :lvim bar %w, bar.txtaby utworzyć listę lokalizacji dla okna zawierającego bar.txt.

  5. Zrób :lnekilka razy. Do jakich meczów skaczesz? W którym buforze? W którym oknie?

  6. Przełącz się do drugiego okna i zrób :lnekilka razy. Co się dzieje?

  7. Przełącz się ponownie na bar.txt. Co robi :lne?

  8. Teraz zrób :vim bar %w, bar.txtaby utworzyć listę quickfix.

  9. Zrób :cnkilka razy, aby przejść do kilku barin bar.txt.

  10. Teraz skup się na foo.txttym, co robi :cn?

Lokalizacja, do której skaczesz, :lnezależy od okna, w którym się znajdujesz, ale błąd, do którego przeskoczysz, :cnjest zawsze taki sam (do momentu zastąpienia bieżącej listy szybkich poprawek inną).

Obie listy mają stosunkowo jasne role IMO: lista quickfix (a tym samym okno quickfix) jest zwykle i całkiem logicznie poświęcona błędom, a lista lokalizacji wydaje się (moim zdaniem) nadająca się do wyszukiwania.

romainl
źródło
10
Bardziej ogólnie: lista quickfix jest najlepsza, gdy wyszukiwanie lub kompilacja obejmuje wiele plików, lista lokalizacji jest najlepsza, gdy dotyczy tylko jednego pliku.
Trebor Rude
5
W szczególności, jeśli uruchomisz vima z -q errors.txt, po umieszczeniu błędów kompilacji w errors.txt(tj. gcc -Wall *.c >errors.txt 2>&1), Vim zapełni listę quickfix z listy błędów kompilacji, co jest bardzo przydatne.
Kevin,
@TreborRude, nie sądzę. Na przykład, powiedzmy, że masz dwie pionowo podzielone okna (jak pokazano w odpowiedzi powyżej) i chcą, aby szukać wielu plików ( foo1.txt, foo2.txt...) dla foow lewym oknie i wielu plików ( bar1.txt, bar2.txt...) na barw prawym oknie. Możesz uruchomić :lv foo foo*w lewym oknie, a następnie :lv bar bar*w prawym oknie. Następnie w lewym oknie :lnewyświetli się następny mecz dla foo, nie bar. Dzieje się tak, ponieważ :lvużywa listy lokalizacji okna, w którym je uruchomisz, więc każde wyszukiwanie ma własną listę lokalizacji.
ma11hew