BSD 4_3 development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Wed, 3 Aug 1983 02:57:09 +0000 (18:57 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Wed, 3 Aug 1983 02:57:09 +0000 (18:57 -0800)
Work on file usr/contrib/apl/man/xed.1

Synthesized-from: CSRG/cd1/4.3

usr/contrib/apl/man/xed.1 [new file with mode: 0644]

diff --git a/usr/contrib/apl/man/xed.1 b/usr/contrib/apl/man/xed.1
new file mode 100644 (file)
index 0000000..cadc7e7
--- /dev/null
@@ -0,0 +1,2164 @@
+.ds v 7.15
+.nr sa 35
+.ds ex edt
+.ds ed xed
+.ds Ed Xed
+.ds ED XED
+.ds ux eXtended
+'''.ds ed eed
+'''.ds Ed Eed
+'''.ds ED EED
+'''.ds ux EE/unix
+.if t .ds 0 \o'/0'
+.if t .ds oq "``
+.if t .ds cq "''
+.if n .ds oq ""
+.if n .ds cq ""
+.nh
+.TH \*(ED 1 "28 July 1983"
+.UC 4
+.SH NAME
+\*(ed
+\(mi \*(ux text EDitor \(mi V\*v
+.SH SYNOPSIS
+.B \*(ed
+[
+.B \(mi!@abBcdefhiklmnoOpqrstvwy
+] [ name ]
+.SH DESCRIPTION
+.I \*(Ed
+is the \*(ux text EDitor.
+.PP
+If a
+.I name
+argument is given,
+.I \*(ed
+simulates an
+.B e
+command (see below) on the named file; that is to say,
+the file is read into
+.IR \*(ed 's
+buffer so that it can be edited.
+After every \n(sa
+(default)
+commands have been executed,
+the edit buffer will be written
+on a scratch file.
+When
+.I \*(ed
+terminates successfully,
+the
+.I save
+file will be removed unless the
+.B \(mid
+flag was selected.
+If a writeable file named \*(oq\c
+.I edsav\c
+\&\*(cq exists in the current directory,
+all commands typed will be written to it.
+.PP
+The optional flags after the
+.B \(mi
+have the following functions:
+.TP
+.B \(mi!
+Disallow use of the
+.B !
+command.
+Mostly useful for writing programs which cannot allow
+unrestricted access to shell commands.
+.TP
+.BI \(mi@ fn
+Preset the
+.I indirect
+file name to
+.IR fn .
+Subsequent use of the
+.B @
+command will read commands from
+.IR fn ,
+until the name is changed by giving an argument to the
+.B @
+command.
+.TP
+.B \(mia
+The line numbers will be printed in
+.I apl
+mode.
+The form is
+\*(oq[
+.I n
+]\fI\et\fP\*(cq
+followed by the text.
+In addition,
+overstruck characters will be printed
+on two lines, one above the other.
+.I Apl
+line numbers begin at
+.I zero
+instead of one.
+.TP
+.B \(mib
+Make a
+.I backup
+copy of the edit file
+upon entry to the editor.
+The file's name will be that of the original
+file with a \*(oq\c
+.BI . bak\c
+\&\*(cq extension.
+.TP
+.BI \(miB nnnn
+Set the
+.I line
+buffer size to
+.I nnnn
+(decimal) bytes.
+The default line buffer size is 512 bytes,
+which limits the maximum length line which may be processed.
+Since there are occasions where it is desired to process
+longer lines,
+the buffer size may be increased.
+.TP
+.BI \(mic nn
+Set the editor's idea of the depth of the Crt screen
+for the
+.B :
+command to
+.I nn
+(decimal).
+Default is 21 lines.
+If
+.I nn
+is zero, the paging will be disabled.
+(See also the
+.I d=nn
+command.)
+.TP
+.B \(mid
+Disables the deletion of the file created via the
+.I auto-save
+feature.
+(The \*(oq\c
+.BI . \*(ex\c
+\&\*(cq file.)
+.TP
+.B \(mie
+Each input command will be echoed on standard output.
+This is useful for debugging editor command files,
+since the error message will be immediately
+preceded by the command that caused it.
+.TP
+.B \(mif
+.I \*(Ed
+will automatically prompt for text lines
+upon being invoked.
+Upon exit,
+.I \*(ed
+will automatically write the file.
+This is useful for creating files without having to type the
+.B a
+command upon entry.
+Note: If this flag is selected, the editor will over-write
+an existing file by the same name.
+See the
+.B qi
+command.
+.TP
+.B \(mih
+Enable processing of a \*(oq\c
+.I huge\c
+\&\*(cq file, I.E. one with
+up to 511 blocks, instead of the normal limit
+of 255 blocks.
+The use of
+.B \(mih
+disallows the
+.B g
+and
+.B v
+commands.
+(This flag is inoperative and unnecessary on the Vax.)
+.TP
+.B \(mii
+If an
+.I interrupt
+(ASCII
+.BR DEL )
+character is typed,
+.I \*(ed
+will write the current contents of the edit buffer on a file,
+and exit.
+The name of the dump file is that of the original file with a
+.BI . int
+extension.
+The
+.B \(mii
+flag is very useful for shell files
+which call the editor, since the editor will
+not hang around after an interrupt,
+interfering with the user's commands.
+.TP
+.B \(mik
+Useful for slow terminals,
+this flag
+.I kills
+verbose error messages.
+Instead,
+.I \*(ed
+prints a query
+.B ?
+followed by an
+.IR "error number" .
+The actual error message may be obtained by typing the
+.BI e nn
+command (see below).
+The long error messages may be turned on/off
+via the
+.B e+
+and
+.B e\(mi
+commands (see below).
+.TP
+.BI \(mil c
+The
+.I eol
+character is initialized to character
+.IR c .
+It may be changed during the edit session by the
+.BI e= c
+command.
+.TP
+.BI \(mim nn
+The modification count before an automatic
+save of the edit buffer is set to
+.I nn
+(decimal).
+Default is \n(sa.
+(That is, after every \n(sa commands which cause
+a modification to one or more lines, the
+edit buffer will be written on the edit
+file name with
+.BI . \*(ex
+extension.)
+If the count is zero, the auto-save feature is disabled.
+.TP
+.B \(min
+The
+.I no-line-numbers
+flag is toggled.
+This results in the omission of line number prompts
+as well as line numbers on the
+.B p
+and
+.B l
+commands.
+.TP
+.B \(mio
+The editor will not seek standard input to end-of-file
+upon detecting a command error.
+Normally, this results in a command file terminating immediately.
+.TP
+.B \(miO
+If a
+.I write
+is attempted to a file that is write-locked,
+but is owned by the user,
+an attempt will be made to
+.I override
+the permission.
+.TP
+.B \(mip
+Turn on prompts even if not talking to a terminal, mostly
+useful for editing through pipes
+(as when using
+.IR protocol (1)
+or
+.IR script (1)).
+.TP
+.B \(miq
+The editor will
+.B NOT
+ignore a
+.I quit
+(ASCII
+.B FS
+or ctrl-\c
+.B \e\c
+) signal.
+Normally for editor debugging purposes, as a core dump
+can then be made.
+.br
+.BR Beware ,
+the edit buffer can not be recovered!
+.TP
+.B \(mir
+.I Removes
+the special meaning of the special characters:
+.B $
+.B &
+.B \e(
+.B \e)
+.B [
+.B .
+.B *
+.B ^
+.B \e
+.TP
+.B \(mis
+.I Silent
+mode.
+No prompts are issued,
+printing of lines resulting from commands is suppressed
+unless they are
+.I explicitly
+terminated with a
+.BR p .
+This mode is useful for running editor command files.
+.TP
+.BI \(mit c
+Set the
+.I tab
+character to
+.IR c .
+This is the character which will be expanded
+to the appropriate number of fill characters to get
+to the next column which has a tab stop set in it.
+The
+.I tab
+character may be set/changed using the
+.BI t= c
+command.
+.TP
+.BI \(miv c
+Set the tab
+.I fill
+character to
+.IR c .
+This character is used to pad out the space between expanded
+fields.
+The tab
+.I fill
+character may be set/changed by the
+.BI f= c
+command.
+.TP
+.BI \(miw nn
+Set the editor's idea of the page width to
+.I nn
+(decimal).
+Default is 80 columns.
+(See also the
+.BI w= nn
+command.)
+.TP
+.B \(miy
+Set the interrupt processing to list out
+one page
+(see the
+.B :
+command)
+upon receipt of an interrupt.
+.TP
+.B \(mi\*0123456789
+A decimal number preceded by a
+.B \(mi
+will set a
+.I tab
+stop in that column.
+Tab settings may be made during edit session by the
+.BI t, nn
+command.
+.TP
+.B \(mi,
+A comma in the flag list is ignored to facilitate
+setting multiple tab stops.
+For example, tabs may be set by any of the forms
+\*(oq\(mi9\ \(mi17\ \(mi25\*(cq, \*(oq\(mi9,17,25\*(cq, \*(oq\(mi9a17d25f\*(cq.
+.PP
+.I \*(Ed
+operates on a copy of any file it is editing; changes made
+in the copy have no effect on the file until a
+.I w
+(write)
+command is given.
+The copy of the text being edited resides
+in a temporary file called the buffer.
+There is only one buffer.
+.PP
+Commands to
+.I \*(ed
+have a simple and regular structure:
+zero or more addresses followed by a one or more character
+command, possibly followed by parameters to the command.
+These addresses specify one or more lines in the buffer.
+Every command which requires addresses has default addresses,
+so that the addresses can often be omitted.
+.PP
+In general, only one command may appear on a line.
+(See the
+.BI e= c
+command and the
+.B \(mil
+flag.)
+Certain commands allow the input of text.
+This text is placed in the appropriate place in the buffer.
+While
+.I \*(ed
+is accepting text, it is said to be in
+.IR "input mode" .
+In this mode, no commands are recognized;
+all input is merely collected.
+Input mode is left by typing a period
+.B .
+alone at the
+beginning of a line, or by receipt of an end-of-file
+(Ctrl-D)
+from the keyboard.
+.PP
+.I \*(Ed
+supports a limited form of
+.I "regular expression"
+notation.
+A regular expression specifies
+a set of strings of characters.
+A member of this set of strings is said to be
+.I matched
+by the regular expression.
+The regular expressions allowed by
+.I \*(ed
+are constructed as follows:
+In the following specification for regular expressions
+the word
+.I character
+means any character but newline.
+.IP 1.
+Any character except a
+.I special
+character
+matches itself.
+Special characters are
+the regular expression delimiter plus
+.B "\e [ ."
+and sometimes
+.BR "^ * $" .
+.IP 2.
+A
+.B .
+matches any character.
+.IP 3.
+A
+.B \e
+followed by any character except a
+.I digit
+or
+.B "( )"
+matches that character.
+.IP 4.
+A nonempty string
+.I s
+bracketed
+.B [\c
+.I s\c
+.B ]
+(or
+.B [^\c
+.I s\c
+.BR ] )
+matches any character in (or not in)
+.IR s .
+In 
+.IR s ,
+.B \e
+has no special meaning, and
+.B ]
+may only appear as
+the first letter.
+A substring 
+.I a\c
+\(mi\c
+.IR b ,
+with
+.I a
+and
+.I b
+in ascending ASCII order, stands for the inclusive
+range of ASCII characters.
+.IP 5.
+A regular expression of form 1-4 followed by
+.B *
+matches a sequence of
+.I zero
+or more matches of the regular expression.
+.IP 6.
+A regular expression,
+.IR x ,
+of form 1-8, bracketed
+.B \e(\c
+.I x\c
+.B \e)
+matches what
+.I x
+matches, with side-effects described under the
+.B s
+command below.
+.IP 7.
+A
+.B \e
+followed by a digit 
+.I n
+matches a copy of the string that the
+bracketed regular expression beginning with the
+.IR n th
+.B \e(
+matched.
+.IP 8.
+A regular expression of form 1-8,
+.IR x ,
+followed by a regular expression of form 1-7,
+.I y
+matches a match for
+.I x
+followed by a match for
+.IR y ,
+with the
+.I x
+match being as long as possible while still permitting a
+.I y
+match.
+.IP 9.
+A regular expression of form 1-8 preceded by
+.B ^
+(or followed by
+.BR $ ),
+is constrained to matches that
+begin at the left (or end at the right) end of a line.
+.IP 10.
+A regular expression of form 1-9 picks out the
+longest among the leftmost matches in a line.
+.IP 11.
+An empty regular expression stands for a copy of the
+last regular expression encountered.
+.PP
+Regular expressions are used in addresses to specify
+lines and in one command
+(see
+.B s
+below)
+to specify a portion of a line which is to be replaced.
+If it is desired to use one of
+the regular expression metacharacters as an ordinary
+character, that character may be preceded by
+.BR \e .
+This also applies to the character bounding the regular
+expression
+(often
+.BR / )
+and to
+.B \e
+itself.
+.PP
+To understand addressing in
+.I \*(ed
+it is necessary to know that at any time there is a
+.IR "current line" .
+Generally speaking, the current line is
+the last line affected by a command; however,
+the exact effect on the current line
+is discussed under the description of the command.
+Addresses are constructed as follows.
+.IP 1.
+The character
+.B .
+addresses the current line.
+.IP 2.
+The character
+.B $
+addresses the last line of the buffer.
+.IP 3.
+A decimal number
+.I n
+addresses the
+.IR n -th
+line of the buffer.
+.IP 4.
+.BI \(aa x
+addresses the line (or lines) marked with the
+mark name character
+.IR x ,
+which must be a lower-case letter.
+An alternative to this syntax is the capital
+letter alone.
+Lines are marked with the
+.B k
+command described below.
+.IP 5.
+.B \(aa\c
+.IB x ^
+(or
+.IB X ^\c
+) addresses the first (lower)
+line of the range marked
+with the mark name character
+.IR x .
+(See the
+.I k
+command description.)
+.IP 6.
+.B \(aa\c
+.IB x $
+(or
+.IB X $\c
+) addresses the last (upper)
+line of the range marked
+with the mark name character
+.IR x .
+(See the
+.B k
+command description.)
+.IP 7.
+A regular expression enclosed in slashes
+.B /
+addresses
+the first line found by searching toward the end of the
+buffer and stopping at the first line containing a
+string matching the regular expression.
+If necessary the search wraps around to the beginning of the buffer.
+.IP 8.
+A regular expression enclosed in queries
+.B ?
+addresses
+the first line found by searching toward the beginning of
+the buffer and stopping at the first line containing
+a string matching the regular expression.
+If necessary the search wraps around to the end of the buffer.
+.IP 9.
+An address followed by a plus sign
+.B +
+or a minus sign
+.B \(mi
+followed by a decimal number
+specifies that address plus
+(resp. minus)
+the indicated number of lines.
+The plus sign may be omitted.
+.IP 10.
+If an address begins with
+.B +
+or
+.B \(mi
+the addition or subtraction is taken with respect to the current line;
+e\.g\.
+.B \(mi5
+is understood to mean
+.BR .\(mi5 .
+(If the first address is omitted, but a second
+bound is specified, then the first address will be the current line
+plus one.
+e.g. \*(oq\c
+.B ,+10\c
+\&\*(cq is equivalent to \*(oq\c
+.B .+1,.+10\c
+\&\*(cq.)
+.IP 11.
+If an address ends with
+.B +
+or
+.BR \(mi ,
+then 1 is added (resp. subtracted).
+As a consequence of this rule and rule 10,
+the address
+.B \(mi
+refers to the line before the current line.
+Moreover, trailing
+.B +
+and
+.B \(mi
+characters have cumulative effect, so
+.B \(mi\(mi
+refers to the current
+line less 2.
+(There are complications of this rule,
+see the
+.B b
+command below.)
+.IP 12.
+To maintain compatibility with earlier versions of the editor,
+the character
+.B ^
+in addresses is entirely equivalent to
+.BR \(mi .
+.IP 13.
+The character
+.B =
+specifies that the address bounds of the
+previous command are to be used for the current command.
+.IP 14.
+The character pair
+.B =^
+addresses the lower bound
+(first address) specified in the previous command.
+.IP 15.
+The character pair
+.B =$
+addresses the upper bound
+(second address) specified in the previous command.
+.IP 16.
+The character pair
+.B ..
+addresses the
+last value of
+.B .
+different from the current value of
+.BR . \\|.
+.PP
+Commands may require zero, one, or two addresses.
+Commands which require no addresses regard the presence
+of an address as an error.
+Commands which accept one or two addresses
+assume default addresses when insufficient are given.
+If more addresses are given than such a command requires,
+the last one or two (depending on what is accepted) are used.
+.PP
+Addresses are separated from each other typically by a comma
+.BR , \\|.
+They may also be separated by a semicolon
+.BR ; \\|.
+In this case the current line
+.B .
+is set to
+the first address before the next address is interpreted.
+The second address of any two-address sequence
+must correspond to a line following
+the line corresponding to the first address.
+.PP
+In the following list of
+.I \*(ed
+commands, the default addresses are shown in parentheses.
+The parentheses are not part of the address,
+but are used to show that the given addresses are the default.
+.PP
+As mentioned, it is generally illegal for more than one
+command to appear on a line. However, most commands may be suffixed by
+.BR p ,
+.BR b ,
+.B q
+or
+.BR l ,
+in which case the current line is either
+printed (as in the
+.B p
+command), listed with balanced pairs of parentheses, square brackets,
+and brace brackets numbered (\c
+.BR b ),
+quoted (by
+.B
+"
+or
+.BR \(aa )
+string lengths (\c
+.BR q ),
+or listed as in the
+.B l
+command.
+.de PI
+.br
+.ne 5
+.IP
+.ti -.5i
+..
+.PI
+(
+.B .
+)\c
+.B a
+.ti -.5i
+.I text
+.ti -.5i
+.B .
+.br
+The
+.I append
+command reads the given text
+and appends it after the addressed line.
+.B .
+is left on the last line input, if there
+were any, otherwise at the addressed line.
+Address \*(oq\c
+.B \*0\c
+\&\*(cq is legal for this command;
+text is placed at the beginning of the buffer.
+.PI
+(
+.B .
+)\c
+.B a
+.I text
+.br
+If a space immediately follows the
+.I append
+command,
+then the
+.I text
+immediately following the space is appended after
+the addressed line.
+.B .
+is left at the newly created line.
+This is essentially a quick method for entering one line.
+.PI
+(
+.B .
+,
+.B .
+)\c
+.BI a/ text\c
+.B /
+.br
+Append the text after the last character in the addressed lines.
+.PI
+.BI b nn
+.br
+The
+.I browse
+count is set to
+.I nn
+(decimal).
+This count is then used for subsequent
+.I "new-line"
+commands as the number of lines to be printed out.
+If
+.I nn
+is missing, the count is reset to 1.
+.sp 1
+In constructing addresses as described in rule 11 above,
+the browse count is added to or subtracted from
+the current address,
+instead of a constant of 1 for each
+.B +
+or
+.BR \(mi .
+Normally this has no effect since the default is 1.
+.PI
+(
+.B .
+,
+.B .
+)\c
+.B c
+.ti -.5i
+.I text
+.ti -.5i
+.B .
+.br
+The
+.I change
+command deletes the addressed lines, then accepts input
+text which replaces these lines.
+.B .
+is left at the last line input; if there were none,
+it is left at the first line not deleted.
+.PI
+(
+.B .
+,
+.B .
+)\c
+.BI c/ "regular expression\c"
+.BI / replacement\c
+.B /
+.ti -.5i
+(
+.B .
+,
+.B .
+)\c
+.BI c/ "regular expression\c"
+.BI / replacement\c
+.BI / nn
+.ti -.5i
+(
+.B .
+,
+.B .
+)\c
+.BI c/ "regular expression\c"
+.BI / replacement\c
+.B /g
+.br
+This form of the change command is identical to the
+.B s
+command below.
+.PI
+(
+.B .
+,
+.B .
+)\c
+.BI co a
+.br
+The
+.B co
+(copy) command is identical to the
+.B t
+(transfer)
+command below.
+.PI
+(
+.B .
+,
+.B .
+)\c
+.B d
+.br
+The
+.I delete
+command deletes the addressed lines from the buffer.
+The line originally after the last line
+deleted becomes the current line;
+if the lines deleted were originally at the end,
+the new last line becomes the current line.
+.PI
+.B d
+.I pathname
+.br
+The current directory is set to
+.I pathname
+by a call to
+.IR chdir (2).
+.PI
+.BI d= nn
+.br
+Sets
+.IR \*(ed 's
+idea of what the
+.I depth
+of the screen is, to
+.I nn
+(decimal)
+lines.
+This is used in calculating how many lines will
+fit on the screen with the
+.B :
+command, and may be preset with the
+.B \(mic
+flag
+(see above).
+.PI
+.B e
+.I filename
+.ti -.5i
+.B ei
+.I filename
+.br
+The
+.I edit
+command causes the entire contents of the buffer to be deleted,
+and then the named file to be read in.
+If no
+.I filename
+is given, the
+.I current
+file is used.
+.B .
+is set to the last line of the buffer.
+The number of lines read is printed.
+.I filename
+(if present) is remembered for
+possible use as a default file name in a subsequent
+.BR e ,
+.BR r ,
+or
+.B w
+command.
+If the
+.B i
+is present,
+.I \*(ed
+will read
+.I filename
+immediately
+(without double-checking first).
+.PI
+.BI e= c
+.br
+The
+.I end-of-line
+character is set to
+.IR c .
+Thereafter,
+any occurrences of
+.I c
+are treated as if they were an actual newline character.
+This facilitates entering several commands on the same
+physical line.
+.BR Caution :
+the
+.I eol
+character is also interpreted in
+.I insert
+mode.
+.PI
+.BI e nn
+.br
+Displays the
+.I long
+error message for error number
+.IR nn .
+.PI
+.B e+
+.ti -.5i
+.B e\(mi
+.br
+If a
+.B \(mi
+follows,
+issue error messages in the form
+.BI ? nn
+where
+.I nn
+is the error number of the error that occurred.
+This is mostly useful for slow terminals.
+A
+.B +
+returns to long error messages.
+(See the
+.B \(mik
+flag,
+and the
+.BI e nn
+command above.)
+.PI
+(
+.B .
+,
+.B .
+)\c
+.B exp
+.br
+Providing that a
+.I "tab character"
+has been set
+(see the
+.BI t= c
+command and the
+.B \(mit
+flag)
+as well as
+.I "tab stops"
+being set
+(see the
+.BI t, nn
+command),
+any instances of the
+.I "tab character"
+within the addressed lines which are to the left
+of a column which is marked as a
+.IR "tab stop" ,
+will be expanded with an appropriate
+number of
+.IR "fill characters" .
+(See the
+.BI f= c
+command).
+.PI
+.B f
+.I filename
+.br
+The
+.I filename
+command prints the currently remembered file name.
+If
+.I filename
+is given,
+the currently remembered file name is changed to
+.IB filename .
+.PI
+.BI f= c
+.br
+Set the
+.I fill
+character to
+.IR c .
+This is the character used to fill out a line where
+.I tab
+characters have been expanded.
+If
+.I c
+is missing,
+the
+.I fill
+character is reset to the default,
+which uses as many tabs as possible,
+followed by as many blanks as necessary to reach
+the desired column, resulting in the fewest possible
+characters to get to the desired position.
+.PI
+(
+.B 1
+,
+.B $
+)\c
+.BI g/ "regular expression\c"
+.BI / command-list
+.ti -.5i
+(
+.B 1
+,
+.B $
+)\c
+.BI g/ "regular expression\c"
+.BI /v command-list
+.br
+In the
+.I global
+command, the first step is to mark every line which matches
+the given
+.IR "regular expression" .
+If the optional
+.B v
+is present after the regular expression,
+each line potentially matching the regular expression will
+be printed, followed by the message \*(oq\c
+.B "Ok?\\ \c"
+\&\*(cq.
+If the response begins with
+.IR n ,
+the line will not
+be marked, any other response will cause the line to
+be marked.
+Then for every marked line, the
+given command list is executed with
+.B .
+initially set to that line.
+A single command or the first of multiple commands
+appears on the same line with the global command.
+All lines of a multi-line list except the last line 
+must be ended with
+.B \e\c
+\&.
+The
+.BR a ,
+.BR i ,
+and
+.B c
+commands and associated input are permitted;
+the
+.B .
+terminating input mode may be omitted if it would be on the
+last line of the command list.
+The (global) commands,
+.BR g ,
+and
+.BR v ,
+are not permitted in the command list.
+If an
+.I end-of-file
+(Ctrl-D)
+is typed in response to the prompt,
+no further lines will be scanned or marked,
+and all lines marked so far (if any) will have
+.I command-list
+applied to them.
+.PI
+.B h
+.ti -.5i
+.BI h nn
+.br
+Column numbers to column
+.I nn
+(default 71)
+are printed out.
+Any columns which have
+.I tab
+stops set will print out with
+.B \(mi
+character in the appropriate position.
+.PI
+.BR he [lp]
+.br
+List syntax of all
+.I \*(ed
+commands available.
+(Merely displays the contents of the file
+.B /etc/\*(ed.doc\c
+\&.)
+.PI
+(
+.B .
+)\c
+.B i
+.ti -.5i
+.I text
+.ti -.5i
+.B .
+.br
+This command inserts the given text before the addressed line.
+.B .
+is left at the last line input;
+if there were none,
+at the addressed line.
+This command differs from the
+.B a
+command only in the placement of the text.
+.PI
+(
+.B .
+)\c
+.B i
+.I text
+.br
+This form of the
+.I insert
+command inserts one line before the addressed line,
+consisting of the
+.I text
+following the space.
+(See the
+.B a
+command.)
+.PI
+(
+.B .
+,
+.B .
+)\c
+.BI i/ text\c
+.B /
+.br
+Insert the text before the first character in the addressed lines.
+.PI
+(
+.B .\(mi1
+,
+.B .
+)\c
+.B j
+.ti -.5i
+(
+.B .\(mi1
+,
+.B .
+)\c
+.BI j/ text\c
+.B /
+.br
+Join the addressed lines together to form one resulting line.
+This effectively removes the new-line from the
+ends of all but the last line.
+(Useful for rejoining lines that
+were split incorrectly by the
+.I s
+command.)
+.sp 1
+If a delimiter
+(and perhaps some
+.IR text )
+is present,
+then the
+.I text
+will be inserted between the text of the joined lines.
+.PI
+.B k
+.ti -.5i
+(
+.B .
+,
+.B .
+)\c
+.BI k x
+.br
+The mark command marks the addressed line(s) with name
+.IR x ,
+which must be a letter.
+Either of the address forms
+.BI \(aa x
+or
+.I X
+(capital letter)
+then address this/these line(s).
+If no character is specified after the command,
+all currently marked lines are listed.
+.PI
+(
+.B .
+,
+.B .
+)\c
+.B l
+.br
+The
+.I list
+command prints the addressed lines in an unambiguous way:
+non-graphic characters are printed as
+.IR ^X ,
+and long lines are folded.
+.I Tab
+characters show as
+\o'->'
+and
+.I backspace
+characters are displayed as
+\o'-<'.
+An
+.B l
+command may follow most others on the same line.
+.PI
+(
+.B .+1
+,
+.BI .+ nn
+)\c
+.B la
+.br
+One
+.I page
+of text is listed as in the
+.B l
+command above.
+The text is guaranteed not to scroll off the screen.
+.PI
+(
+.B 1
+,
+.B $
+)\c
+.B ll
+.br
+The entire contents of the edit buffer are listed as if \*(oq\c
+.B 1,$l\c
+\&\*(cq had been typed.
+.PI
+.B m
+.br
+The characters
+.B ^
+.B $
+.B .
+.B *
+.B [
+.B &
+.B \e(
+.B \e)
+and
+.B \e
+lose or regain their
+special meaning in patterns as well as in the substitute command.
+Each invocation of
+.B m
+toggles the \*(oq\c
+.I magic\c
+\&\*(cq characters on/off.
+.PI
+(
+.B .
+,
+.B .
+)\c
+.BI m a
+.ti -.5i
+(
+.B .
+,
+.B .
+)\c
+.BI mo a
+.br
+The
+.I move
+command repositions the addressed
+lines after the line addressed by
+.IR a .
+The last of the moved lines becomes the current line.
+.PI
+.B n
+.br
+Line numbering is toggled on or off.
+.PI
+.B n+
+.ti -.5i
+.B n\(mi
+.br
+Line numbering for the
+.B |
+(and other variants)
+command is turned on for a
+.BR + ,
+off for a
+.BR \(mi .
+.PI
+(
+.B .
+,
+.B .
+)\c
+.B p
+.br
+The
+.I print
+command prints the addressed lines.
+.B .
+is left at the last line printed.
+The
+.B p
+command may be placed on the same line after most commands.
+.PI
+(
+.B .+1
+,
+.BI .+ nn
+)\c
+.B pa
+.br
+One
+.I page
+of text is printed out.
+The text is guaranteed not to scroll off the screen.
+(See the
+.B :
+command below.)
+.PI
+(
+.B 1
+,
+.B $
+)\c
+.B pp
+.br
+The entire contents of the edit buffer are listed as if \*(oq\c
+.B 1,$p\c
+\&\*(cq had been typed.
+.PI
+.B q
+.ti -.5i
+.B qi
+.br
+The
+.I quit
+command causes
+.I \*(ed
+to exit.
+No automatic write of a file is done.
+If the edit file has been modified and the entire contents
+of the buffer have not been written to a file,
+a query will be issued to insure that the user
+has not forgotten to write his file.
+If the
+.B i
+is present, the editor will quit immediately
+(without double-checking first).
+Moreover,
+if the
+.B \(mif
+flag was selected,
+the file will
+.I not
+be (over)written.
+.PI
+(
+.B $
+)\c
+.B r
+.I filename
+.br
+The
+.I read
+command reads in the given file after the addressed line.
+If no file name is given,
+the remembered file name, if any, is used (see
+.I e
+and
+.I f
+commands).
+The remembered file name is not changed unless
+.I filename
+is the very first file name mentioned.
+Address \*(oq\c
+.B \*0\c
+\&\*(cq is legal for
+.I r
+and causes the file to be read at the beginning of the buffer.
+If the read is successful, the number of lines read is typed.
+.B .
+is left at the last line read from the file.
+.PI
+.B s
+.br
+The
+.I stop
+command without any parameters performs an automatic write
+(\c
+.BR w )
+if the file has been modified and then exits the editor.
+.PI
+(
+.B .
+,
+.B .
+)\c
+.BI s/ "regular expression\c"
+.BI / replacement\c
+.B /
+.ti -.5i
+(
+.B .
+,
+.B .
+)\c
+.BI s/ "regular expression\c"
+.BI / replacement\c
+.BI / nn
+.ti -.5i
+(
+.B .
+,
+.B .
+)\c
+.BI s/ "regular expression\c"
+.BI / replacement\c
+.B /g
+.br
+The
+.I substitute
+command searches each addressed
+line for an occurrence of the specified regular expression.
+On each line in which a match is found,
+one of the folowing actions are taken for each of the three
+forms of the command:
+.IP 1. +.5i
+The first occurrence of the specified expression
+is replaced by the replacement text.
+.IP 2. +0i
+The
+.IR nn -th
+(where
+.I nn
+is a decimal number)
+occurrence of the specified expression
+is replaced by the replacement text.
+.IP 3. +0i
+All occurrences of the specified expression
+are replaced.
+.in -.5i
+.sp 1
+It is an error for the substitution to fail on all addressed lines.
+Any character other than
+.I newline
+may be used instead of
+.B /
+to delimit the regular expression
+and the replacement.
+.B .
+is left at the last line substituted.
+.sp 1
+An ampersand
+.B &
+appearing in the replacement
+is replaced by the string matching the regular expression.
+As a more general feature, the characters
+.B \e\c
+.I n\c
+,
+where
+.I n
+is a digit,
+are replaced by the text matched by the
+.IR n -th
+regular subexpression enclosed between
+.B \e(
+and
+.B \e)\c
+\&.
+When nested, parenthesized subexpressions are present,
+.I n
+is determined by counting occurrences of
+.B \e(
+starting from the left.
+.sp 1
+Lines may be split by substituting
+.I newline
+characters into them.
+The newline in the
+.I replacement
+must be escaped by preceding it with a
+.B \e\c
+\&.
+.TP -.5i
+.ti -.5i
+.BI sa nn
+.br
+The
+.I save-count
+command changes the default
+(\n(sa) count of text-changing
+commands which may be executed before
+an automatic buffer save will be done.
+(\c
+.I nn
+is a decimal number.)
+The save file name is the current filename with a
+.BI . \*(ex
+extension.
+A count of zero (\*0) will disable the auto-save feature.
+.PI
+.B t
+.br
+All tab stops currently in effect, as set by the
+.BI t, nn
+command,
+are listed.
+.PI
+(
+.B .
+,
+.B .
+)\c
+.BI t a
+.br
+A copy of the addressed lines is
+.I transferred
+after address
+.I a
+(which may be \*0).
+.B .
+is left at the last line of the copy.
+.PI
+.BI t= c
+.br
+Set
+.I tab
+character to
+.IR c .
+All occurrences of this character entered by the
+.B a
+or
+.B i
+commands will be expanded to the appropriate number of
+.I fill
+characters to get to the next column with a
+.IR "tab stop" .
+Any occurrences of the
+.I tab
+character after the last tab column will be untouched.
+.PI
+.BI t, nn\c
+.RI , nn\c
+,...
+.br
+Set
+.I "tab stops"
+in specified (decimal) columns.
+Numbers preceded by a
+.B \(mi
+will clear the tab
+setting at that position.
+The number zero clears
+.I all
+tab settings.
+.PI
+.B u
+.br
+The
+.I undo
+command will restore the last modified line
+to its original condition.
+This is different from the
+.B x
+(\c
+.IR undelete )
+command, which recovers blocks of
+.I deleted
+lines, whereas
+.B u
+will restore only
+.I one
+line, when modified by a
+.I substitution
+or
+.I tab
+expansion.
+.I Undo
+will
+.I not
+recover from a
+.I join
+command, nor
+from any deletion, which is processed by the
+.I undelete
+command.
+.PI
+(
+.B 1
+,
+.B $
+)\c
+.BI v/ "regular expression\c"
+.BI / command-list
+.ti -.5i
+(
+.B 1
+,
+.B $
+)\c
+.BI v/ "regular expression\c"
+.BI /v command-list
+.br
+This command is the same as the
+.I global
+command except that the command list is executed
+with
+.B .
+initially set to every line
+.B except
+those matching the regular expression.
+.PI
+(
+.B 1
+,
+.B $
+)\c
+.B w
+.I filename
+.ti -.5i
+(
+.B 1
+,
+.B $
+)\c
+.BI w> filename
+.ti -.5i
+(
+.B 1
+,
+.B $
+)\c
+.B wi
+.I filename
+.br
+The
+.I write
+command writes the addressed lines onto
+the given file.
+If the file does not exist,
+it is created
+(see
+.IR umask (2)).
+The remembered file name is not changed unless
+.I filename
+is the very first file name mentioned.
+If no file name is given,
+the remembered file name, if any, is used
+(see
+.B e
+and
+.B f
+commands).
+.B .
+is unchanged.
+If the
+.B >
+is present, the addressed lines
+will be appended onto the end of the file.
+If the
+.B wi
+form is used,
+and the file is write-locked,
+then
+.I \*(ed
+will attempt to over-ride the file permission, if possible.
+.PI
+.BI w= nn
+.br
+Sets
+.IR \*(ed 's
+idea of how wide the screen is to
+.I nn
+columns.
+This is used in calculating how many lines will
+fit on the screen with a
+.B :
+command, and may be preset with the
+.B \(miw
+flag
+(see above).
+.PI
+(
+.B .
+)\c
+.B x
+.br
+.I Undelete
+is used to recover the most recently deleted
+(or replaced)
+block of lines.
+.B .
+is left at the last recovered line.
+.IP
+.nf
+Example:
+       25,34d          delete the lines
+       *               see the damage
+       24x             recovers the lost lines
+.fi
+.PI
+(
+.B .
+)\c
+.B y+
+.ti -.5i
+.B y
+.ti -.5i
+.B y\(mi
+.br
+This command changes the processing of an interrupt
+received from the terminal.
+If the
+.B \(mi
+is present, normal processing takes place.
+That is, the message
+\*(oqINTERRUPT!\*(cq
+will be displayed on the terminal and
+.I \*(ed
+will prompt for another command.
+If the
+.B +
+is present, the addressed line is set as
+the initial address for the
+.B :
+command, which will automatically be
+invoked upon each interrupt.
+Lastly, if no character follows,
+then upon each interrupt, one
+.I page
+will be displayed from
+.B .
+onward, which is useful for paging through
+sections of text.
+.PI
+.B @
+.I filename
+.ti -.5i
+.B @p
+.I filename
+.br
+.I \*(Ed
+opens the specified file,
+and reads command lines from it.
+The commands are echoed to the terminal
+(if the
+.B p
+is present)
+as each character is processed.
+This allows monitoring the command file as
+it is running, so that erroneous command line(s)
+will appear before their respective
+error messages.
+If no filename is given,
+the last
+.IR indirect ed
+filename,
+if any,
+will be used.
+.PI
+.BI ! UNIX-command
+.br
+The remainder of the line after the
+.B !
+is sent to the
+.I shell
+(see
+.BR SH (1))
+to be interpreted as a
+.I UNIX
+command.
+.B .
+is unchanged.
+.PI
+(
+.B .
+)\c
+.BI | UNIX-command
+.br
+The addressed lines are
+.I piped
+as the standard input
+to the command(s) following the
+.B |
+symbol.
+The
+.I UNIX
+command is passed to the
+.I shell
+(as in
+.B !
+above)
+to be processed.
+Line numbers will not precede the lines of text sent to
+the command(s) unless explicitly enabled via the
+.B n+
+command (see above).
+.PI
+.B |+
+.ti -.5i
+.B |\(mi
+.br
+Turn on (or off, respectively) strict checking of the exit status of
+.I UNIX
+commands executed via the
+.B |\\||
+command.
+If checking is enabled, no processing will be done on the text
+returned by a command which has a non-zero exit status
+(thereby implying an error occurred).
+This reduces the chance of erroneous command processing
+causing loss of lines.
+Lines deleted by the
+.B |\\||
+command may be recovered with
+.B x
+(undelete).
+.PI
+(
+.B .
+)\c
+.BI |\\|| UNIX-command
+.br
+This variant of the
+.I pipe
+command
+(commonly referred to as the \*(oq\c
+.I double-pipe\c
+\&\*(cq command)
+performs similarly to the
+.B |
+command above, but replaces the lines sent to the command(s)
+with those received from the command(s) on the standard output
+of the command(s).
+If the error status from the command(s) is not that of a
+.IR "normal exit" ,
+no change will be made in the text.
+Similarly,
+(by default)
+if the exit status of the command(s) is non-zero
+(possibly indicating an error)
+no changes will be made.
+This is due to the existence of many older programs which
+do not terminate with a meaningful exit status.
+The strict exit status checking may be disabled via the
+.B |\(mi
+command below.
+An optional
+.I "line number"
+(\c
+.B not
+address)
+may immediately follow the
+.B |\\||
+which will specify the line after which the returned
+lines are to be placed.
+.PI
+.BI |< UNIX-command
+.br
+Lines generated by the
+.I UNIX
+command(s) are inserted after
+.BR . .
+An optional
+.I "line number"
+(\c
+.B not
+address)
+may immediately follow the
+.B <
+which will specify the line after which the returned
+lines are to be placed.
+.PI
+(
+.B .
+)\c
+.BI |> UNIX-command
+.br
+The only difference between this command and the
+.B |\\||
+command above is this variant
+.I inserts
+the generated text
+.I after
+the lines sent, instead of
+.I replacing
+the original lines.
+An optional
+.I "line number"
+(\c
+.B not
+address)
+may immediately follow the
+.B >
+which will specify the line after which the returned
+lines are to be placed.
+.PI
+(
+.B .+1
+,
+.BI .+ nn
+)\c
+.B :
+.ti -.5i
+(
+.BI .- nn
+,
+.B .
+)\c
+.B :-
+.ti -.5i
+(
+.BI .- nn
+,
+.BI .+ nn
+)\c
+.B *
+.br
+One
+.I page
+of text is printed out.
+The text is guaranteed not to scroll off the screen.
+The first form (just the
+.B :
+alone) will start at the addressed line,
+the line following
+.B .
+is the default,
+and print one screenful, or
+.I page
+of text.
+.B .
+is set to the last line displayed.
+The second form,
+.BR :- ,
+displays one screenful, leaving
+.B .
+as the last line displayed, and remaining as the current line.
+The last form,
+.BR * ,
+displays one screenful, with
+.B .
+centered in the
+.IR page .
+.PI
+(
+.B .+1
+,
+.BI .+ nn
+)\c
+.I (newline)
+.br
+An address alone on a line causes the addressed line to be printed.
+A blank line alone is equivalent to \*(oq\c
+.BI .+1,.+ nn\c
+.B p\c
+\&\*(cq;
+it is useful for stepping through text.
+The
+.I nn
+is the count specified with the
+.B b
+command
+(default 1).
+.PP
+If an interrupt signal (ASCII
+.BR DEL )
+is received,
+.I \*(ed
+prints
+\*(oqINTERRUPT!\*(cq
+and returns to its command level.
+(See also the
+.I y
+command for alternate interrupt processing.)
+.SH "Some size limitations"
+.br
+512 characters per line,
+(see the
+.B \(miB
+flag above)
+.br
+256 characters per global command list,
+.br
+64 characters per file name,
+.br
+128K characters in the temporary file
+(PDP-11 version only)
+.br
+(256K characters with
+.B \(mih
+flag)
+.br
+(No limit on the Vax version)
+.br
+The limit on the number of lines depends on the amount of core:
+.ti +.5i
+each line takes 1 word.
+.br
+(The current absolute maximum on the PDP-11's is 24,062 lines.)
+.SH FILES
+.TP
+/tmp/e?????
+temporary; ????? is process number (in decimal).
+.TP
+/tmp/ep?????
+temporary for
+.B |\\||
+stuff.
+.TP
+*.hup
+if
+.I hangup
+signal is received.
+.TP
+*.bak
+if
+.B \(mib
+flag is specified.
+.TP
+*.int
+if
+.B \(mii
+flag is specified and an
+.I interrupt
+is received.
+.TP
+*.\*(ex
+auto-save (every \n(sa commands).
+.TP
+*.trm
+if
+.I termination
+signal is received.
+.TP
+/etc/\*(ed.doc
+for the
+.BR he lp
+command.
+.SH DIAGNOSTICS
+Each command has self-explanatory
+error messages.
+.SH "SEE ALSO"
+ed(1), edit(1), eed(1), ex(1), umask(2), vi(1)
+.br
+A Tutorial Introduction to the
+.B ED
+Text Editor \(mi B. W. Kernighan
+.SH BUGS
+A
+.B \e
+followed by a
+.IR newline ,
+useful for splitting lines
+with the substitute command, may not be passed through
+the global command.
+
+If line(s) are deleted which include the endpoints of
+a range marked with the
+.B k
+command,
+that mark-name character will
+not work correctly.