Vim'deki konum listesi ve hızlı düzeltme listesi arasındaki fark nedir


94

Aşağıdakiler, hızlı düzeltme listesi ve konum listesiyle ilgili belgelerden alınmıştır. Ama aslında neyin farklı olduğundan emin değilim. Aşağıdaki resim, konum listesinden ve hızlı düzeltme listesinden aynı şeyleri göstermektedir. Vimgrep ve lvimgrep'te birini veya diğerini ne zaman kullanırım.

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.

...

görüntü açıklamasını buraya girin

GÜNCELLEME

Aşağıdakileri buradan buldum .

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.

Yani aradaki fark, hızlı düzeltme listesi için tüm pencereler ve konum listesi için yerel penceredir. Ancak konum listesini başka herhangi bir pencereden açabilirim. Öyleyse fark nedir?

Yanıtlar:


110

Konum listesi geçerli pencere için yereldir, böylece pencereler kadar çok konum listesine sahip olabilirsiniz: 30 pencere? Sorun değil, işte 30 eşzamanlı konum listeniz.

Hızlı düzeltme listesi geneldir, bu nedenle aynı anda birden fazla kullanılabilirliğe sahip olamazsınız. Mevcut hızlı düzeltme listesini bir öncekiyle değiştirmenize izin veren komutlar vardır, ancak iki eşzamanlı hızlı düzeltme listeniz olamaz.

Konum / hızlı düzeltme "listelerini" (veri yapıları) konum / hızlı düzeltme "pencereleri" (bu veri yapılarının içeriğini görüntüleyen pencereler) ile karıştırmayın. "Pencereler" benzer davranışlara sahiptir, ancak "listeler" böyle değildir. Bu pencereler bu listelere ile etkileşim tek yolu minnetle değildir çünkü fark önemlidir: bize bu listelere dolaşmak için izin birçok komut bulunmaktadır olmadan ilişkili pencereleri açıp bu listelere arasındaki farkı bilmek anahtar verimli olanlar komutları kullanarak etmektir .

Uygulamalı resimli örnek:

$ vim -O foo.txt bar.txt

  1. Do :lvim foo %içinde foo.txtbulunduğu pencere için bir konum listesi oluşturmak için foo.txt.

  2. Do :lnebir kaç atlama birkaç kez fooin foo.txt.

  3. Odaklan bar.txtve yap :lne. Ne oluyor?

  4. Şimdi yapmak :lvim bar %içinde bar.txtbulunduğu pencere için bir konum listesi oluşturmak için bar.txt.

  5. Do :lnebir kaç kez. Hangi eşleşmelere atlıyorsunuz? Hangi tamponda? Hangi pencerede?

  6. Diğer pencereye geçin ve :lnebirkaç kez yapın. Ne oluyor?

  7. Tekrar geçiş yapın bar.txt. Ne anlama geliyor :lne?

  8. Şimdi yapmak :vim bar %içinde bar.txtbir QuickFix listesini oluşturmak için.

  9. Do :cnbir kaç atlama birkaç kez barin bar.txt.

  10. Şimdi odaklanın foo.txt, ne :cnişe yarar?

Atladığınız konum :lne, içinde bulunduğunuz pencereye bağlıdır, ancak atladığınız hata :cnher zaman aynıdır (mevcut hızlı düzeltme listesini bir başkasıyla değiştirene kadar).

Her iki listenin de nispeten açık IMO rolleri vardır: hızlı düzeltme listesi (ve dolayısıyla hızlı düzeltme penceresi) genellikle ve oldukça mantıksal olarak hatalara ayrılmıştır ve konum listesi (bana) aramaya uygun görünür.


10
Daha genel olarak: Quickfix listesi, aramanızın veya derlemenizin birden çok dosya içerdiği durumlarda en iyisidir, konum listesi yalnızca tek bir dosya söz konusu olduğunda en iyisidir.
Trebor Rude

5
Özellikle, (ie ) 'ye -q errors.txtderleme hataları koyduktan sonra vim'i başlatırsanız, vim çok kullanışlı olan derleme hataları listesinden hızlı düzeltme listesini dolduracaktır. errors.txtgcc -Wall *.c >errors.txt 2>&1
Kevin

@TreborRude, sanmıyorum. Örneğin, (yukarıdaki cevap gösterildiği gibi) iki dikey bölünmüş pencere olduğunu varsayalım ve birden fazla dosya (aramak istediğiniz foo1.txt, foo2.txtiçin, ...) foosol pencere ve birden fazla dosya (in bar1.txt, bar2.txtiçin, ...) barsağ pencerede. Kaçabilirsiniz :lv foo foo*sonra sol pencerede ve :lv bar bar*sağ pencerede. Sonra sol pencerede bir :lnesonraki maç için foodeğil görüntülenir bar. Bunun nedeni :lv, onu çalıştırdığınız pencerenin konum listesini kullanmasıdır, bu nedenle her aramanın kendi konum listesi vardır.
ma11hew28
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.