Qual è la differenza tra l'elenco di posizioni e l'elenco di correzione rapida in vim


94

Quanto segue è tratto dalla documentazione relativa all'elenco quickfix e all'elenco delle posizioni. Ma non sono sicuro di cosa sia effettivamente diverso. L'immagine sotto mostra le stesse cose dall'elenco delle posizioni e dall'elenco delle correzioni rapide. Quando uso l'uno o l'altro in vimgrep e 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.

...

inserisci qui la descrizione dell'immagine

AGGIORNARE

Ho trovato quanto segue da qui .

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.

Quindi la differenza è che tutte le finestre per l'elenco di correzione rapida e la finestra locale per l'elenco delle posizioni. Tuttavia posso aprire l'elenco delle posizioni da qualsiasi altra finestra. Allora qual è la differenza?

Risposte:


110

L'elenco delle posizioni è locale rispetto alla finestra corrente, quindi puoi avere tanti elenchi di posizioni quante sono le finestre: 30 finestre? Nessun problema, ecco i tuoi 30 elenchi di posizioni simultanee.

L'elenco di correzione rapida è globale, quindi non puoi averne più di uno disponibile alla volta. Ci sono comandi che ti permettono di sostituire l'attuale elenco di correzione rapida con uno precedente, ma non puoi avere due elenchi di correzione rapida simultanei.

Non confondere le "liste" location / quickfix (le strutture dati) con le "finestre" location / quickfix (le finestre che visualizzano il contenuto di quelle strutture dati). Le "finestre" hanno comportamenti simili ma le "liste" no. La differenza è importante perché quelle finestre per fortuna non sono gli unici modi per interagire con quegli elenchi: ci sono molti comandi che ci permettono di spostarci attraverso quegli elenchi senza aprire le finestre associate e conoscere la differenza tra quegli elenchi è la chiave per usare quei comandi in modo efficiente .

Esempio illustrato pratico:

$ vim -O foo.txt bar.txt

  1. Fare :lvim foo %in foo.txtper creare un elenco posizione per la finestra che contiene foo.txt.

  2. Fare :lneun paio di volte per passare a un paio foodi foo.txt.

  3. Concentrati bar.txte fallo :lne. Che succede?

  4. Ora, fare :lvim bar %in bar.txtper creare un elenco di posizione per la finestra che contiene bar.txt.

  5. Ripeti :lnealcune volte. A quali partite salti? In quale buffer? In quale finestra?

  6. Passa all'altra finestra e ripeti :lnealcune volte. Che succede?

  7. Passa di nuovo a bar.txt. Cosa fa :lne?

  8. Ora, fare :vim bar %in bar.txtper creare una lista quickfix.

  9. Fare :cnun paio di volte per passare a un paio bardi bar.txt.

  10. Ora, concentrati su foo.txt, cosa fa :cn?

La posizione in cui salti :lnedipende dalla finestra in cui ti trovi, ma l'errore con cui salti :cnè sempre lo stesso (finché non sostituisci l'elenco di correzione rapida corrente con un altro).

Entrambi gli elenchi hanno ruoli relativamente chiari IMO: l'elenco quickfix (e quindi la finestra quickfix) è solitamente e abbastanza logicamente dedicato agli errori e l'elenco delle posizioni sembra (a me) adatto per la ricerca.


10
Più in generale: l'elenco quickfix è migliore quando la ricerca o la compilazione coinvolge più file, l'elenco delle posizioni è migliore quando è coinvolto un solo file.
Trebor Rude

5
In particolare, se si avvia vim con -q errors.txt, dopo aver inserito gli errori di compilazione in errors.txt(ie gcc -Wall *.c >errors.txt 2>&1), vim popolerà l'elenco quickfix dall'elenco degli errori di compilazione, il che è molto utile.
Kevin

@TreborRude, non credo. Per esempio, diciamo che avete due finestre verticalmente divisi (come indicato nella risposta precedente) e si vuole cercare più file ( foo1.txt, foo2.txt, ...) per foonella finestra di sinistra e più file ( bar1.txt, bar2.txt, ...) per barnella finestra di destra. Puoi correre :lv foo foo*nella finestra di sinistra e poi :lv bar bar*nella finestra di destra. Quindi nella finestra di sinistra :lneverrà visualizzata la prossima corrispondenza per foo, no bar. Questo perché :lvutilizza l'elenco delle posizioni della finestra in cui viene eseguita, quindi ogni ricerca ha il proprio elenco delle posizioni.
ma11hew28
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.