¿Cuál es la diferencia entre la lista de ubicaciones y la lista de arreglos rápidos en vim?

94

Lo siguiente es de la documentación sobre la lista de arreglos rápidos y la lista de ubicaciones. Pero no estoy seguro de qué es realmente diferente. La siguiente imagen muestra las mismas cosas de la lista de ubicaciones y la lista de arreglos rápidos. ¿Cuándo uso uno u otro en vimgrep y 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.

...

ingrese la descripción de la imagen aquí

ACTUALIZAR

Encontré lo siguiente desde aquí .

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.

Entonces, la diferencia es que todas las ventanas para la lista de arreglos rápidos y la ventana local para la lista de ubicaciones. Sin embargo, puedo abrir la lista de ubicaciones desde cualquier otra ventana. Entonces, ¿cuál es la diferencia?

espinilla
fuente

Respuestas:

110

La lista de ubicaciones es local a la ventana actual, por lo que puede tener tantas listas de ubicaciones como ventanas: ¿30 ventanas? No hay problema, aquí tienes tus 30 listas de ubicaciones simultáneas.

La lista de correcciones rápidas es global, por lo que no puede tener más de una disponible a la vez. Hay comandos que le permiten reemplazar la lista de correcciones rápidas actual con una anterior, pero no puede tener dos listas de correcciones rápidas simultáneas.

No confunda las "listas" de ubicación / corrección rápida (las estructuras de datos) con las "ventanas" de ubicación / corrección rápida (las ventanas que muestran el contenido de esas estructuras de datos). Las "ventanas" tienen comportamientos similares pero las "listas" no. La diferencia es importante porque, afortunadamente, esas ventanas no son las únicas formas de interactuar con esas listas: hay muchos comandos que nos permiten movernos a través de esas listas sin abrir las ventanas asociadas y conocer la diferencia entre esas listas es clave para usar esos comandos de manera eficiente. .

Ejemplo práctico ilustrado:

$ vim -O foo.txt bar.txt

  1. Hacer :lvim foo %en foo.txtcrear una lista de ubicaciones de la ventana que contiene foo.txt.

  2. Hacer :lneun par de veces para saltar a unos pocos fooen foo.txt.

  3. Concéntrate bar.txty hazlo :lne. ¿Lo que pasa?

  4. Ahora, ¿ :lvim bar %en bar.txtcrear una lista de ubicaciones de la ventana que contiene bar.txt.

  5. Hágalo :lneunas cuantas veces. ¿A qué partidos saltas? ¿En qué búfer? En que ventana

  6. Cambie a la otra ventana y hágalo :lnevarias veces. ¿Lo que pasa?

  7. Cambiar de nuevo a bar.txt. ¿Qué hace :lne?

  8. Ahora, ¿ :vim bar %en bar.txtcrear una lista quickfix.

  9. Hacer :cnun par de veces para saltar a unos pocos baren bar.txt.

  10. Ahora, concéntrate en foo.txt, ¿qué hace :cn?

La ubicación a la que salta :lnedepende de la ventana en la que se encuentre, pero el error al que salta :cnes siempre el mismo (hasta que reemplace la lista de correcciones rápidas actual por otra).

En mi opinión, ambas listas tienen roles relativamente claros: la lista de corrección rápida (y por lo tanto la ventana de corrección rápida) está generalmente y de manera bastante lógica dedicada a los errores y la lista de ubicaciones me parece (a mí) apta para la búsqueda.

romainl
fuente
10
De manera más general: la lista de arreglos rápidos es mejor cuando su búsqueda o compilación involucra varios archivos, la lista de ubicaciones es mejor cuando solo se trata de un archivo.
Trebor Rude
5
En particular, si inicia vim con -q errors.txt, después de poner los errores de compilación en errors.txt(es decir gcc -Wall *.c >errors.txt 2>&1), vim completará la lista de correcciones rápidas de la lista de errores de compilación, lo cual es muy útil.
Kevin
@TreborRude, no lo creo. Por ejemplo, digamos que usted tiene dos ventanas verticalmente divididos (como se muestra en la respuesta anterior) y quieren buscar varios archivos ( foo1.txt, foo2.txt, ...) para fooen la ventana izquierda y varios archivos ( bar1.txt, bar2.txt, ...) para baren la ventana derecha. Puede ejecutar :lv foo foo*en la ventana izquierda y luego :lv bar bar*en la ventana derecha. Luego, en la ventana de la izquierda :lnese mostrará la siguiente coincidencia para foo, no bar. Esto se debe a que :lvutiliza la lista de ubicaciones de la ventana en la que la ejecuta, por lo que cada búsqueda tiene su propia lista de ubicaciones.
ma11hew28