vim中的位置列表和quickfix列表有什么区别

时间:2014-01-05 13:00:27

标签: vim

以下内容来自有关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.

...

enter image description here

更新

我找到了以下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列表的窗口和用于位置列表的本地窗口。但是我可以从任何其他窗口打开位置列表。那么有什么不同呢?

1 个答案:

答案 0 :(得分:89)

位置列表是当前窗口的本地列表,因此您可以拥有与窗口一样多的位置列表:30个窗口?没问题,这是您的30个并发位置列表。

quickfix列表是全局的,因此您一次不能有多个可用的。有些命令允许您将当前的quickfix列表替换为前一个,但是您不能有两个并发的quickfix列表。

不要将位置/ quickfix“列表”(数据结构)与位置/ quickfix“windows”(显示这些数据结构内容的窗口)混淆。 “窗口”有类似的行为,但“列表”没有。差别很重要,因为谢谢这些窗口并不是与这些列表进行交互的唯一方式:有许多命令允许我们在没有打开相关窗口的情况下浏览这些列表,并了解这些列表之间的区别是有效使用这些命令的关键。

动手插图示例:

$ 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做什么?

  11. 您使用:lne跳转到的位置取决于您所在的窗口,但您使用:cn跳转到的错误始终相同(直到您将当前的quickfix列表替换为另一个)。

    这两个列表都有相对明确的角色IMO:quickfix列表(因此quickfix窗口)通常非常逻辑地用于错误,并且位置列表似乎(对我来说)适合搜索。