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?
How to jump between patterns when using :vimgrep (Quickfix list)?
17.9k Views Asked by yasar At
2
There are 2 best solutions below
3
On
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.
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 thatgetqflist(), performs a sort and thensetqflist():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 :
Of course if you use the location list instead of the quickfix list (
:lvimgrep) the same commands exist, just replace the initialcwith anland that's it.Vim 8 Additions:
:cdo: perform a command on all entries of quickfix list. For example:vim /foo/ *.cpp *.h *.hppcan be followed by:cdo s/pattern/replacement/g:cfdo: perform a command an all files in quickfix list. For example,:vim /foo/ *.cpp *.h *.hppcan be followed by:cfdo %s/2ndpattern/2ndreplacement/g