How to jump between patterns when using :vimgrep (Quickfix list)?

VimVimgrep

Vim Problem Overview


I am new to vim, and still exploring some features of it. I have a problem with vimgrep. I can search for a pattern like this vimgrep /define/ ** so that it finds and opens next file that contains a define. But I couldn't yet find out how to go to the next file/line that matches my pattern. Any pointers?

Vim Solutions


Solution 1 - Vim

Useful commands for the quickfix list (brackets around omittable part of the commands):

  • :cn[ext] and :cp[revious] jump to next and previous entry
  • :cnf[ile] and :cpf[ile] jump to next and previous file (if the quickfix list is not sorted by file you could write a function that getqflist(), performs a sort and then setqflist()
  • :cr[ewind] and :cla[st] go to beginning or end of the quickfix list
  • :col[der] and :cnew[er] will iterate through historical quickfix lists.

Needless to say there are plenty of other commands and you can discover them at :help quickfix.

Personally I have the following maps :

      | ø      | SHIFT   | CTRL
------+--------+---------+---------
<F11> | :cprev | :cpfile | :colder
<F12> | :cnext | :cnfile | :cnewer

Of course if you use the location list instead of the quickfix list (:lvimgrep) the same commands exist, just replace the initial c with an l and that's it.

Vim 8 Additions:

  • :cdo : perform a command on all entries of quickfix list. For example
    :vim /foo/ *.cpp *.h *.hpp can be followed by
    :cdo s/pattern/replacement/g

  • :cfdo: perform a command an all files in quickfix list. For example,
    :vim /foo/ *.cpp *.h *.hpp can be followed by
    :cfdo %s/2ndpattern/2ndreplacement/g

Solution 2 - Vim

To jump to the next occurrence of the patter you can use :cnext. You can go in reverse with :cNext.

I'm not sure of a way to skip all occurrences until the next file automatically, but you could open the quickfix window with :cwindow to see a list of matches and navigate to those matches by hitting Enter on the entry in the list.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionyasarView Question on Stackoverflow
Solution 1 - VimBenoitView Answer on Stackoverflow
Solution 2 - VimRandy MorrisView Answer on Stackoverflow