Searching across files

Vim has two commands to help you search across files, :grep and :vimgrep:

  • :grep uses system grep, and is a great tool if you're already familiar with how grep works
  • :vimgrep is a part of Vim, and might be easier to use if you are not already familiar with grep

We'll focus on :vimgrep, since the grep tool is outside the scope of this book.

The syntax is as follows: :vimgrep <pattern> <path>. pattern could either be a string or a Vim-flavored regular expression. path will often be a wildcard; use ** as a path to search recursively (or **/*.py to restrict by filetype).

Let's try searching for a calc substring in our code base:

:vimgrep animal **/* .py

This will take us to the first match, displaying the number of matches at the bottom of the screen:

To navigate through the matches, use :cn or :cp. However, you might want to open a visual quickfix window by using :copen, as follows:

You can navigate the quickfix list with the j and k keys and jump to a match by pressing Enter. The quickfix window can be closed like any other window by typing :q or running Ctrl + w, q. You can read more about it in the Quickfix List section in Chapter 5Build, Test, and Execute.