使用:vimgrep(快速修复列表)时如何在模式之间跳转?

59

我刚开始学习使用vim,正在探索一些功能。我遇到了一个问题,就是在使用vimgrep时。我可以像这样搜索一个模式:vimgrep /define/ **,然后它会找到并打开下一个包含define的文件。但是我还没有找到如何跳转到下一个符合我的模式的文件或行。有什么指针吗?

2个回答

92

快速修复列表的相关命令(方括号中的部分可以省略):

当然还有很多其他命令,你可以在 :help quickfix 中发现它们。

个人建议使用以下映射:

      | ø      | SHIFT   | CTRL
------+--------+---------+---------
<F11> | :cprev | :cpfile | :colder
<F12> | :cnext | :cnfile | :cnewer
当然,如果你使用位置列表而不是Quickfix列表(:lvimgrep),相同的命令存在,只需将初始的“c”替换为“l”即可。
Vim 8新增内容:
- :cdo:对快速fix列表中的所有条目执行命令。例如, :vim /foo/ *.cpp *.h *.hpp 可以跟随 :cdo s/pattern/replacement/g - :cfdo:在Quickfix列表中的所有文件上执行指定命令。例如, :vim /foo/ *.cpp *.h *.hpp 可以跟随 :cfdo %s/2ndpattern/2ndreplacement/g

9
这个流行的 unimpaired.vim 插件将 :cprev:cnext 映射到了 [q]q。很容易上手。 - glts
1
它还将 [<C-q>]<C-q> 映射到 :cpfile:cnfile - Jim Stewart
请注意,这与“:cNext”不同,如果我键入“:cn”然后按Tab,则会首先出现它。问题在于,您只会收到“没有更多项目”的错误,因为正如@RandyMorris的答案所指出的那样,“:cNext”是反向的。我只是假设出了什么问题。 - icc97
":c" 的意思是什么? - Tamil

10

要跳转到下一个匹配项,您可以使用:cnext命令。如果需要反向查找,则可以使用:cNext

我不确定有没有一种自动跳过所有匹配项直到下一个文件的方法,但是您可以使用:cwindow命令打开快速修复窗口,以查看匹配项列表,并通过在列表中选择条目并按下Enter键来导航到这些匹配项。


6
":cnfile" 是你想要的! - Benoit
1
@Benoit:请将其放在自己的答案中。 - Nathan Fellman
2
@Benoit,确实。我会让你发布并收获回报。 - Randy Morris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接