Quelle est la différence entre la liste des emplacements et la liste des correctifs rapides dans Vim

94

Ce qui suit est tiré de la documentation sur la liste des correctifs rapides et la liste des emplacements. Mais je ne suis pas sûr de ce qui est réellement différent. L'image ci-dessous montre les mêmes choses dans la liste des emplacements et la liste des correctifs rapides. Quand dois-je utiliser l'un ou l'autre dans vimgrep et 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.

...

entrez la description de l'image ici

METTRE À JOUR

J'ai trouvé ce qui suit d'ici .

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.

Donc, la différence réside dans toutes les fenêtres pour la liste des correctifs rapides et la fenêtre locale pour la liste des emplacements. Cependant, je peux ouvrir la liste des emplacements depuis n'importe quelle autre fenêtre. Alors, quelle est la différence alors ??

tibia
la source

Réponses:

110

La liste des emplacements est locale à la fenêtre actuelle, vous pouvez donc avoir autant de listes d'emplacements que de fenêtres: 30 fenêtres? Pas de problème, voici vos 30 listes de lieux simultanés.

La liste des correctifs rapides est globale, vous ne pouvez donc pas en avoir plus d'une disponible à la fois. Il existe des commandes qui vous permettent de remplacer la liste de correctifs rapides actuelle par une précédente, mais vous ne pouvez pas avoir deux listes de correctifs rapides simultanés.

Ne confondez pas les "listes" de localisation / quickfix (les structures de données) avec les "fenêtres" de localisation / quickfix (les fenêtres affichant le contenu de ces structures de données). Les "fenêtres" ont des comportements similaires mais pas les "listes". La différence est importante car ces fenêtres ne sont heureusement pas les seuls moyens d'interagir avec ces listes: il existe de nombreuses commandes qui nous permettent de parcourir ces listes sans ouvrir les fenêtres associées et connaître la différence entre ces listes est la clé pour utiliser ces commandes efficacement .

Exemple illustré pratique:

$ vim -O foo.txt bar.txt

  1. Faites :lvim foo %en foo.txtcréer une liste d'emplacement pour la fenêtre contenant foo.txt.

  2. Faites :lnequelques fois pour sauter à quelques fooen foo.txt.

  3. Concentrez bar.txt-vous et faites :lne. Ce qui se produit?

  4. Maintenant, faites - :lvim bar %en bar.txtpour créer une liste d'emplacement pour la fenêtre contenant bar.txt.

  5. Faites :lnequelques fois. À quels matchs sautez-vous? Dans quel tampon? Dans quelle fenêtre?

  6. Passez à l'autre fenêtre et faites :lneplusieurs fois. Ce qui se produit?

  7. Revenez à bar.txt. Que fait :lne-on?

  8. Maintenant, faites - :vim bar %en bar.txtpour créer une liste de quickfix.

  9. Faites :cnquelques fois pour sauter à quelques baren bar.txt.

  10. Maintenant, concentrez-vous sur foo.txt, que fait :cn-on?

L'emplacement auquel vous accédez :lnedépend de la fenêtre dans laquelle vous vous trouvez, mais l'erreur à laquelle vous accédez :cnest toujours la même (jusqu'à ce que vous remplaciez la liste de correctifs rapides actuelle par une autre).

Les deux listes ont des rôles relativement clairs IMO: la liste de correctifs rapides (et donc la fenêtre de correctifs rapides) est généralement et assez logiquement consacrée aux erreurs et la liste des emplacements semble (à mes yeux) apte à la recherche.

romainl
la source
10
Plus généralement: la liste des correctifs rapides est la meilleure lorsque votre recherche ou la compilation implique plusieurs fichiers, la meilleure liste d'emplacements lorsqu'un seul fichier est impliqué.
Trebor Rude
5
En particulier, si vous lancez vim avec -q errors.txt, après avoir mis des erreurs de compilation dans errors.txt(ie gcc -Wall *.c >errors.txt 2>&1), vim remplira la liste des correctifs rapides à partir de la liste des erreurs de compilation, ce qui est très pratique.
Kevin
@TreborRude, je ne pense pas. Par exemple, supposons que vous avez deux fenêtres séparées verticalement (comme indiqué dans la réponse ci - dessus) et que vous souhaitez rechercher dans plusieurs fichiers ( foo1.txt, foo2.txt, ...) pour foodans la fenêtre de gauche et plusieurs fichiers ( bar1.txt, bar2.txt, ...) pour bardans la fenêtre de droite. Vous pouvez exécuter :lv foo foo*dans la fenêtre de gauche, puis :lv bar bar*dans la fenêtre de droite. Ensuite, dans la fenêtre de gauche :lneaffichera la prochaine correspondance pour foo, non bar. Cela est dû au fait qu'il :lvutilise la liste des emplacements de la fenêtre dans laquelle vous l'exécutez, de sorte que chaque recherche a sa propre liste d'emplacements.
ma11hew28