Sự khác biệt giữa danh sách vị trí và danh sách Quickfix trong vim là gì


94

Sau đây là từ tài liệu về danh sách Quickfix và danh sách vị trí. Nhưng tôi không chắc những gì thực sự khác nhau. Hình ảnh bên dưới cho thấy những điều tương tự từ danh sách vị trí và danh sách sửa nhanh. Khi nào tôi sử dụng cái này hay cái khác trong vimgrep và 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.

...

nhập mô tả hình ảnh ở đây

CẬP NHẬT

Tôi tìm thấy những điều sau đây từ đây .

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.

Vì vậy, sự khác biệt là tất cả các cửa sổ cho danh sách Quickfix và cửa sổ cục bộ cho danh sách vị trí. Tuy nhiên, tôi có thể mở danh sách vị trí từ bất kỳ cửa sổ nào khác. Vậy sự khác biệt sau đó là gì ??

Câu trả lời:


110

Danh sách vị trí là cục bộ cho cửa sổ hiện tại, do đó bạn có thể có bao nhiêu danh sách vị trí như cửa sổ: 30 cửa sổ? Không sao, đây là 30 danh sách vị trí đồng thời của bạn.

Danh sách Quickfix là toàn cầu, vì vậy bạn không thể có nhiều hơn một bản sửa lỗi cùng một lúc. Có những lệnh cho phép bạn thay thế danh sách Quickfix hiện tại bằng một danh sách trước đó nhưng bạn không thể có hai danh sách Quickfix đồng thời.

Đừng nhầm lẫn giữa "danh sách" vị trí / quickfix (cấu trúc dữ liệu) với "cửa sổ" vị trí / quickfix (cửa sổ hiển thị nội dung của các cấu trúc dữ liệu đó). Các "cửa sổ" có hành vi tương tự nhưng "danh sách" thì không. Sự khác biệt rất quan trọng vì những cửa sổ đó không phải là cách duy nhất để tương tác với các danh sách đó: có nhiều lệnh cho phép chúng ta di chuyển qua các danh sách đó mà không cần mở các cửa sổ liên quan và biết được sự khác biệt giữa các danh sách đó là chìa khóa để sử dụng các lệnh đó một cách hiệu quả .

Ví dụ minh họa thực hành:

$ vim -O foo.txt bar.txt

  1. Làm :lvim foo %trong foo.txtđể tạo danh sách vị trí cho cửa sổ chứa foo.txt.

  2. Thực hiện :lnemột vài lần để nhảy đến một vài footrong foo.txt.

  3. Tập trung vào bar.txtvà làm :lne. Điều gì xảy ra?

  4. Bây giờ, làm :lvim bar %trong bar.txtđể tạo ra một danh sách vị trí cho cửa sổ chứa bar.txt.

  5. Làm :lnemột vài lần. Bạn nhảy đến trận đấu nào? Trong bộ đệm nào? Trong cửa sổ nào?

  6. Chuyển sang cửa sổ khác và thực hiện :lnemột vài lần. Điều gì xảy ra?

  7. Chuyển lại sang bar.txt. Làm gì :lne?

  8. Bây giờ, làm :vim bar %trong bar.txtđể tạo ra một danh sách QuickFix.

  9. Thực hiện :cnmột vài lần để nhảy đến một vài bartrong bar.txt.

  10. Bây giờ, tập trung vào foo.txt, :cnlàm gì?

Vị trí bạn chuyển đến :lnetùy thuộc vào cửa sổ bạn đang ở nhưng lỗi bạn chuyển đến :cnluôn giống nhau (cho đến khi bạn thay thế danh sách Quickfix hiện tại bằng một danh sách khác).

Cả hai danh sách đều có vai trò tương đối rõ ràng IMO: danh sách Quickfix (và do đó là cửa sổ quickfix) thường và khá logic dành cho các lỗi và danh sách vị trí dường như (đối với tôi) phù hợp với tìm kiếm.


10
Tổng quát hơn: Danh sách Quickfix là tốt nhất khi tìm kiếm hoặc biên dịch của bạn liên quan đến nhiều tệp, danh sách vị trí tốt nhất khi chỉ có một tệp duy nhất.
Trebor Rude

5
Đặc biệt, nếu bạn khởi chạy vim với -q errors.txt, sau khi đặt lỗi biên dịch vào errors.txt(tức là gcc -Wall *.c >errors.txt 2>&1), vim sẽ đưa vào danh sách Quickfix từ danh sách các lỗi biên dịch, rất tiện dụng.
Kevin

@TreborRude, tôi không nghĩ vậy. Ví dụ, giả sử bạn có hai cửa sổ theo chiều dọc chia (như trong các câu trả lời ở trên) và muốn tìm kiếm nhiều file ( foo1.txt, foo2.txt, ...) cho footrong cửa sổ bên trái và nhiều file ( bar1.txt, bar2.txt, ...) cho bartrong cửa sổ bên phải. Bạn có thể chạy :lv foo foo*trong cửa sổ bên trái và sau đó :lv bar bar*trong cửa sổ bên phải. Sau đó, trong cửa sổ bên trái :lnesẽ hiển thị các trận đấu tiếp theo cho foo, không bar. Điều này là do :lvsử dụng danh sách vị trí của cửa sổ bạn chạy nó, vì vậy mỗi tìm kiếm có danh sách vị trí riêng của nó.
ma11hew28
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.