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?
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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With