Apa perbedaan antara daftar lokasi dan daftar quickfix di vim

94

Berikut ini adalah dari dokumentasi tentang daftar quickfix dan daftar lokasi. Tapi saya tidak yakin apa yang sebenarnya berbeda. Gambar di bawah menunjukkan hal yang sama dari daftar lokasi dan daftar perbaikan cepat. Kapan saya menggunakan satu atau lainnya di vimgrep dan 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.

...

masukkan deskripsi gambar di sini

MEMPERBARUI

Saya menemukan yang berikut dari sini .

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.

Jadi perbedaannya adalah semua jendela untuk daftar quickfix dan jendela lokal untuk daftar lokasi. Namun saya dapat membuka daftar lokasi dari jendela lain. Lalu apa bedanya ??

tulang kering
sumber

Jawaban:

110

Daftar lokasi lokal untuk jendela saat ini sehingga Anda dapat memiliki daftar lokasi sebanyak windows: 30 windows? Oke, berikut 30 daftar lokasi Anda yang bersamaan.

Daftar quickfix bersifat global sehingga Anda tidak dapat memiliki lebih dari satu yang tersedia dalam satu waktu. Ada perintah yang memungkinkan Anda mengganti daftar quickfix saat ini dengan yang sebelumnya, tetapi Anda tidak dapat memiliki dua daftar quickfix bersamaan.

Jangan bingung antara "daftar" lokasi / perbaikan cepat (struktur data) dengan "jendela" lokasi / perbaikan cepat (jendela yang menampilkan konten struktur data tersebut). "Jendela" memiliki perilaku yang serupa tetapi "daftar" tidak. Perbedaannya penting karena jendela tersebut untungnya bukan satu-satunya cara untuk berinteraksi dengan daftar tersebut: ada banyak perintah yang memungkinkan kita untuk menelusuri daftar tersebut tanpa membuka jendela terkait dan mengetahui perbedaan antara daftar tersebut adalah kunci untuk menggunakan perintah tersebut secara efisien .

Contoh ilustrasi langsung:

$ vim -O foo.txt bar.txt

  1. Apakah :lvim foo %dalam foo.txtuntuk membuat daftar lokasi untuk jendela yang mengandung foo.txt.

  2. Lakukan :lnebeberapa kali untuk melompat ke beberapa foodi foo.txt.

  3. Fokus bar.txtdan lakukan :lne. Apa yang terjadi?

  4. Sekarang, lakukan :lvim bar %di bar.txtuntuk membuat daftar lokasi untuk jendela yang mengandung bar.txt.

  5. Lakukan :lnebeberapa kali. Pertandingan apa yang Anda lompat? Di buffer mana? Di jendela mana?

  6. Beralih ke jendela lain dan lakukan :lnebeberapa kali. Apa yang terjadi?

  7. Beralih lagi ke bar.txt. Apa yang :lnedilakukannya?

  8. Sekarang, lakukan :vim bar %di bar.txtuntuk membuat daftar quickfix.

  9. Lakukan :cnbeberapa kali untuk melompat ke beberapa bardi bar.txt.

  10. Sekarang, fokuslah foo.txt, apa yang :cndilakukannya?

Lokasi tempat Anda melompat :lnebergantung pada jendela tempat Anda berada, tetapi kesalahan yang Anda :cngunakan selalu sama (sampai Anda mengganti daftar perbaikan cepat saat ini dengan yang lain).

Kedua daftar memiliki peran yang relatif jelas IMO: daftar perbaikan cepat (dan dengan demikian jendela perbaikan cepat) biasanya dan secara logis dikhususkan untuk kesalahan dan daftar lokasi tampaknya (bagi saya) cocok untuk pencarian.

romainl
sumber
10
Secara lebih umum: Daftar quickfix paling baik jika pencarian atau kompilasi Anda melibatkan banyak file, daftar lokasi paling baik jika hanya satu file yang terlibat.
Trebor Rude
5
Secara khusus, jika Anda meluncurkan vim dengan -q errors.txt, setelah meletakkan kesalahan kompilasi di errors.txt(yaitu gcc -Wall *.c >errors.txt 2>&1), vim akan mengisi daftar perbaikan cepat dari daftar kesalahan kompilasi, yang sangat berguna.
Kevin
@TreborRude, saya rasa tidak. Misalnya, Anda memiliki dua jendela yang terpisah secara vertikal (seperti yang ditunjukkan pada jawaban di atas) dan ingin mencari banyak file (foo1.txt , foo2.txt, ...) untuk foodi jendela kiri dan beberapa file ( bar1.txt, bar2.txt, ...) untuk bardi jendela kanan. Anda dapat menjalankan :lv foo foo*di jendela kiri dan kemudian :lv bar bar*di jendela kanan. Kemudian di jendela kiri :lneakan muncul kecocokan berikutnya untuk foo, bukan bar. Ini karena :lvmenggunakan daftar lokasi dari jendela tempat Anda menjalankannya, jadi setiap pencarian memiliki daftar lokasinya sendiri.
ma11hew28