
NAME
xed - experimental text editor - V2.71

SYNOPSIS
xed [ -abefingst ] [ name ]

DESCRIPTION
XED is the experimental text editor.

If a "name" argument is given, XED simulates an "e" command  (see
below)  on  the named file; that is to say, the file is read into
XED's buffer so that it can be edited.

The optional flags after the "-" have the following functions:

     -a
          The line numbers will be printed in  "apl"  mode.   The
          form is " [n]\t" followed by the text.

     -b
          Make a "backup" copy of the edit file upon entry to the
          editor.   The  file's name will be that of the original
          file with a ".bak" extension.

     -e
          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.

     -f
          The editor will automatically  prompt  for  text  lines
          upon  being invoked.  This is useful for creating files
          without having to type  the  "a"  command  upon  entry.
          Note:  If  this flag is selected, the editor will over-
          write an existing file by the same name.

     -i
          If an "interrupt" (ASCII DEL) character is  typed,  the
          editor  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 ".dmp" extension.
          The "-i" 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  com-
          mands.

     -n
          The "no-line-numbers" flag is set.  This results in the
          omission of line number prompts as well as line numbers
          on text lists.

     -q
          The editor will not ignore a quit (ASCII FS or ctrl-\).

     -s
          "Silent" mode.  No prompts are issued.   This  mode  is
          useful for running editor command files.

     -t
          "Trace" mode is selected.  All get and  put  operations
          on the edit buffer are listed.

XED operates on a copy of any file it is editing; changes made in
the  copy  have no effect on the file until a "w" (write) command
is given.  The copy of the text being edited resides  in  a  tem-
porary file called the buffer.  There is only one buffer.

Commands to XED have a simple and regular structure: zero or more
addresses  followed  by a single character command, possibly fol-
lowed by parameters to the command.  These addresses specify  one
or  more  lines  in the buffer.  Every command which requires ad-
dresses has default addresses, so that the addresses can often be
omitted.

In general, only one command may appear on a line.  Certain  com-
mands  allow  the  input of text.  This text is placed in the ap-
propriate place in the buffer.  While XED is accepting  text,  it
is  said  to  be  in  "input mode." In this mode, no commands are
recognized; all input is merely collected.  Input mode is left by
typing a period "." alone at the beginning of a line.

XED supports a limited form of "regular expression" notation.   A
regular  expression  specifies a set of strings of characters.  A
member of this set of strings is said to be "matched" by the reg-
ular expression.  The regular expressions allowed by XED are con-
structed as follows:

     1. An ordinary character (not one of those discussed  below)
        is a regular expression and matches that character.

     2. A circumflex "^" at the beginning of a regular expression
        matches the empty string at the beginning of a line.

     3. A currency symbol "$" at the end of a regular  expression
        matches the null character at the end of a line.

     4. A period "." matches  any  character  except  a  new-line
        character.

     5. A regular expression followed by an asterisk "*"  matches
        any  number  of  adjacent occurrences (including zero) of
        the regular expression it follows.

     6. A string of characters enclosed in square brackets "[  ]"
        matches  any  character in the string but no others.  If,
        however, the first character of the string is  a  circum-
        flex "^" the regular expression matches any character ex-
        cept new-line and the characters in the string.

     7. The concatenation of regular expressions is a regular ex-
        pression  which  matches the concatenation of the strings
        matched by the components of the regular expression.

     8. A regular expression enclosed between the sequences  "\("
        and  "\)"is  identical  to  the unadorned expression; the
        construction has side effects  discussed  under  the  "s"
        command.

     9. The null regular expression standing alone is  equivalent
        to the last regular expression encountered.

Regular expressions are used in addresses to specify lines and in
one  command (see "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 charac-
ter may be preceded by "\".  This also applies to  the  character
bounding the regular expression (often "/") and to "\" itself.

To understand addressing in XED it is necessary to know  that  at
any  time  there  is  a  "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 descrip-
tion of the command.  Addresses are constructed as follows.

        1. The character "." addresses the current line.

        2. The character "$"  addresses  the  last  line  of  the
           buffer.

        3. A decimal number "n" addresses the "n"-th line of  the
           buffer.

        4. "'x" addresses the line  marked  with  the  mark  name
           character  "x",  which  must  be  a lower-case letter.
           Lines are marked with the "k" command described below.

           Note: the form "'x" may now be replaced by the  upper-
           case  version of the lower-case letter without the "'"
           character.  In this form, the expression "'x+/str/" is
           equivalent to: "X+/str/".

        5. A regular expression enclosed in slashes "/" 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.

        6. A regular expression enclosed in queries "?" addresses
           the first line found by searching toward the beginning
           of the buffer and stopping at the first line  contain-
           ing  a  string  matching  the  regular expression.  If
           necessary the search wraps around to the  end  of  the
           buffer.

        7. An address followed by a plus sign "+" or a minus sign
           "-"  followed  by  a decimal number specifies that ad-
           dress plus  (resp.  minus)  the  indicated  number  of
           lines.  The plus sign may be omitted.

        8. If an address begins with "+" or "-" the  addition  or
           subtraction is taken with respect to the current line;
           e.g. "-5" is understood to mean ".-5".

        9. If an address ends with "+" or "-", then  1  is  added
           (resp. subtracted).  As a consequence of this rule and
           rule 8, the address "-" refers to the line before  the
           current  line.  Moreover, trailing "+" and "-" charac-
           ters have cumulative effect, so  "--"  refers  to  the
           current line less 2.

        10. To maintain compatibility with earlier version of the
           editor,  the  character  "^"  in addresses is entirely
           equivalent to "-".

Commands may require zero, one, or two addresses.  Commands which
require  no addresses regard the presence of an address as an er-
ror.  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  (depend-
ing on what is accepted) are used.

Addresses are separated from each other typically by a comma  ","
They  may also be separated by a semicolon ";".  In this case the
current line "." is set to the previous address before  the  next
address  is  interpreted.   This feature can be used to determine
the starting line for forward and backward searches  ("/",  "?").
The second address of any two-address sequence must correspond to
a line following the line corresponding to the first address.

In the following list of XED commands, the default addresses  are
shown  in  parentheses.   The parentheses are not part of the ad-
dress, but are used to show that the given addresses are the  de-
fault.

As mentioned, it is generally illegal for more than  one  command
to appear on a line.  However, any command may be suffixed by "p"
or by "l", in which case the current line is  either  printed  or
listed respectively in the way discussed below.

     ( . )a <text>    or,
     ( . )a
     <text>
     .
          The append command reads the given text and appends  it
          after the addressed line.  "." is left on the last line
          input, if there were any, otherwise  at  the  addressed
          line.   Address  "0" is legal for this command; text is
          placed at the beginning of the buffer.

     b n
          The "browse" count is  set  to  "n"  (where  "n"  is  a
          number).   This count is then used for subsequent "new-
          line" commands as the number of  lines  to  be  printed
          out.

          If "n" is missing, the count is reset to 1.

     ( . , . )c/regular expression/replacement/         or,
     ( . , . )c/regular expression/replacement/g
          This form of the change command is identical to the "s"
          command below.

     ( . , . )co a
          The "co" (copy) command is identical to the "t" command
          below.

     ( . , . )c
     <text>
     .
          The change command deletes the  addressed  lines,  then
          accepts  input text which replaces these lines.  "." is
          left at the last line input; if there were none, it  is
          left at the first line not deleted.

     ( . , . ) d
          The delete command deletes the addressed lines from the
          buffer.  The line originally after the last line delet-
          ed becomes the current line; if the lines deleted  were
          originally  at  the  end, the new last line becomes the
          current line.

     e filename
          The edit command causes  the  entire  contents  of  the
          buffer  to  be  deleted,  and then the named file to be
          read in.  If no filename is given, the  "current"  file
          is  used.   "."  is set to the last line of the buffer.
          The number of lines  read  is  typed.   "filename"  (if
          present)  is  remembered  for possible use as a default
          file name in a subsequent "e", "r", or "w" command.

     f filename
          The filename command prints  the  currently  remembered
          file  name.   If  "filename"  is  given,  the currently
          remembered file name is changed to "filename".

     (1,$)g/regular expression/command list
          In the global command, the first step is to mark  every
          line  which matches the given regular expression.  Then
          for every such line, the given command list is executed
          with  "." 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  "\".
          "A",  "i",  and  "c"  commands and associated input are
          permitted; the "." terminating input mode may be  omit-
          ted  if  it  would  be  on the last line of the command
          list.  The (global) commands, "g",  and  "v",  are  not
          permitted in the command list.

     h        or,
     hcc
          Column numbers to column "cc" (default = 71) are print-
          ed out.

     he[lp]
          Print out recent documentation changes.

     ( . )i <text>    or,
     ( . )i
     <text>
     .
          This command inserts the  given  text  before  the  ad-
          dressed  line.   "." is left at the last line input; if
          there were none, at the addressed line.   This  command
          differs  from  the "a" command only in the placement of
          the text.

     ( . )kx
          The mark command marks the  addressed  line  with  name
          "x",  which  must  be a lower-case letter.  The address
          form "'x" then addresses this line.

     ( . , . )l
          The list command prints the addressed lines in an unam-
          biguous  way: non-graphic characters are printed in oc-
          tal, and long lines are folded.   An  "l"  command  may
          follow any other on the same line.

     ( . , . )m a
          The move command repositions the addressed lines  after
          the  line  addressed by a.  The last of the moved lines
          becomes the current line.

     ( . , . )p
          The print command prints the addressed lines.   "."  is
          left  at the last line printed.  The "p" command may be
          placed on the same line after any command.

     q         or,
     qi
          The quit command causes  XED  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 prompt will be issued to be
          sure that the user has not forgotten to write his file.

          If the "i" is present, the editor will quit immediately
          (without double-checking first).

     ( $ )r filename
          The read command reads in the given file after the  ad-
          dressed line.  If no file name is given, the remembered
          file name, if any, is used (see "e" and "f"  commands).
          The   remembered   file  name  is  not  changed  unless
          "filename" is the very first file name mentioned.   Ad-
          dress  "0"  is  legal for "r" and causes the file to be
          read at the beginning of the buffer.  If  the  read  is
          successful,  the  number  of  characters read is typed.
          "." is left at the last line read in from the file.

     s
          The "s" command without any other parameters is identi-
          cal to the "q" command.

     ( . , . )s/regular expression/replacement/         or,
     ( . , . )s/regular expression/replacement/nn       or,
     ( . , . )s/regular expression/replacement/g
          The 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  folow-
          ing  actions  are  taken for each of the three forms of
          the command:

          1.   The first occurrence of the  specified  expression
          is replaced by the replacement text.

          2.   The "nn"-th (where nn is  a  decimal  number)  oc-
          currence of the specified expression is replaced by the
          replacement text.

          3.   All occurrences of the  specified  expression  are
          replaced.   It is an error for the substitution to fail
          on all addressed lines.  Any character other than  new-
          line  may be used instead of "/" to delimit the regular
          expression and the replacement.  "."  is  left  at  the
          last line substituted.

          An ampersand "&" appearing in the  replacement  is  re-
          placed  by  the string matching the regular expression.
          The special meaning of  "&"  in  this  context  may  be
          suppressed  by  preceding it by "\".  As a more general
          feature, the characters "\n", where "n" is a digit, are
          replaced  by the text matched by the "n"-th regular su-
          bexpression enclosed between "\(" and "\)".  When nest-
          ed,  parenthesized  subexpressions  are present, "n" is
          determined by counting  occurrences  of  "\("  starting
          from the left.

          Lines may be split by substituting new-line  characters
          into them.  The new-line in the replacement string must
          be escaped by preceding it by "\".

     ( . , . )t a
          This command acts just like  the  "m"  command,  except
          that  a copy of the addressed lines is placed after ad-
          dress "a" (which may be 0).  "." is left  at  the  last
          line of the copy.

     u filename  or, up filename
          The editor opens the specified file, and reads  command
          lines from it.  The commands are echoed to the terminal
          (if the "p" is present) as each character is processed.
          This  allows  monitoring the command file as it is run-
          ning, so that erroneous command line(s) will appear be-
          fore their respective error messages.

     v
          The "verify" flag is toggled.  This  flag  is  used  to
          determine  whether  a line is printed after a substitu-
          tion is made without  the  trailing  delimiter  on  the
          string.   Normally,  if the trailing delimiter is omit-
          ted, the line will be printed after the change is made.
          If the verify flag is off, the line will not be printed
          unless the delimiter character is present and a "p" (or
          "l") is present at the end of the command line.

     (1,$)v/regular expression/command list
          This command is the same as the global  command  except
          that  the  command  list is executed with "." initially
          set to every line except those matching the regular ex-
          pression.

     (1,$)w filename
          The write command writes the addressed lines  onto  the
          given  file.  If the file does not exist, it is created
          mode 0604.  The remembered file name is not changed un-
          less  "filename" is the very first file name mentioned.
          If no file name is given, the remembered file name,  if
          any,  is  used  (see "e" and "f" commands).  "." is un-
          changed.

     ( . )x "Undelete" is  used  to  recover  the  most  recently
          deleted  (or  replaced) block of lines.  "." is left at
          the last recovered line.

          Example:
               25,34d  delete the lines
               -10,+10p  see the damage
               24x  recovers the lost lines

     =<command>
          The <command> is invoked with  the  previous  command's
          address bounds.

     !UNIX command
          The remainder of the line after the "!" is sent to UNIX
          to be interpreted as a command.  "." is unchanged.

     ( .+nn )<newline>
          An address alone on a line causes the addressed line to
          be  printed.   A  blank  line  alone  is  equivalent to
          ".+nnp"; it is useful for stepping through  text.   The
          "nn" is the count specified with the "b" command.

If an interrupt signal (ASCII DEL) is sent,  XED  prints  "INTER-
RUPT!" and returns to its command level.

Some size limitations: 512 characters per  line,  256  characters
per  global  command  list, 64 characters per file name, and 128K
characters in the temporary file.  The limit  on  the  number  of
lines depends on the amount of core: each line takes 1 word.

FILES
/tmp/e?????, temporary; "?????" is the process number (in octal).





DIAGNOSTICS
Each command has self-explanatory error messages.

SEE ALSO
A Tutorial Introduction to the ED Text Editor (B. W. Kernighan)

BUGS
The "k" command doesn't mark line 1 properly.


























































