command. But, instead of replacing the
matched text with other text, the command {command} is executed.
Note:
The command executed for ":global" must be one that starts with a
colon. Normal mode commands can not be used directly. The |:normal|
command can do this for you.
Suppose you want to change "foobar" to "barfoo", but only in C++ style
comments. These comments start with "//". Use this command: >
:g+//+s/foobar/barfoo/g
This starts with ":g". That is short for ":global", just like ":s" is short
for ":substitute". Then the pattern, enclosed in plus characters. Since the
pattern we are looking for contains a slash, this uses the plus character to
separate the pattern. Next comes the substitute command that changes "foobar"
into "barfoo".
The default range for the global command is the whole file. Thus no range
was specified in this example. This is different from ":substitute", which
works on one line without a range.
The command isn't perfect, since it also matches lines where "//" appears
halfway through a line, and the substitution will also take place before the
"//".
Just like with ":substitute", any pattern can be used. When you learn more
complicated patterns later, you can use them here.
==============================================================================
*10.5* Visual block mode
With CTRL-V you can start selection of a rectangular area of text. There are
a few commands that do something special with the text block.
There is something special about using the "$" command in Visual block mode.
When the last motion command used was "$", all lines in the Visual selection
will extend until the end of the line, also when the line with the cursor is
shorter. This remains effective until you use a motion command that moves the
cursor horizontally. Thus using "j" keeps it, "h" stops it.
INSERTING TEXT
The command "I{string}<Esc>" inserts the text {string} in each line, just
left of the visual block. You start by pressing CTRL-V to enter visual block
mode. Now you move the cursor to define your block. Next you type I to enter
Insert mode, followed by the text to insert. As you type, the text appears on
the first line only.
After you press <Esc> to end the insert, the text will magically be
inserted in the rest of the lines contained in the visual selection. Example:
include one ~
include two ~
include three ~
include four ~
Move the cursor to the "o" of "one" and press CTRL-V. Move it down with "3j"
to "four". You now have a block selection that spans four lines. Now type: >
Imain.<Esc>
The result:
include main.one ~
include main.two ~
include main.three ~
include main.four ~
If the block spans short lines that do not extend into the block, the text is
not inserted in that line. For example, make a Visual block selection that
includes the word "long" in the first and last line of this text, and thus has
no text selected in the second line:
This is a long line ~
short ~
Any other long line ~
^^^^ selected block
Now use the command "Ivery <Esc>". The result is:
This is a very long line ~
short ~
Any other very long line ~
In the short line no text was inserted.
If the string you insert contains a newline, the "I" acts just like a Normal
insert command and affects only the first line of the block.
The "A" command works the same way, except that it appends after the right
side of the block. And it does insert text in a short line. Thus you can
make a choice whether you do or don't want to append text to a short line.
There is one special case for "A": Select a Visual block and then use "$"
to make the block extend to the end of each line. Using "A" now will append
the text to the end of each line.
Using the same example from above, and then typing "$A XXX<Esc>, you get
this result:
This is a long line XXX ~
short XXX ~
Any other long line XXX ~
This really requires using the "$" command. Vim remembers that it was used.
Making