Vim Tips Wiki
Register
Advertisement
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Tip 837 Printable Monobook Previous Next

created December 21, 2004 · complexity basic · author Wim Rijnders · version 5.7


Following is a big timesaver if you need to open lots of files.

Assume you have a text file containing filenames with or without paths (created by for instance 'grep -Erl "^" * > files.txt'). Following opens all these files in the same vim.

Assuming that only this text file is opened:

Set the cursor on the first line. In normal mode, type:

q0gf:rew<CR><DOWN-ARROW>q

This loads the file on the first line, and creates macro '0'.

Check the number of lines with <CTRL-g> and subtract one for the first line. Type this value, then:

@0

This loads the remaining files.

Comments

How about:

bash> gvim $(grep -l *.* string)

Or

bash> grep -n *.* string > list
bash> vim -q list .. you can visit each file:line with :cnext, :cprev

Or

bash> find . -name *.* | xargs grep -l string | vim -

No macro, it is all builtin.


Returning to original tip: "Assume you have a text file containing filenames with or without paths". Very easy and elegant way to run through these files is the following (supposing there is no spaces around filenames):

Open the file then enter:

:setlocal efm=%f
:execute 'cfile '.expand('%')

Last command may be replaced with typing :cfile <c-r>%<CR>

Now you may navigate through these files using copen, cnext, cNext, cfirst, clast.


Advertisement