У чому різниця між списком розташування та списком швидких виправлень у vim


94

Далі йдеться з документації щодо списку швидких виправлень та списку розташувань. Але я не впевнений, що насправді відрізняється. На зображенні нижче показано ті самі речі зі списку розташування та списку швидких виправлень. Коли я використовую те чи інше у vimgrep та 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.

...

введіть тут опис зображення

ОНОВЛЕННЯ

Звідси я знайшов наступне .

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.

Тож різниця полягає у всіх вікнах для списку швидких виправлень та локальних вікнах у списку розташувань. Однак я можу відкрити список місцезнаходжень з будь-якого іншого вікна. То яка тоді різниця ??

Відповіді:


110

Список місцезнаходжень локальний для поточного вікна, тому ви можете мати стільки списків розташування, скільки вікон: 30 вікон? Немає проблем, ось ваші 30 одночасних списків розташування.

Список швидких виправлень є загальним, тому одночасно у вас не може бути доступно більше одного. Є команди, які дозволяють замінити поточний список швидких виправлень попереднім, але ви не можете мати два одночасних списки швидких виправлень.

Не плутайте "списки" розташування / швидкого виправлення (структури даних) із "вікнами" розташування / швидкого виправлення (вікна, що відображають вміст цих структур даних). "Вікна" мають подібну поведінку, але "списки" - ні. Різниця важлива, оскільки ці вікна, на щастя, не є єдиними способами взаємодії з цими списками: існує безліч команд, які дозволяють нам переміщатися по цих списках, не відкриваючи пов’язаних вікон, і знання різниці між цими списками є ключовим для ефективного використання цих команд .

Практичний ілюстрований приклад:

$ vim -O foo.txt bar.txt

  1. Чи є :lvim foo %в foo.txtстворити список розташування для вікна , що містить foo.txt.

  2. Зробіть :lneкілька разів, щоб перейти до кількох fooдюймів foo.txt.

  3. Зосередьтеся на bar.txtі робіть :lne. Що станеться?

  4. Тепер виконайте :lvim bar %в, bar.txtщоб створити список розташувань для вікна, що містить bar.txt.

  5. Зробіть :lneкілька разів. До яких матчів ти стрибаєш? В якому буфері? У якому вікні?

  6. Перейдіть на інше вікно і зробіть :lneкілька разів. Що станеться?

  7. Знову переключіться на bar.txt. Що робить :lne?

  8. Тепер, зробити :vim bar %в , bar.txtщоб створити список QuickFix.

  9. Зробіть :cnкілька разів, щоб перейти до кількох barдюймів bar.txt.

  10. Тепер зосередьтеся на тому foo.txt, що робить :cn?

Місце, до якого ви переходите, :lneзалежить від вікна, в якому ви перебуваєте, але помилка, до якої ви переходите :cn, завжди однакова (доки ви не заміните поточний список швидких виправлень іншим).

Обидва списки мають відносно чіткі ролі IMO: список швидких виправлень (і, отже, вікно швидкого виправлення) зазвичай і цілком логічно присвячений помилкам, і список місцеположень здається (мені здається) придатним для пошуку.


10
Загальніше: список швидких виправлень найкращий, коли ваш пошук або компіляція включає кілька файлів, а список розташувань найкращий, коли задіяний лише один файл.
Требор Руде

5
Зокрема, якщо ви запустите vim з -q errors.txt, після введення помилок компіляції в errors.txt(тобто gcc -Wall *.c >errors.txt 2>&1), vim заповнить список швидких виправлень зі списку помилок компіляції, що дуже зручно.
Кевін

@TreborRude, я не думаю. Наприклад, припустимо, що у вас є дві вертикально розділені вікна (як показано в відповідь вище) і хочете знайти кілька файлів ( foo1.txt, foo2.txt, ...) для fooв лівому вікні і кілька файлів ( bar1.txt, bar2.txt, ...) для barв правому вікні. Ви можете запустити :lv foo foo*в лівому вікні, а потім :lv bar bar*у правому вікні. Потім у лівому вікні :lneвідобразиться наступний збіг для foo, а не bar. Це пов’язано з тим, що :lvвикористовується список місцезнаходжень вікна, у якому ви його запускаєте, тому кожен пошук має свій власний список місцезнаходжень.
ma11hew28
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.