Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Vim: Search in Open Buffers

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.

like image 654
Rafid Avatar asked Feb 27 '11 08:02

Rafid


2 Answers

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).

like image 102
Eelvex Avatar answered Nov 15 '22 00:11

Eelvex


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.

like image 27
sarnold Avatar answered Nov 14 '22 23:11

sarnold