以下内容来自有关quickfix列表和位置列表的文档。但我不确定究竟有什么不同。下图显示了位置列表和quickfix列表中的相同内容。我什么时候在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.
...
更新
我找到了以下from here。
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.
所以区别在于所有用于quickfix列表的窗口和用于位置列表的本地窗口。但是我可以从任何其他窗口打开位置列表。那么有什么不同呢?
答案 0 :(得分:89)
位置列表是当前窗口的本地列表,因此您可以拥有与窗口一样多的位置列表:30个窗口?没问题,这是您的30个并发位置列表。
quickfix列表是全局的,因此您一次不能有多个可用的。有些命令允许您将当前的quickfix列表替换为前一个,但是您不能有两个并发的quickfix列表。
不要将位置/ quickfix“列表”(数据结构)与位置/ quickfix“windows”(显示这些数据结构内容的窗口)混淆。 “窗口”有类似的行为,但“列表”没有。差别很重要,因为谢谢这些窗口并不是与这些列表进行交互的唯一方式:有许多命令允许我们在没有打开相关窗口的情况下浏览这些列表,并了解这些列表之间的区别是有效使用这些命令的关键。
动手插图示例:
:lvim foo %
中的foo.txt
为包含foo.txt
的窗口创建位置列表。
请:lne
几次跳转到foo
中的几个foo.txt
。
专注于bar.txt
并执行:lne
。会发生什么?
现在,在:lvim bar %
中bar.txt
为包含bar.txt
的窗口创建位置列表。
做:lne
几次。你跳到什么地方?在哪个缓冲区?在哪个窗口?
切换到另一个窗口并执行:lne
几次。会发生什么?
再次切换到bar.txt
。 :lne
做了什么?
现在,在:vim bar %
中bar.txt
创建一个quickfix列表。
请:cn
几次跳转到bar
中的几个bar.txt
。
现在,关注foo.txt
,:cn
做什么?
您使用:lne
跳转到的位置取决于您所在的窗口,但您使用:cn
跳转到的错误始终相同(直到您将当前的quickfix列表替换为另一个)。
这两个列表都有相对明确的角色IMO:quickfix列表(因此quickfix窗口)通常非常逻辑地用于错误,并且位置列表似乎(对我来说)适合搜索。