summaryrefslogtreecommitdiff
path: root/bin/ed/USD.doc/10.edadv/ae6
diff options
context:
space:
mode:
Diffstat (limited to 'bin/ed/USD.doc/10.edadv/ae6')
-rw-r--r--bin/ed/USD.doc/10.edadv/ae6528
1 files changed, 528 insertions, 0 deletions
diff --git a/bin/ed/USD.doc/10.edadv/ae6 b/bin/ed/USD.doc/10.edadv/ae6
new file mode 100644
index 00000000000..4ea0f1763d1
--- /dev/null
+++ b/bin/ed/USD.doc/10.edadv/ae6
@@ -0,0 +1,528 @@
+.\" $OpeBSD$
+.\"
+.\" Copyright (C) Caldera International Inc. 2001-2002.
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code and documentation must retain the above
+.\" copyright notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\" must display the following acknowledgement:
+.\" This product includes software developed or owned by Caldera
+.\" International, Inc.
+.\" 4. Neither the name of Caldera International, Inc. nor the names of other
+.\" contributors may be used to endorse or promote products derived from
+.\" this software without specific prior written permission.
+.\"
+.\" USE OF THE SOFTWARE PROVIDED FOR UNDER THIS LICENSE BY CALDERA
+.\" INTERNATIONAL, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR
+.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+.\" IN NO EVENT SHALL CALDERA INTERNATIONAL, INC. BE LIABLE FOR ANY DIRECT,
+.\" INDIRECT INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+.\" IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+.\" POSSIBILITY OF SUCH DAMAGE.
+.\"
+.\" @(#)ae6 8.1 (Berkeley) 6/8/93
+.\"
+.NH
+CUT AND PASTE WITH THE EDITOR
+.PP
+Now we move on to manipulating pieces of files _
+individual lines or groups of lines.
+This is another area where new users seem
+unsure of themselves.
+.SH
+Filenames
+.PP
+The first step is to ensure that you know the
+.UL ed
+commands for reading and writing files.
+Of course you can't go very far without knowing
+.UL r
+and
+.UL w .
+Equally useful, but less well known, is the `edit' command
+.UL e .
+Within
+.UL ed ,
+the command
+.P1
+e newfile
+.P2
+says `I want to edit a new file called
+.ul
+newfile,
+without leaving the editor.'
+The
+.UL e
+command discards whatever you're currently working on
+and starts over on
+.ul
+newfile.
+It's exactly the same as if you had quit with the
+.UL q
+command, then re-entered
+.UL ed
+with a new file name,
+except that if you have a pattern remembered, then a command
+like
+.UL //
+will still work.
+.PP
+If you enter
+.UL ed
+with the command
+.P1
+ed file
+.P2
+.UL ed
+remembers the name of the file,
+and any subsequent
+.UL e ,
+.UL r
+or
+.UL w
+commands that don't contain a filename
+will refer to this remembered file.
+Thus
+.P1 2
+.ta .5i .6i .7i
+ed file1
+ ... (editing) ...
+w (writes back in file1)
+e file2 (edit new file, without leaving editor)
+ ... (editing on file2) ...
+w (writes back on file2)
+.P2
+(and so on) does a series of edits on various files
+without ever leaving
+.UL ed
+and without typing the name of any file more than once.
+(As an aside, if you examine the sequence of commands here,
+you can see why many
+UNIX
+systems use
+.UL e
+as a synonym
+for
+.UL ed .)
+.PP
+You can find out the remembered file name at any time
+with the
+.UL f
+command;
+just type
+.UL f
+without a file name.
+You can also change the name of the remembered file name with
+.UL f ;
+a useful sequence is
+.P1
+ed precious
+f junk
+ ... (editing) ...
+.P2
+which gets a copy of a precious file,
+then uses
+.UL f
+to guarantee that a careless
+.UL w
+command won't clobber the original.
+.SH
+Inserting One File into Another
+.PP
+Suppose you have a file called
+`memo',
+and you want the file called
+`table'
+to be inserted just after the reference to
+Table 1.
+That is, in
+`memo'
+somewhere is a line that says
+.IP
+Table 1 shows that ...
+.LP
+and the data contained in
+`table'
+has to go there,
+probably so it will be formatted
+properly by
+.UL nroff
+or
+.UL troff .
+Now what?
+.PP
+This one is easy.
+Edit
+`memo',
+find
+`Table 1',
+and add the file
+`table'
+right there:
+.P1
+ed memo
+/Table 1/
+.ft I
+Table 1 shows that ... [response from ed]
+.ft
+\&\*.r table
+.P2
+The critical line is the last one.
+As we said earlier, the
+.UL r
+command reads a file;
+here you asked for it to be read in right after
+line dot.
+An
+.UL r
+command without any address
+adds lines at the end,
+so it is the same as
+.UL $r .
+.SH
+Writing out Part of a File
+.PP
+The other side of the coin is writing out part of
+the document you're editing.
+For example, maybe
+you want to copy out into a separate file
+that table from the previous example,
+so it can be formatted and tested separately.
+Suppose that in the file being edited
+we have
+.P1
+\&\*.TS
+ ...[lots of stuff]
+\&\*.TE
+.P2
+which is the way a table is set up for the
+.UL tbl
+program.
+To isolate
+the table
+in a separate file called
+`table',
+first find the start of the table
+(the `.TS' line), then write out the interesting part:
+.P1
+/^\*e\*.TS/
+.ft I
+\&\*.TS [ed prints the line it found]
+.ft R
+\&\*.,/^\*e\*.TE/w table
+.P2
+and the job is done.
+If you are confident, you can do it all at once with
+.P1
+/^\*e\*.TS/;/^\*e\*.TE/w table
+.P2
+and now you have two copies, one in the file you're still editing,
+one in the file `table' you've just written.
+.PP
+The point is that the
+.UL w
+command can
+write out a group of lines, instead of the whole file.
+In fact, you can write out a single line if you like;
+just give one line number instead of two.
+For example, if you have just typed a horribly complicated line
+and you know that it (or something like it) is going to be needed later,
+then save it _ don't re-type it.
+In the editor, say
+.P1
+a
+\&...lots of stuff...
+\&...horrible line...
+\&\*.
+\&\*.w temp
+a
+\&\*.\*.\*.more stuff\*.\*.\*.
+\&\*.
+\&\*.r temp
+a
+\&\*.\*.\*.more stuff\*.\*.\*.
+\&\*.
+.P2
+This last example is worth studying, to be sure you appreciate
+what's going on.
+.SH
+Moving Lines Around
+.PP
+Suppose you want to
+move a paragraph from its present position in a paper
+to the end.
+How would you do it?
+As a concrete example, suppose each paragraph in the paper
+begins with the formatting command
+`.PP'.
+Think about it and write down the details before reading on.
+.PP
+The brute force way
+(not necessarily bad)
+is to write the paragraph onto a temporary file,
+delete it from its current position,
+then read in the temporary file at the end.
+Assuming that you are sitting on the
+`.PP' command that begins
+the paragraph, this is the sequence of commands:
+.P1
+\&\*.,/^\*e\*.PP/-w temp
+\&\*.,//-d
+$r temp
+.P2
+That is, from where you are now
+(`\*.')
+until one line before the next `\*.PP'
+(`/^\*e\*.PP/\-')
+write onto
+`temp'.
+Then delete the same lines.
+Finally, read
+`temp'
+at the end.
+.PP
+As we said, that's the brute force way.
+The easier way (often)
+is to use the
+.ul
+move
+command
+.UL m
+that
+.UL ed
+provides _
+it lets you do the whole set of operations
+at one crack,
+without any temporary file.
+.PP
+The
+.UL m
+command
+is like many other
+.UL ed
+commands in that it takes up to two line numbers in front
+that tell what lines are to be affected.
+It is also
+.ul
+followed
+by a line number that tells where the lines are to go.
+Thus
+.P1
+line1, line2 m line3
+.P2
+says to move all the lines between
+`line1'
+and
+`line2'
+after
+`line3'.
+Naturally, any of
+`line1'
+etc., can be patterns between slashes,
+$
+signs, or other ways to specify lines.
+.PP
+Suppose again that you're sitting at the first line of the
+paragraph.
+Then you can say
+.P1
+\&\*.,/^\*e\*.PP/-m$
+.P2
+That's all.
+.PP
+As another example of a frequent operation,
+you can reverse the order of two adjacent lines
+by moving the first one
+to after the second.
+Suppose that you are positioned at the first.
+Then
+.P1
+m+
+.P2
+does it.
+It says to move line dot to after one line after line dot.
+If you are positioned on the second line,
+.P1
+m--
+.P2
+does the interchange.
+.PP
+As you can see, the
+.UL m
+command is more succinct and direct than
+writing, deleting and re-reading.
+When is brute force better anyway?
+This is a matter of personal taste _
+do what you have most confidence in.
+The main difficulty with the
+.UL m
+command
+is that if you use patterns to specify both the lines
+you are moving and the target,
+you have to take care that you specify them properly,
+or you may well not move the lines you thought you did.
+The result of a botched
+.UL m
+command can be a ghastly mess.
+Doing the job a step at a time
+makes it easier for you to verify at each step
+that you accomplished what you wanted to.
+It's also a good idea to issue a
+.UL w
+command
+before doing anything complicated;
+then if you goof, it's easy to back up
+to where you were.
+.SH
+Marks
+.PP
+.UL ed
+provides a facility for marking a line
+with a particular name so you can later reference it
+by name
+regardless of its actual line number.
+This can be handy for moving lines,
+and for keeping track of them even after they've been moved.
+The
+.ul
+mark
+command is
+.UL k ;
+the command
+.P1
+kx
+.P2
+marks the current line with the name `x'.
+If a line number precedes the
+.UL k ,
+that line is marked.
+(The mark name must be a single lower case letter.)
+Now you can refer to the marked line with the address
+.P1
+\(fmx
+.P2
+.PP
+Marks are most useful for moving things around.
+Find the first line of the block to be moved, and mark it
+with
+.ul
+\(fma.
+Then find the last line and mark it with
+.ul
+\(fmb.
+Now position yourself at the place where the stuff is to go
+and say
+.P1
+\(fma,\(fmbm\*.
+.P2
+.PP
+Bear in mind that only one line can have a particular
+mark name associated with it
+at any given time.
+.SH
+Copying Lines
+.PP
+We mentioned earlier the idea of saving a line
+that was hard to type or used often,
+so as to cut down on typing time.
+Of course this could be more than one line;
+then the saving is presumably even greater.
+.PP
+.UL ed
+provides another command,
+called
+.UL t
+(for `transfer')
+for making a copy of a group of one or more lines
+at any point.
+This is often easier than writing and reading.
+.PP
+The
+.UL t
+command is identical to the
+.UL m
+command, except that instead of moving lines
+it simply duplicates them at the place you named.
+Thus
+.P1
+1,$t$
+.P2
+duplicates the entire contents that you are editing.
+A more common use for
+.UL t
+is for creating a series of lines that differ only slightly.
+For example, you can say
+.P1
+.ta 1i
+a
+\&.......... x ......... (long line)
+\&\*.
+t\*. (make a copy)
+s/x/y/ (change it a bit)
+t\*. (make third copy)
+s/y/z/ (change it a bit)
+.P2
+and so on.
+.SH
+The Temporary Escape `!'
+.PP
+Sometimes it is convenient to be able
+to temporarily escape from the editor to do
+some other
+.UX
+command,
+perhaps one of the file copy or move commands
+discussed in section 5,
+without leaving the editor.
+The `escape' command
+.UL !
+provides a way to do this.
+.PP
+If you say
+.P1
+!any UNIX command
+.P2
+your current editing state is suspended,
+and the
+.UX
+command you asked for is executed.
+When the command finishes,
+.UL ed
+will signal you by printing another
+.UL ! ;
+at that point you can resume editing.
+.PP
+You can really do
+.ul
+any
+.UX
+command, including another
+.UL ed .
+(This is quite common, in fact.)
+In this case, you can even do another
+.UL ! .
+.PP
+On Berkeley
+.UX
+systems, there is an additional (and preferable) mechanism called
+.ul
+job control
+which lets you suspend your edit session (or, for that matter,
+any program), return to the shell from
+which you invoked that program, and issue any commands, then resume
+the program from the point where it was stopped. See
+.ul
+An Introduction to the C Shell
+for more details.