==============================================================================
*26.3* Making a change in many files
Suppose you have a variable called "x_cnt" and you want to change it to
"x_counter". This variable is used in several of your C files. You need to
change it in all files. This is how you do it.
Put all the relevant files in the argument list: >
:args *.c
<
This finds all C files and edits the first one. Now you can perform a
substitution command on all these files: >
:argdo %s/\<x_cnt\>/x_counter/ge | update
The ":argdo" command takes an argument that is another command. That command
will be executed on all files in the argument list.
The "%s" substitute command that follows works on all lines. It finds the
word "x_cnt" with "\<x_cnt\>". The "\<" and "\>" are used to match the whole
word only, and not "px_cnt" or "x_cnt2".
The flags for the substitute command include "g" to replace all occurrences
of "x_cnt" in the same line. The "e" flag is used to avoid an error message
when "x_cnt" does not appear in the file. Otherwise ":argdo" would abort on
the first file where "x_cnt" was not found.
The "|" separates two commands. The following "update" command writes the
file only if it was changed. If no "x_cnt" was changed to "x_counter" nothing
happens.
There is also the ":windo" command, which executes its argument in all
windows. And ":bufdo" executes its argument on all buffers. Be careful with
this, because you might have more files in the buffer list than you think.
Check this with the ":buffers" command (or ":ls").
==============================================================================
*26.4* Using Vim from a shell script
Suppose you have a lot of files in which you need to change the string
"-person-" to "Jones" and then print it. How do you do that? One way is to
do a lot of typing. The other is to write a shell script to do the work.
The Vim editor does a superb job as a screen-oriented editor when using
Normal mode commands. For batch processing, however, Normal mode commands do
not result in clear, commented command files; so here you will use Ex mode
instead. This mode gives you a nice command-line interface that makes it easy
to put into a batch file. ("Ex command" is just another name for a
command-line (:) command.)
The Ex mode commands you need are as follows: >
%s/-person-/Jones/g
write tempfile
quit
You put these commands in the file "change.vim". Now to run the editor in
batch mode,