\" @(#)e5 6.1 (Berkeley) 5/22/86
\"
SH
Change and Insert \- ``c'' and ``i''
PP
This section discusses the
ul
change
command
P1
c
P2
which is used to change
or replace a group of one or more lines,
and the
ul
insert
command
P1
i
P2
which is used for inserting a group of one or more lines.
PP
``Change'', written as
P1
c
P2
is used to replace a number of lines with different lines, which
are typed in at the terminal.
For example,
to change lines
UL .+1
through
UL $
to something else, type
P1
\&.+1,$c
\&. . . \fItype the lines of text you want here\fP . . .
\*.
P2
The lines you type between the
UL c
command and
the
UL .
will take the place of the original lines between
start line and end line.
This is most useful in replacing a line
or several lines which have errors in them.
PP
If only one line is specified in the
UL c
command, then just
that line is replaced.
(You can type in as many replacement lines as you like.)
Notice
the use of
UL .
to end the
input \- this works just like the
UL .
in the append command
and must appear by itself on a new line.
If no line number is given, line dot is replaced.
The value of dot is set to the last line you typed in.
PP
``Insert'' is similar to append \- for instance
P1
/string/i
\&. . . \fItype the lines to be inserted here\fP . . .
\*.
P2
will insert the given text
ul
before
the next line that contains ``string''.
The text between
UL i
and
UL .
is
ul
inserted before
the specified line.
If no line number is specified dot is used.
Dot is set to the last line inserted.
SH
Exercise 7:
PP
``Change'' is rather like a combination of
delete followed by insert.
Experiment to verify that
P1
\fIstart, end\fP d
i
ul
\&. . . text . . .
\*.
P2
is almost the same as
P1
\fIstart, end\fP c
ul
\&. . . text . . .
\*.
P2
These are not
ul
precisely
the same
if line
UL $
gets deleted.
Check this out.
What is dot?
PP
Experiment with
UL a
and
UL i ,
to see that they are
similar, but not the same.
You will observe that
P1
\fIline\(hynumber\fP a
\&. . . \fItext\fP . . .
\*.
P2
appends
ul
after
the given line, while
P1
\fIline\(hynumber\fP i
\&. . . \fItext\fP . . .
\*.
P2
inserts
ul
before
it.
Observe that if no line number is given,
UL i
inserts before line dot, while
UL a
appends
after line dot.
SH
Moving text around: the ``m'' command
PP
The move command
UL m
is used for cutting and pasting \-
it lets you move a group of lines
from one place to another in the buffer.
Suppose you want to put the first three lines of the buffer at the end instead.
You could do it by saying:
P1
1,3w temp
$r temp
1,3d
P2
(Do you see why?)
but you can do it a lot easier with the
UL m
command:
P1
1,3m$
P2
The general case is
P1
\fIstart line, end line\fP m \fIafter this line\fP
P2
Notice that there is a third line to be specified \-
the place where the moved stuff gets put.
Of course the lines to be moved can be specified
by context searches;
if you had
P1
First paragraph
\&. . .
end of first paragraph.
Second paragraph
\&. . .
end of second paragraph.
P2
you could reverse the two paragraphs like this:
P1
/Second/,/end of second/m/First/\-1
P2
Notice the
UL \-1 :
the moved text goes
ul
after
the line mentioned.
Dot gets set to the last line moved.
SH
The global commands ``g'' and ``v''
PP
The
ul
global
command
UL g
is used to execute one or more
ul
ed
commands on all those lines in the buffer
that match some specified string.
For example
P1
g/peling/p
P2
prints all lines that contain
UL peling .
More usefully,
P1
g/peling/s//pelling/gp
P2
makes the substitution everywhere on the line,
then prints each corrected line.
Compare this to
P1
1,$s/peling/pelling/gp
P2
which only prints the last line substituted.
Another subtle difference is that
the
UL g
command
does not give a
UL ?
if
UL peling
is not found
where the
UL s
command will.
PP
There may be several commands
(including
UL a ,
UL c ,
UL i ,
UL r ,
UL w ,
but not
UL g );
in that case,
every line except the last must end with a backslash
UL \e :
P1
g/xxx/\*.-1s/abc/def/\e
\&\*.+2s/ghi/jkl/\e
\&\*.-2,\*.p
P2
makes changes in the lines before and after each line
that contains
UL xxx ,
then prints all three lines.
PP
The
UL v
command is the same as
UL g ,
except that the commands are executed on every line
that does
ul
not
match the string following
UL v :
P1
v/ /d
P2
deletes every line that does not contain a blank.