Vim: Search in Open Buffers

1.5k views Asked by At

One features I like with Visual Studio is the ability to search in open files only. For example, if I recently did changes to some files and I would like to trace those changes, I might search for a certain word, but only in those files to avoid getting a large list of necessary matches.

Is this possible with Vim?! What I am interested in is being able to open the files I have changed so for using:

gvim `git diff --name-only`

then search those files for what I want.

2

There are 2 answers

0
Eelvex On

A nice way to do that is to use vim's internal grep command (:vim):

:vim /pattern/ `git diff --name-only`
:copen

This will open a small window (called quickfix) with the search results and links to open the corresponding files (they don't have to be open).

2
sarnold On

If you want vim to open up all the files in their own buffers for files that match your diff, you could try this:

gvim $(grep -l pattern $(git diff --relative --name-only))

git diff --relative --name-only shows the changed files in the index but with filenames relative to the current working directory.

grep -l pattern <list of files> will report the filenames that contain a match on pattern. (Note that the pattern just has to exist in the files, not in the git diff output.)

POSIX $() instead of backticks makes using nested commands possible.