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.

因此,不同之处在于,所有用于快速修复列表的窗口和用于位置列表的本地窗口。但是,我可以从任何其他窗口打开位置列表。那有什么区别呢?

Answers:


110

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

快速修复列表是全局的,因此一次不能有多个可用。有一些命令可让您用上一个替换当前的Quickfix列表,但是不能有两个并发的Quickfix列表。

不要将位置/快速修正“列表”(数据结构)与位置/快速修正“窗口”(显示这些数据结构内容的窗口)混淆。“窗口”具有类似的行为,但“列表”则没有。区别之所以重要是因为幸运的是,这些窗口并不是与这些列表进行交互的唯一方式:有许多命令使我们可以在打开关联窗口的情况下浏览这些列表并且知道这些列表之间的差异是有效使用这些命令的关键。

动手插图示例:

$ 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
更笼统地说:当您的搜索或编译涉及多个文件时,quickfix列表是最好的;而仅涉及单个文件时,位置列表最好。
Trebor Rude 2014年

5
特别是,如果您使用来启动vim -q errors.txt,则在将编译错误放入errors.txt(即gcc -Wall *.c >errors.txt 2>&1)后,vim将从编译错误列表中填充快速修复列表,这非常方便。
凯文(Kevin)

@TreborRude,我不这么认为。例如,假设你有两个垂直分割窗口(如上面的答案),并希望搜索多个文件(foo1.txtfoo2.txt为...)foo在左边窗口和多个文件(bar1.txtbar2.txt为...)bar在右侧窗口中。您可以:lv foo foo*在左侧窗口中运行,然后:lv bar bar*在右侧窗口中运行。然后,在左侧窗口:lne中将显示的下一个匹配项foo,而不是bar。这是因为:lv使用运行窗口的位置列表,因此每个搜索都有自己的位置列表。
ma11hew28
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.