Annotation of researchv10dc/man/manb/qed.1, revision 1.1

1.1     ! root        1: .TH "QED" 1 
        !             2: .      \" /*% nroff -man %
        !             3: .if t .ds q \(aa
        !             4: .if n .ds q '
        !             5: .SH NAME
        !             6: qed \- multi-file text editor
        !             7: .SH SYNOPSIS
        !             8: .B qed
        !             9: [
        !            10: .B \-
        !            11: ] [
        !            12: .B \-i
        !            13: ] [
        !            14: .B \-q
        !            15: ] [
        !            16: .B \-e
        !            17: ] [
        !            18: .B \-x
        !            19: startupfile
        !            20: ] [ filename1 filename2 ... ]
        !            21: .SH DESCRIPTION
        !            22: \fIQed\fP
        !            23: is a multiple-file programmable text editor based on
        !            24: .IR ed .
        !            25: .PP
        !            26: .I Qed
        !            27: operates on a copy of any file it is editing; changes made
        !            28: in the copy have no effect on the file until a \fIw\fR
        !            29: or \fIW\fR (write)
        !            30: command is given.
        !            31: The copy of the text being edited resides
        !            32: in a scratch area called a
        !            33: .I buffer.
        !            34: There are 56 buffers, labeled by alphabetics `a' to `z' and `A' to `Z',
        !            35: and the characters `{', `|', `}' and `~'
        !            36: (the four ASCII characters following `z').
        !            37: These 56 characters are called, for notational efficiency,
        !            38: .I bnames.
        !            39: The buffers can contain any ASCII character except NUL.
        !            40: .PP
        !            41: If
        !            42: .I file
        !            43: arguments are given,
        !            44: .I qed
        !            45: simulates an
        !            46: .I r
        !            47: command (see below) on each of the named files; that is to say,
        !            48: the files are read into
        !            49: .I qed's
        !            50: buffers so that they can be edited.
        !            51: The first is read into buffer `a', the second into buffer `b',
        !            52: through `z',
        !            53: then from `A' to `Z',
        !            54: up to a maximum of 52 files.
        !            55: The optional
        !            56: .B \-
        !            57: puts
        !            58: .I qed
        !            59: in non-\c
        !            60: .I verbose
        !            61: mode (described with the
        !            62: .I o
        !            63: command).
        !            64: The
        !            65: \fB\-q\fR, \fB\-e\fR
        !            66: and
        !            67: .B \-i
        !            68: are equivalent to performing an initial
        !            69: `oqs', `oes' or `ois' command (see the
        !            70: .I o
        !            71: command below).
        !            72: .PP
        !            73: When \fIqed\fP starts up,
        !            74: the file named by the environment variable
        !            75: .B QEDFILE
        !            76: is read into
        !            77: buffer `~' and executed
        !            78: (i.e. read as command input), before
        !            79: reading in files and accepting commands from the terminal.
        !            80: The argument
        !            81: .I filename\c
        !            82: s are set in the buffers before the startup file is executed,
        !            83: so the startup file can treat the \fIfilenames\fR as arguments.
        !            84: The default startup file may be overridden with the \fB\-x\fR option.
        !            85: .PP
        !            86: Input to
        !            87: .I qed
        !            88: can be redirected, at any time,
        !            89: to come from storage such as a buffer
        !            90: by use of a
        !            91: .I special
        !            92: .I character
        !            93: such as ``\eb''.
        !            94: All the
        !            95: .I qed special character
        !            96: sequences are discussed in detail below;
        !            97: they all begin with a
        !            98: backslash `\\'.
        !            99: .PP
        !           100: .I Qed
        !           101: has a 
        !           102: .I truth flag
        !           103: which is set according to the success of certain commands
        !           104: and which can be tested for conditional execution, and a
        !           105: .I count
        !           106: which is set to such values as the number of successful substitutions
        !           107: performed in an
        !           108: .I s
        !           109: command.
        !           110: Each buffer has associated with it a
        !           111: (possibly null) filename and a
        !           112: .I changed
        !           113: flag, which is
        !           114: set if the contents of the buffer are known to differ
        !           115: from the contents of the named file in that buffer.
        !           116: .PP
        !           117: Commands to
        !           118: .I qed
        !           119: have a simple and regular structure: zero or
        !           120: more
        !           121: .I addresses
        !           122: followed by a single character
        !           123: \fIcommand\fP,
        !           124: possibly
        !           125: followed by parameters to the command.
        !           126: These addresses specify one or more lines in the buffer.
        !           127: Every command which requires addresses has default addresses,
        !           128: so that the addresses can often be omitted.
        !           129: .PP
        !           130: In general, any number of commands can appear on a line.
        !           131: Some commands require that the character following
        !           132: the command be a separator, such as blank, tab or newline.
        !           133: Usually, a
        !           134: .I display
        !           135: .IR character ,
        !           136: .IR p ,
        !           137: .IR P ,
        !           138: .IR l ,
        !           139: or
        !           140: .I L
        !           141: may precede the separator,
        !           142: causing the resulting line to be displayed in the specified format
        !           143: after the command.
        !           144: Certain commands allow the input of text for placement in the buffer.
        !           145: This text can be supplied in two forms:
        !           146: either
        !           147: on the same line, after the command,
        !           148: or on lines following the command,
        !           149: terminated by a line containing only a period `\fB.\fP'.
        !           150: If the text is on the command line,
        !           151: it is separated from the command by a space or a tab.
        !           152: If the tab is used, it is considered part of the text.
        !           153: .PP
        !           154: .I Qed
        !           155: supports a limited form of
        !           156: \fIregular\fP \fIexpression\fP
        !           157: notation.
        !           158: A regular expression specifies
        !           159: a set of strings of characters.
        !           160: A member of this set of strings is said to be
        !           161: .I matched
        !           162: by the regular expression.
        !           163: Regular expressions in
        !           164: .I qed
        !           165: are delimited by enclosing them in a pair of identical characters,
        !           166: frequently slashes `/'.
        !           167: In the following specification for regular expressions the word `character'
        !           168: means any character but newline.
        !           169: Note that special character interpretation always occurs
        !           170: .I before
        !           171: executing a command.
        !           172: Thus, the backslashes mentioned below are those present
        !           173: after special characters have been interpreted.
        !           174: .IP 1.
        !           175: Any character except a metacharacter matches itself.
        !           176: Metacharacters are the regular expression delimiter plus
        !           177: < [ \fB.\fP and \e | > ^ * \+ $
        !           178: when another rule gives them a meaning.
        !           179: .IP 2.
        !           180: A \fB.\fP matches any character.
        !           181: .IP 3.
        !           182: A backslash \\ followed by
        !           183: any metacharacter in the list given in rule 1
        !           184: is a regular expression and matches that character.
        !           185: A backslash followed by one of
        !           186: ! _ { } (  )
        !           187: or a non-zero digit
        !           188: has a special meaning discussed below;
        !           189: otherwise, backslashes have literal meaning in regular expressions.
        !           190: .IP 4.
        !           191: The metacharacter \e\|! matches any control character
        !           192: except tab or newline.
        !           193: .IP 5.
        !           194: A non-empty string
        !           195: .I s
        !           196: enclosed in square brackets
        !           197: [\fIs\fP] (or [^\fIs\fP]) matches any character in (or not in) \fIs\fP.
        !           198: In
        !           199: .IR s ,
        !           200: \\ has no special meaning, and ] may only appear as the first character.
        !           201: A substring
        !           202: .IR a \- b ,
        !           203: with
        !           204: .I a
        !           205: and
        !           206: .I b
        !           207: in ascending ASCII order, stands for the inclusive range of ASCII characters.
        !           208: .IP 6.
        !           209: A regular expression,
        !           210: of the form <\fIx1\fP> or <\fIx1\fR|\|\fIx2\fR|\|...|\|\fIxn\fR>,
        !           211: where the \fIx\fR's are regular expressions of form 1-12, matches what
        !           212: the leftmost successful \fIx\fR
        !           213: matches.
        !           214: .IP 7.
        !           215: A backslash followed by a non-zero digit
        !           216: .I n
        !           217: matches a copy of the string that the bracketed regular expression
        !           218: (see rule 11)
        !           219: beginning with the \fIn\fPth \e\|( matched.
        !           220: .IP 8.
        !           221: A regular expression of form 1-7 followed by * (\+)
        !           222: matches a sequence of zero (one) or more matches of the regular expression.
        !           223: .IP 9.
        !           224: The metacharacter \\\|_ matches a non-empty
        !           225: maximal-length sequence of blanks and tabs.
        !           226: .IP 10.
        !           227: The metacharacter \\\|{ (\\\|}) matches the empty string at the beginning
        !           228: (end) of an identifier.  An identifier is defined to be
        !           229: an underscore _ or alphabetic followed by zero or more
        !           230: underscores, alphabetics or digits.
        !           231: .IP 11.
        !           232: A regular expression,
        !           233: .IR x ,
        !           234: of form 1-12, bracketed \e\|(\|\fIx\fP\|\e\|) matches what
        !           235: .I x
        !           236: matches.
        !           237: The nesting of these brackets in each regular expression of an
        !           238: alternation (rule 6) must be identical.
        !           239: An alternation with these brackets may not be iterated (rule 8).
        !           240: .IP 12.
        !           241: A regular expression of form 1-12,
        !           242: .IR x ,
        !           243: followed by a regular expression of form 1-11,
        !           244: .IR y ,
        !           245: matches a match for
        !           246: .I x
        !           247: followed by a match for
        !           248: .IR y ,
        !           249: with the
        !           250: .I x
        !           251: match being as long as possible while still permitting a
        !           252: .I y
        !           253: match.
        !           254: .IP 13.
        !           255: A regular expression of form 1-12 preceded by ^ (followed by $) is constrained
        !           256: to matches that begin at the left (end at the right) end of a line.
        !           257: .IP 14.
        !           258: A regular expression of form 1-13 picks out the longest among the leftmost matches
        !           259: in a line.
        !           260: .IP 15.
        !           261: An empty regular expression stands for a copy of the last regular expression encountered.
        !           262: .PP
        !           263: .i0
        !           264: Regular expressions are used in addresses and the
        !           265: .I g
        !           266: and
        !           267: .I v
        !           268: commands
        !           269: to specify
        !           270: lines, in the
        !           271: .I s
        !           272: command
        !           273: to specify a portion of a line which is to be replaced,
        !           274: in the
        !           275: .I G
        !           276: and
        !           277: .I V
        !           278: commands to refer to buffers in which to perform commands,
        !           279: and in general whenever text
        !           280: is being specified.
        !           281: .PP
        !           282: To understand addressing in
        !           283: .I qed
        !           284: it is necessary to know that at any time there is a
        !           285: \fIcurrent buffer\fR
        !           286: and a
        !           287: \fIcurrent line.\fR
        !           288: When
        !           289: .I qed
        !           290: is invoked,
        !           291: the current buffer is
        !           292: buffer `a',
        !           293: but may be changed at any time by a
        !           294: .I b
        !           295: (change buffer) command.
        !           296: All addresses refer to lines in the current buffer,
        !           297: except for a special case described under the
        !           298: .I m
        !           299: (move) command.
        !           300: .PP
        !           301: Generally speaking, the current line is
        !           302: the last line affected by a command; however,
        !           303: the exact effect on the current line
        !           304: is discussed under the description of
        !           305: the command.
        !           306: Addresses are constructed as follows.
        !           307: .IP 1.
        !           308: The character `\fB.\fR' addresses the current line.
        !           309: .IP 2.
        !           310: The character `$' addresses the last line of the buffer.
        !           311: .IP 3.
        !           312: A decimal number
        !           313: .I n
        !           314: addresses the
        !           315: \fIn\fR-th
        !           316: line of the buffer.
        !           317: .IP 4.
        !           318: `\*q\fIx\fR' addresses the line marked with the
        !           319: mark name character \fIx\fR,
        !           320: which must be a bname.
        !           321: Lines are marked with the
        !           322: .I k
        !           323: command described below.
        !           324: It is an error for the marked line to be outside of the current buffer.
        !           325: .IP 5.
        !           326: A regular expression enclosed in slashes `/' addresses
        !           327: the first matching line
        !           328: found by searching forwards from the line after the current line.
        !           329: If necessary, the search wraps around to the beginning of the
        !           330: buffer.
        !           331: If the trailing `/' would be followed by a newline,
        !           332: it may be omitted.
        !           333: .IP 6.
        !           334: A regular expression enclosed in queries `?' addresses
        !           335: the first matching line
        !           336: found by searching backwards from the line before
        !           337: the current line.
        !           338: If necessary
        !           339: the search wraps around to the end of the buffer.
        !           340: If the trailing `?' would be followed by a newline,
        !           341: it may be omitted.
        !           342: .IP 7.
        !           343: An address followed by a plus sign `+'
        !           344: or a minus sign `\-' followed by a decimal number specifies that address plus
        !           345: (resp. minus) the indicated number of lines.
        !           346: The plus sign may be omitted.
        !           347: .IP 8.
        !           348: An address followed by `+' or `\-' followed by a
        !           349: regular expression enclosed in slashes specifies the first
        !           350: matching line following (resp. preceding) that address.
        !           351: The search wraps around if necessary.
        !           352: The `+' may be omitted.
        !           353: Enclosing the regular expression in `?' reverses the search direction.
        !           354: .IP 9.
        !           355: If an address begins with `+' or `\-'
        !           356: the addition or subtraction is taken with respect to the current line;
        !           357: e.g. `\-5' is understood to mean `\fB.\fR\-5'.
        !           358: .IP 10.
        !           359: If an address ends with a `+' (or `\-') 1 is added (resp. subtracted).
        !           360: As a consequence of this rule and rule 9,
        !           361: the address `\-' refers to the line before the current line.
        !           362: Moreover, trailing `+' and `\-' characters have cumulative effect, so `\-\-'
        !           363: refers to the current line less 2.
        !           364: .IP 11.
        !           365: To maintain compatibility with earlier versions of the editor,
        !           366: the character `^' in addresses is entirely
        !           367: equivalent to `\-'.
        !           368: .PP
        !           369: .i0
        !           370: Commands may require zero, one, or two addresses.
        !           371: Commands which require no addresses regard the presence
        !           372: of an address as an error.
        !           373: Commands which accept one or two addresses
        !           374: assume default addresses when none is given.
        !           375: If more addresses are given than the command requires,
        !           376: the last one or two (depending on what is accepted) are used.
        !           377: The last addressed line must not precede the second-last addressed line.
        !           378: .PP
        !           379: Typically, addresses are separated from each other by a comma `,'.
        !           380: They may instead be separated by a semicolon `;'
        !           381: in which case the current line `\fB.\fR' is set to the first address
        !           382: before the second address is interpreted.
        !           383: The second of two separated addresses may not be a line
        !           384: earlier in the buffer than the first.
        !           385: If the address on the left (right) side of a comma or semicolon
        !           386: is absent, it defaults to the first (resp. last) line.
        !           387: .PP
        !           388: Filename operands of commands may be made up of printing characters only.
        !           389: However, when the filename appears as the argument to the invocation of
        !           390: \fIqed\fP,
        !           391: non-printing characters may be included.
        !           392: When a filename is specified for a command,
        !           393: it is terminated at the first blank, tab or newline.
        !           394: .PP
        !           395: In the following list of
        !           396: .I qed
        !           397: commands, the default addresses
        !           398: are shown in parentheses.
        !           399: The parentheses are not part of
        !           400: the address, but are used to show that the given addresses are
        !           401: the default.
        !           402: .TP 5
        !           403: ( \fB. \fR)\|a <text>
        !           404: The append command accepts input text
        !           405: and appends it after the addressed line.
        !           406: `\fB.\fR' is left
        !           407: on the last line input, if there
        !           408: were any, otherwise at the addressed line.
        !           409: Address `0' is legal for this command; text is placed
        !           410: at the beginning of the buffer.
        !           411: .TP 5
        !           412: b<bname>
        !           413: The change buffer command sets the current buffer
        !           414: to be that named.
        !           415: `\fB.\fR', `$' and the remembered
        !           416: .I filename
        !           417: are set to those of the new buffer;
        !           418: upon return to a previously used buffer,
        !           419: `\fB.\fR' will be set to its value when the buffer was last used.
        !           420: .TP 5
        !           421: ( \fB. \fR)\|b[+\-\^\fB.\fP\^][pagesize][display character]
        !           422: The browse command provides page-oriented printing.
        !           423: The optional `+', `\-', or
        !           424: .RB ` . '
        !           425: specifies whether the next,
        !           426: previous,
        !           427: or surrounding page
        !           428: is to be printed; if absent, `+' is assumed.
        !           429: .IB b .
        !           430: also prints several carets `^^^^^'
        !           431: immediately below the current line.
        !           432: If a pagesize is given, it is used for the current browse
        !           433: command and remembered as the default.
        !           434: The pagesize is initially 22 lines.
        !           435: If a display character is given,
        !           436: the lines are printed in the specified format,
        !           437: and the format is remembered as the default.
        !           438: Initially, `p' is the default.
        !           439: For
        !           440: .I b+
        !           441: and
        !           442: .IR b\- ,
        !           443: `\fB.\fP' is left at the last line displayed;
        !           444: for
        !           445: \fIb\fP\fB.\fP,
        !           446: it is unchanged.
        !           447: NOTE: The browse and change buffer commands are the same character!
        !           448: The two commands can be syntactically distinguished
        !           449: in all cases except for `b<display\ char>';
        !           450: this ambiguity may be resolved by typing the (implicit) `+'
        !           451: after the `b'.
        !           452: .TP 5
        !           453: ( \fB. \fR, \fB. \fR)\|c <text>
        !           454: The change
        !           455: command deletes the addressed lines, then accepts input
        !           456: text which replaces these lines.
        !           457: `\fB.\fR' is left at the last line input; if there were none,
        !           458: it is left at the line preceding the deleted lines.
        !           459: If an interrupt signal (usually ASCII DEL) is received during a
        !           460: change command, the old lines are not deleted.
        !           461: .TP 5
        !           462: ( \fB. \fR, \fB. \fR)\|d
        !           463: The delete command deletes the addressed lines from the buffer.
        !           464: The line after the deleted section becomes the current line;
        !           465: if the deleted lines were originally at the end,
        !           466: the new last line becomes the current line.
        !           467: The character after the `d' can only be one of
        !           468: a blank, newline, tab, or display character.
        !           469: Line 0 is a valid address for deletion;
        !           470: deleting line 0 has no affect on any lines in the buffer.
        !           471: .TP 5
        !           472: e filename
        !           473: The edit
        !           474: command causes the entire contents of the current buffer to be deleted,
        !           475: and then the named file to be read in.
        !           476: `\fB.\fR' is set to the last line of the buffer.
        !           477: The number of characters read is typed
        !           478: if
        !           479: .I qed
        !           480: is in
        !           481: .I verbose
        !           482: mode.
        !           483: The \fIfilename\fP is remembered for possible use as a default file name
        !           484: in a subsequent
        !           485: \fIf\fP, \fIr\fR, \fIw\fR, or \fIW\fR command.
        !           486: .TP 5
        !           487: E filename
        !           488: The
        !           489: .I E
        !           490: command is like
        !           491: .IR e ,
        !           492: except that
        !           493: .I qed
        !           494: does not check to see
        !           495: if the buffer has been modified
        !           496: since the last
        !           497: .I w
        !           498: command.
        !           499: .TP 5
        !           500: f filename
        !           501: The filename command prints information about the current buffer,
        !           502: in the format used by the \fIn\fR command.
        !           503: If \fIfilename\fP is given,
        !           504: the currently remembered file name is changed to \fIfilename\fP.
        !           505: If
        !           506: .I qed
        !           507: is not in verbose mode,
        !           508: the information is only printed if the
        !           509: .I filename
        !           510: is not specified.
        !           511: If it is not desired to set the
        !           512: .I filename,
        !           513: the character immediately after the f must be a newline.
        !           514: Otherwise, the first token
        !           515: (which may be the null string)
        !           516: on the line, after a mandatory non-empty sequence of blanks and tabs,
        !           517: is taken to be the
        !           518: .I filename.
        !           519: These rules apply to all
        !           520: .I filename\c
        !           521: -using commands,
        !           522: .I e,
        !           523: .I f,
        !           524: .I r,
        !           525: .I R,
        !           526: .I S,
        !           527: .I w
        !           528: and
        !           529: .I W,
        !           530: although some regard specification of an explicitly null \fIfilename\fP as an
        !           531: error.
        !           532: .TP 5
        !           533: ( 1 , $ )\|g/regular expression/command list
        !           534: In the global
        !           535: command, the first step is to mark every line in the range which matches
        !           536: the regular expression.
        !           537: Then for every such line, the
        !           538: command list is executed with `\fB.\fR' initially set to that line.
        !           539: Any embedded newlines in the command list
        !           540: must be escaped with a backslash.
        !           541: The
        !           542: \fIa\fP,
        !           543: \fIi\fP,
        !           544: and
        !           545: .I c
        !           546: commands and associated input are permitted;
        !           547: the `\fB.\fR' terminating input mode may be omitted if it would be on the
        !           548: last line of the command list.
        !           549: The commands
        !           550: .I g
        !           551: and
        !           552: .I v
        !           553: are not permitted in the command list.
        !           554: If the command list is empty, `\fB.\fPp' is assumed.
        !           555: The regular expression may be delimited by any character other than newline.
        !           556: .TP 5
        !           557: G/regular expression/command list
        !           558: In the globuf
        !           559: command, the first step is to mark every active buffer
        !           560: whose output from an
        !           561: .I f
        !           562: command
        !           563: (with the
        !           564: .I filename
        !           565: printed literally)
        !           566: would match the regular expression.
        !           567: (An active buffer is one which has either some text or
        !           568: a remembered file name.)\ 
        !           569: Then for every such buffer, the
        !           570: command list is executed with the current buffer set to that buffer.
        !           571: In other respects it is like the global command,
        !           572: except that only the commands
        !           573: .I G
        !           574: and
        !           575: .I V
        !           576: are not permitted in the command list.
        !           577: If the command list is empty, `f' is assumed.
        !           578: .TP 5
        !           579: h<option> command list
        !           580: The until command provides a simple looping mechanism.
        !           581: The command list is a newline-terminated command sequence which forms
        !           582: the body of the loop; embedded newlines must be escaped with a backslash.
        !           583: The option specifies the exit condition for the loop,
        !           584: and is specified by the character(s) immediately following the `h':
        !           585: .RS
        !           586: .IP h[\fIN\fP]t 6
        !           587: The loop is executed until the truth flag is true.
        !           588: .PD 0
        !           589: .IP h[\fIN\fP]f 6
        !           590: The loop is executed until the truth flag is false.
        !           591: .IP h[\fIN\fP] 6
        !           592: The loop is executed indefinitely.
        !           593: .RE
        !           594: .PD
        !           595: .IP
        !           596: The loop condition is tested
        !           597: .I after
        !           598: execution, so the `ht' and `hf' forms execute at least once.
        !           599: .I N
        !           600: denotes an optional non-negative number which indicates the
        !           601: maximum number of times to execute the loop.
        !           602: .TP 5
        !           603: ( \fB. \fR)\|i <text>
        !           604: The insert command accepts input text
        !           605: and inserts it before the addressed line.
        !           606: `\fB.\fR' is left at the last line input; if there were none,
        !           607: at the line before the addressed line.
        !           608: This command differs from the
        !           609: .I a
        !           610: command only in the placement of the
        !           611: text.
        !           612: .TP 5
        !           613: ( \fB.\fR\-1 , \fB. \fR)\|j
        !           614: .PD 0
        !           615: .TP 5
        !           616: ( \fB.\fR\-1 , \fB. \fR)\|j\|/replacement/
        !           617: .PD
        !           618: The join command collapses all addressed lines into a single line by
        !           619: deleting intermediate newlines.
        !           620: The
        !           621: .I replacement
        !           622: (if any) is placed between joined lines.
        !           623: Newlines, backslashes `\\', and slashes `/' within
        !           624: .I replacement
        !           625: must be preceded by a backslash.
        !           626: Only slashes may delimit \fIreplacement\fP.
        !           627: `\fB.\fP' is left at the resulting line.
        !           628: NOTE: The join command in
        !           629: .I qed
        !           630: has a different default addressing from that in
        !           631: .I ed.
        !           632: .TP 5
        !           633: ( \fB. \fR)\|k<bname>
        !           634: The mark command marks the addressed line with
        !           635: the given bname.
        !           636: (The bname used in the mark has no relation to any buffer;
        !           637: it is just a label.)\ 
        !           638: The address form `\*q<bname>'
        !           639: then addresses this line.
        !           640: `\fB.\fR' is not changed.
        !           641: The marks are global to
        !           642: .I qed\c
        !           643: ; marking a line `x' erases any previous mark `x' in any buffer.
        !           644: .TP 5
        !           645: ( \fB. \fR, \fB. \fR)\|l
        !           646: The list command
        !           647: prints the addressed lines in an unambiguous way:
        !           648: a tab is printed as `\et', a backspace as `\\b',
        !           649: a backslash as `\e\e',
        !           650: a non-printing character is
        !           651: printed as a backslash followed by three octal digits,
        !           652: and a long line is folded,
        !           653: with the second and subsequent sub-lines indented one tab stop.
        !           654: If the last character in the line is a blank,
        !           655: it is followed by `\\n'.
        !           656: .TP 5
        !           657: ( \fB. \fR, \fB. \fR)\|L
        !           658: The \fIL\fP command
        !           659: is similar to the \fIl\fP command,
        !           660: but each line displayed is preceded by its line number,
        !           661: any marks it has (which appear as `\*q\fIx\fR'),
        !           662: and a tab.
        !           663: .TP 5
        !           664: ( \fB. \fR, \fB. \fR)\|m\fIa\fR
        !           665: The move command repositions the addressed lines after the line
        !           666: addressed by
        !           667: \fIa\fP.
        !           668: The last of the moved lines becomes the current line.
        !           669: The address \fIa\fP can also be of the form
        !           670: <bname>address,
        !           671: in which case the text is moved after the address in the named
        !           672: buffer.
        !           673: The buffer to which the text was moved becomes the current buffer.
        !           674: The original buffer (if different) has `\fB.\fR' left at the line before the moved lines.
        !           675: .TP 5
        !           676: n
        !           677: The names command displays the bname,
        !           678: dollar
        !           679: and \fIfilename\fR (in `l' format) of the current buffer and all active buffers.
        !           680: If the buffer's changed flag is set, an apostrophe `\*q' is printed
        !           681: after the bname.
        !           682: The current buffer is indicated by a period `\fB.\fP' before the
        !           683: dollar value.
        !           684: If present, the
        !           685: .I filename
        !           686: is preceded by a tab.
        !           687: .TP 5
        !           688: N
        !           689: The \fIN\fP command is similar to the \fIn\fP command,
        !           690: but the display is only given for those buffers
        !           691: which have a \fIfilename\fP and for which the changed flag is set.
        !           692: .TP 5
        !           693: o\fIps\fP
        !           694: The option command allows various options to be set.
        !           695: The first argument, \fIp\fP,
        !           696: specifies which option is being set.
        !           697: The rest of the command, \fIs\fP,
        !           698: specifies the setting.
        !           699: Most options can be either enabled or disabled;
        !           700: \fIs\fP is `s' to set the option,
        !           701: or `r' to reset it.
        !           702: The following table describes the available options.
        !           703: The default setting is shown after the option's letter.
        !           704: .RS
        !           705: .IP b22p 5
        !           706: Set the length and format of the page printed by the browse command.
        !           707: Either the length or the format may be omitted.
        !           708: .PD 0
        !           709: .IP "B<null string>" 5
        !           710: Set the default command sequence to be
        !           711: performed when a newline command is typed at the terminal.
        !           712: The command sequence is set by following the `B' with a newline-terminated
        !           713: string.
        !           714: If the string is null, the newline command resumes its default behaviour.
        !           715: .IP cr 5
        !           716: Set the changed flag of the current buffer.
        !           717: .IP dr 5
        !           718: Dualcase search mode
        !           719: affects rule one of regular expression construction
        !           720: so that a letter is matched without regard to its case.
        !           721: .IP er 5
        !           722: Error exit mode causes
        !           723: .I qed
        !           724: to exit if an error occurs (see the DIAGNOSTICS section).
        !           725: This option is mainly intended for use of qed in shell files.
        !           726: .IP ir 5
        !           727: Interrupt catching mode causes
        !           728: .I qed
        !           729: to exit when interrupted. (This includes removing the temporary file).
        !           730: .IP pr 5
        !           731: Prompting mode causes `*' to be typed
        !           732: immediately before a command (as opposed to text)
        !           733: is read from the terminal.
        !           734: .IP qr 5
        !           735: Quit catching mode causes
        !           736: .I qed
        !           737: to dump core, leaving the temporary file intact,
        !           738: when a QUIT signal is received.
        !           739: .IP Tr 5
        !           740: Tracing mode causes
        !           741: all commands not typed directly by the user to be echoed on the terminal.
        !           742: When a special character (other than `\eB or `\eN')
        !           743: is encountered, a `[' is typed,
        !           744: followed by a code specifying the character \(em
        !           745: `za' for register `a', `g' for global command list,
        !           746: `l' for `\el', `B' for browse pseudo-register, etc.
        !           747: Then, an `=' is typed, followed by the interpretation
        !           748: of the special character, followed by a `]'.
        !           749: .IP us 5
        !           750: Uppercase conversion mode enables case transformation in
        !           751: substitute commands.
        !           752: If the `u' flag is set, the character caret (`^') 
        !           753: becomes non-literal in the replacement text of a substitution.
        !           754: It behaves just like `&', but with case switching of alphabetics
        !           755: in the replaced text.
        !           756: If the flag is `u', all alphabetics are mapped to upper case;
        !           757: if `l', lower case; and if `s', the case is switched.
        !           758: .IP vs 5
        !           759: Verbose mode causes character counts to be typed
        !           760: after
        !           761: \fIe\fP,
        !           762: \fIr\fP,
        !           763: \fIw\fP,
        !           764: \fIR\fP,
        !           765: \fIS\fP,
        !           766: and
        !           767: .I W
        !           768: commands.
        !           769: It also causes `!' to be typed upon completion of the \fI!\fR,
        !           770: \fI<\fR, \fI|\fR  and \fI>\fR commands.
        !           771: .IP ?\fIc\fP 5
        !           772: \fIc\fP must be one of
        !           773: `c', `d', `i', `p', `T' or `v'.
        !           774: The value of the corresponding flag is stored in the truth.
        !           775: .PD
        !           776: .RE
        !           777: .TP 5
        !           778: ( \fB. \fR, \fB. \fR)\|p
        !           779: The print command prints the addressed lines.
        !           780: `\fB.\fR' is left at the last line printed.
        !           781: .TP 5
        !           782: ( \fB. \fR, \fB. \fR)\|P
        !           783: The PRINT command is similar to the print command,
        !           784: but each line displayed is preceded by its line number,
        !           785: any marks it has (which appear as `\*q\fIx\fR'),
        !           786: and a tab.
        !           787: .TP 5
        !           788: q
        !           789: The quit command causes
        !           790: .I qed
        !           791: to exit.
        !           792: No automatic write
        !           793: of a file is done.
        !           794: If the changed flag is set
        !           795: in any buffer,
        !           796: .I qed
        !           797: prints `?q'
        !           798: and refuses to quit.
        !           799: A second
        !           800: .I q
        !           801: or a
        !           802: .I Q
        !           803: will get out regardless,
        !           804: as will an end-of-file
        !           805: on the standard input.
        !           806: .TP 5
        !           807: Q
        !           808: Like
        !           809: .IR q ,
        !           810: but changed flags
        !           811: are not checked.
        !           812: .TP 5
        !           813: ( $ )\|r filename
        !           814: The read command
        !           815: reads in the given file after the addressed line.
        !           816: If no \fIfilename\fP is given,
        !           817: the remembered \fIfilename\fP is used
        !           818: (see
        !           819: .I e
        !           820: and
        !           821: .I f
        !           822: commands).
        !           823: The \fIfilename\fP is remembered if there was not already a
        !           824: remembered \fIfilename\fP in the current buffer.
        !           825: Address `0' is legal for
        !           826: .I r
        !           827: and causes the
        !           828: file to be read at the beginning of the buffer.
        !           829: If
        !           830: .I qed
        !           831: is in
        !           832: .I verbose
        !           833: mode and the read is successful, the number of characters
        !           834: read is typed,
        !           835: except while
        !           836: .I qed
        !           837: is starting up,
        !           838: in which case an
        !           839: .I f
        !           840: command is performed.
        !           841: `\fB.\fR' is left at the last line read in from the file.
        !           842: .TP 5
        !           843: R filename
        !           844: The restore command restores an environment saved by a save (\fIS\fR) command.
        !           845: The changed flag in each buffer is restored from the files; all other flags
        !           846: are unaffected.
        !           847: The input stack is reset to the top (teletype input) level,
        !           848: and the current buffer becomes `a'.
        !           849: `\fB.\fP' is left at the saved value of `\fB.\fP' in buffer `a'\fB.\fP
        !           850: If the \fIfilename\fP is not specified, `q' is used.
        !           851: .TP 5
        !           852: ( \fB. \fR, \fB. \fR)\|s\fIn\fR/regular expression/replacement/
        !           853: .PD 0
        !           854: .TP 5
        !           855: ( \fB. \fR, \fB. \fR)\|s\fIn\fR/regular expression/replacement/g
        !           856: .PD
        !           857: The substitute command searches each addressed
        !           858: line for occurrences of the specified regular expression.
        !           859: The decimal number \fIn\fP defaults to 1 if missing.
        !           860: On each line in which
        !           861: .I n
        !           862: matches are found,
        !           863: the \fIn\fPth matched string is replaced with
        !           864: \fIreplacement\fP.
        !           865: If the global replacement indicator `g' follows the command,
        !           866: all subsequent matches on the line are also replaced.
        !           867: Within a line, a search starts from the character following the last match,
        !           868: unless the last match was an empty string,
        !           869: in which case the search starts at
        !           870: the second character following the empty string
        !           871: (to ensure a match is not repeated).
        !           872: It is an error for the substitution to fail on all addressed lines
        !           873: unless it is in a global command.
        !           874: `\fB.\fR' is left at the last line substituted.
        !           875: .PP
        !           876: .RS
        !           877: Any character other than newline or a numeral
        !           878: may be used instead of `/' to delimit the regular expression
        !           879: and \fIreplacement\fP.
        !           880: If the trailing delimiter is missing
        !           881: (i.e., an unescaped newline
        !           882: in the
        !           883: .IR replacement ),
        !           884: its presence is assumed,
        !           885: and the last line affected is printed,
        !           886: as if the
        !           887: substitute
        !           888: was followed by a
        !           889: .I p
        !           890: command.
        !           891: If delimiter following the expression
        !           892: is omitted as well,
        !           893: an empty
        !           894: .I replacement
        !           895: is assumed.
        !           896: .PP
        !           897: An ampersand `&' appearing in \fIreplacement\fP
        !           898: is replaced by the string matching the regular expression.
        !           899: As a more general feature,
        !           900: the characters
        !           901: `\\\fIn\fR',
        !           902: where
        !           903: .I n
        !           904: is a digit,
        !           905: are replaced by the text matched by the
        !           906: \fIn\fR-th
        !           907: regular subexpression
        !           908: enclosed between `\e\|(' and `\e\|)'.
        !           909: When nested parenthesized subexpressions are present,
        !           910: .I n
        !           911: is determined by counting occurrences of `\e\|(' starting from the left.
        !           912: .PP
        !           913: A caret `^' appearing in \fIreplacement\fP
        !           914: behaves much like an ampersand,
        !           915: but provides a mechanism for case switching of alphabetics,
        !           916: as discussed under the \fIo\fR command.
        !           917: To include an ampersand `&', caret `^', backslash `\\', newline,
        !           918: or the delimiter literally in
        !           919: \fIreplacement\fP,
        !           920: the character must be preceded by a backslash.
        !           921: Lines may be split by substituting newline characters into them.
        !           922: .RE
        !           923: .TP 5
        !           924: S filename
        !           925: The save command saves the full buffer and register information in two
        !           926: files called `filename:aq' and `filename:bq'.
        !           927: If the filename is absent, `q' is used.
        !           928: If the filename has more than 12 characters after the last slash `/',
        !           929: it is truncated to 12 characters to avoid overwriting the file.
        !           930: .TP 5
        !           931: ( \fB.\fR , \fB.\fR )\|t\fIa\fR
        !           932: The copy command acts just like the move
        !           933: .I m
        !           934: command except that a copy of the addressed lines is placed after address
        !           935: \fIa\fP.
        !           936: `\fB.\fR' is left on the last line of the copy.
        !           937: The buffer to which the text was copied becomes the current buffer.
        !           938: .TP 5
        !           939: u
        !           940: The undo command restores the last line changed by a
        !           941: \fIs\fP,
        !           942: \fIu\fP,
        !           943: or
        !           944: .I x
        !           945: command.
        !           946: Any new lines created by splitting the original are left.
        !           947: It is an error if the line is not in the current buffer.
        !           948: `\fB.\fP' is left at the restored line.
        !           949: .TP 5
        !           950: ( 1 , $ )\|v/regular expression/command list
        !           951: This command is the same as the global command
        !           952: except that the command list is executed
        !           953: with `\fB.\fR' initially set to every line
        !           954: .I except
        !           955: those
        !           956: matching the regular expression.
        !           957: .TP 5
        !           958: V/regular expression/command list
        !           959: This command is the same as the globuf command
        !           960: except that the command list is executed
        !           961: with the current buffer initially set to every active buffer
        !           962: .I except
        !           963: those
        !           964: matching the regular expression.
        !           965: .TP 5
        !           966: ( 1 , $ )\|w filename
        !           967: The write command writes the addressed lines onto
        !           968: the given file.
        !           969: If the file does not exist,
        !           970: it is created.
        !           971: The filename is remembered if there was not already a
        !           972: remembered file name in the current buffer.
        !           973: If no file name is given,
        !           974: the remembered file name is used.
        !           975: `\fB.\fR' is unchanged.
        !           976: If
        !           977: .I qed
        !           978: is in
        !           979: .I verbose
        !           980: mode and
        !           981: the command is successful, the number of characters written is
        !           982: typed.
        !           983: .TP 5
        !           984: ( 1 , $ )\|W
        !           985: The \fIW\fP command is the same as the \fIw\fP command except that
        !           986: the addressed lines are appended to the file.
        !           987: .PP
        !           988: .TP 5
        !           989: ( \fB. \fR, \fB. \fR)\|x
        !           990: .RS
        !           991: The xform command allows one line at a time to be modified according to
        !           992: graphical requests.
        !           993: The line to be modified is typed out,
        !           994: and then the modify request is read from the terminal
        !           995: (even if the xform command is in a global command or other
        !           996: nested input source).
        !           997: Generally each character in the request specifies how to
        !           998: modify the character immediately above it, in the original line,
        !           999: as described in the following table.
        !          1000: .IP # 5
        !          1001: Delete the above character.
        !          1002: .PD 0
        !          1003: .IP % 5
        !          1004: Replace the above character with a space.
        !          1005: .IP ^ 5
        !          1006: Insert the rest of the request line before the above character.
        !          1007: If the rest of the request line is empty, insert a newline character.
        !          1008: .IP $ 5
        !          1009: Delete the characters in the above line from this position on;
        !          1010: replace them with the rest of the request line.
        !          1011: .IP "space or tab:" 5
        !          1012: Leave above character(s) unchanged.
        !          1013: .IP "any other:" 5
        !          1014: This character replaces the one above it.
        !          1015: .PD
        !          1016: .PP
        !          1017: If the request line is longer than the line to be modified,
        !          1018: the overhang is added to the end of the line
        !          1019: without interpretation,
        !          1020: that is, without treating `#', `%', `^' or `$' specially.
        !          1021: Any characters after a `^' or `$' request are not interpreted either.
        !          1022: .PP
        !          1023: Xform will not process control characters other
        !          1024: than tab and newline,
        !          1025: except in contexts where it need not know their width
        !          1026: (that is, after a `^' or `$' request, or in the part of
        !          1027: either the request or the line that overhangs the other).
        !          1028: Remember that the ERASE character (processed by the system)
        !          1029: erases the last character typed,
        !          1030: not the last column.
        !          1031: .PP
        !          1032: Some characters take more than one column of the terminal
        !          1033: to enter or display.
        !          1034: For example, entering the ERASE or KILL characters literally
        !          1035: takes two columns because they must be escaped.
        !          1036: To delete a multi-column character,
        !          1037: one must type `#' under all its columns.
        !          1038: To replace a multicolumn character,
        !          1039: the replacement must be typed under the first column of the character.
        !          1040: Similarly, if a replacement character is multi-columned,
        !          1041: it replaces the character in its first column.
        !          1042: .PP
        !          1043: The tab character prints as a sequence of spaces, and may be
        !          1044: modified as if it were that sequence.
        !          1045: As long as the last space is unmodified, it and the
        !          1046: remaining contiguous spaces will represent a tab.
        !          1047: .PP
        !          1048: The modification process is repeated until the request is empty.
        !          1049: Only a newline may immediately follow the `x'.
        !          1050: .RE
        !          1051: .TP 5
        !          1052: y<condition><type>
        !          1053: The jump command controls execution nested input sources.
        !          1054: The condition is compared to the truth flag to see if the jump
        !          1055: should be performed;
        !          1056: if a `t', the jump is performed if the truth flag is true,
        !          1057: if an `f', the jump is performed if the truth flag is false,
        !          1058: if absent the jump is always performed.
        !          1059: Several types of jumps exist:
        !          1060: .RS
        !          1061: .IP y[tf]o
        !          1062: Jump out of the current input source.
        !          1063: If the current input source is the command line
        !          1064: for a \fIg\fR, \fIG\fP, \fIv\fR, \fIV\fR or \fIh\fR command, the command is terminated.
        !          1065: .PD 0
        !          1066: .IP y[tf]\fIN\fR
        !          1067: Control is transferred to absolute line \fIN\fR (an integer)
        !          1068: in the executing buffer.
        !          1069: The current input source must be a buffer.
        !          1070: .IP y[tf]\(aa<label>
        !          1071: Control is transferred to the first line found,
        !          1072: searching forward in the buffer,
        !          1073: that begins with a comment "<label>.
        !          1074: The match of the labels must be exact;
        !          1075: regular expressions are not used to define the control label.
        !          1076: (A tab, blank or newline after the double quote specifies a null label:
        !          1077: a line beginning `"\ \ LAB' cannot be transferred to by this form of jump.)\ 
        !          1078: If no such label is found,
        !          1079: control resumes at the character after the label in the jump command.
        !          1080: The current input source must be a buffer.
        !          1081: .IP y[tf]\(ga<label>
        !          1082: Similar to `y\(aa<label>',
        !          1083: but the search is in the opposite (reverse) direction.
        !          1084: .IP y[tf]
        !          1085: If no
        !          1086: recognized type is given,
        !          1087: input is skipped up to the next newline.
        !          1088: .PD
        !          1089: .RE
        !          1090: .IP
        !          1091: It is an error if reading the label or line number for a jump command
        !          1092: causes the current input source (i.e. buffer) to be `popped.'\ 
        !          1093: This can happen if the label is the last word in the buffer,
        !          1094: but can be circumvented by putting an extra blank or newline after
        !          1095: the jump command.
        !          1096: .TP 5
        !          1097: ( \fB.\fR , \fB.\fR )\|z\fIXc\fR
        !          1098: \fIQed\fP has 56 registers labeled by bnames.
        !          1099: Three of these,
        !          1100: registers `T', `C', and `U',
        !          1101: are reserved:
        !          1102: `T' is the truth flag, `C' is the count,
        !          1103: `U' contains the
        !          1104: .SM UNIX
        !          1105: command from the most recent
        !          1106: bang, crunch, zap, or pipe command.
        !          1107: The contents of register \fIX\fP,
        !          1108: where \fIX\fR is a bname,
        !          1109: can be inserted into the input
        !          1110: stream with the special character ``\ez\fIX\fP''.
        !          1111: The command ``z\fIX\fR''
        !          1112: specifies register \fIX\fR
        !          1113: as the argument to
        !          1114: the operation character (signified above by \fIc\fR) that follows it.
        !          1115: In the description below,
        !          1116: \fIN\fR stands for a possibly signed decimal integer
        !          1117: and \fIS\fR stands for a newline-terminated string.
        !          1118: Newlines may be embedded in registers by escaping
        !          1119: them with a backslash.
        !          1120: Although some of the register commands refer to addressed lines,
        !          1121: `\fB.\fP' is unaffected by a
        !          1122: .I z
        !          1123: command.
        !          1124: The operations are as follows:
        !          1125: .RS
        !          1126: .IP p
        !          1127: Print the contents of the register in `p' format.
        !          1128: .PD 0
        !          1129: .IP l
        !          1130: Print the contents of the register in `l' format.
        !          1131: .IP \fB.\fP
        !          1132: Set the register to the contents of the addressed line.
        !          1133: .IP /reg-exp/
        !          1134: Set the register to the portion of
        !          1135: current line that matches the regular expression in slashes.
        !          1136: If no such pattern is found,
        !          1137: the register is cleared.
        !          1138: The truth flag is set according to whether a
        !          1139: match was found.
        !          1140: .IP \fB:\fR\fIS\fR
        !          1141: Set register to the string following the colon.
        !          1142: .IP \&\(aa\fIY\fR
        !          1143: Make a direct copy of register \fIY\fR in register \fIX\fR,
        !          1144: without interpreting special characters.
        !          1145: \fIY\fR is any register bname.
        !          1146: .IP +\fIN\fR
        !          1147: Increment by \fIN\fR the ASCII value of each character in the register.
        !          1148: Similarly, a `\-' decrements each character.
        !          1149: .IP =\fIS\fR
        !          1150: (Or `<' or `>' or `!=' or `!<' or `!>'.)\ 
        !          1151: Set truth flag to the result of the lexical comparison
        !          1152: of the register and the string \fIS\fR.
        !          1153: .IP n
        !          1154: Set the count to the length of the register.
        !          1155: .IP )\|\fIN\fR
        !          1156: (Or '('.)\ 
        !          1157: `Take'
        !          1158: the first \fIN\fR characters of the register, i.e. truncate at the \fIN\fR+1'th
        !          1159: character.
        !          1160: `(' (`drop') is the complementary operator;
        !          1161: it deletes the first \fIN\fP characters from the register.
        !          1162: If \fIN\fP is negative, the break point is |\|\fIN\fP| from the end.
        !          1163: .IP [/reg-exp/
        !          1164: Set the count to the starting index of the regular expression in
        !          1165: the register.
        !          1166: Set the truth to whether the expression matches any of the register.
        !          1167: .IP s\fIn\fP/reg-exp/replacement/
        !          1168: .IP s\fIn\fP/reg-exp/replacement/g
        !          1169: Perform a substitute command with semantics identical to the \fIs\fR command,
        !          1170: but in the text of the register, not a line of the buffer.
        !          1171: .IP C
        !          1172: `Clean' the register: collapse each occurrence of `white space' in the register
        !          1173: to a single blank, and delete initial and trailing white space.
        !          1174: .IP {\|\fIS\fR
        !          1175: Set the register to the value of the shell environment variable \fIS\fR,
        !          1176: whose name may be terminated by a space, tab, newline or `}'.
        !          1177: .PD
        !          1178: .PP
        !          1179: The registers can also be manipulated as decimal numbers.
        !          1180: Numerical operations are indicated by a number sign `#'
        !          1181: after the register name:
        !          1182: e.g. `zx#+2'.
        !          1183: It is an error to attempt to perform arithmetic on a
        !          1184: register containing non-numeric text other than a leading minus sign.
        !          1185: The numerical operations are:
        !          1186: .IP a
        !          1187: Set the value of the register to be the value of
        !          1188: the address given to the command; e.g. `$za#a' sets register `a'
        !          1189: to the number of lines in the buffer.
        !          1190: .PD 0
        !          1191: .IP r
        !          1192: Set register \fIX\fR to be the first address
        !          1193: given the command,
        !          1194: and \fIX\fR+1 to be the second.  If \fIX\fR is `~', an error is generated.
        !          1195: For example, `5,$zi#r' sets register `i' to 5, and
        !          1196: register `j' to the value of `$'.
        !          1197: `\fB.\fP' is unchanged.
        !          1198: This command is usually used to pass addresses to a command buffer.
        !          1199: .IP n
        !          1200: Set register to the length of the addressed line.
        !          1201: .IP \fB:\fIN\fR
        !          1202: Set register to \fIN\fR.
        !          1203: Scanning of the number stops at the first non-numeric character,
        !          1204: not at the end of the line.
        !          1205: .IP +\fIN\fR
        !          1206: Increment register by \fIN\fR. `\-', `*', `/', and `%'
        !          1207: decrement, multiply, divide, or modulo the register by \fIN\fR.
        !          1208: .IP P
        !          1209: Set register to the decimal value of the process id of
        !          1210: .I qed.
        !          1211: .IP =\fIN\fR
        !          1212: (Or `<' or `>' or `!=' or `!<' or `!>'.)\ 
        !          1213: Set truth flag to the result of the numeric comparison of the register
        !          1214: and the number
        !          1215: .I N.
        !          1216: .PD
        !          1217: .PP
        !          1218: Several numerical operations may be combined in one command
        !          1219: (and it is more efficient to do so when possible.)
        !          1220: For example, `$zd#a\-3' sets register `d' to three less than the value
        !          1221: of `$'.
        !          1222: .RE
        !          1223: .TP 5
        !          1224: Z
        !          1225: The zero command clears the current buffer.
        !          1226: The contents, filename and all flags for the buffer are zeroed.
        !          1227: The character after the `Z' must be a blank, tab or newline.
        !          1228: .TP 5
        !          1229: ( $ )\|=
        !          1230: The line number of the addressed line is typed.
        !          1231: `\fB.\fR' is unchanged.
        !          1232: .TP 5
        !          1233: !\|<\s-2UNIX\s+2 command>
        !          1234: The bang command sends the
        !          1235: command line after the `!'
        !          1236: to the UNIX shell to be interpreted as a command.
        !          1237: Embedded newlines must be preceded by a backslash.
        !          1238: The signals INTR, QUIT, and HUP are enabled or disabled
        !          1239: as on entry to
        !          1240: \fIqed\fP.
        !          1241: At the completion of the command,
        !          1242: if
        !          1243: .I qed
        !          1244: is in
        !          1245: .I verbose
        !          1246: mode, an `!' is typed.
        !          1247: The return status of the command is stored in the truth flag.
        !          1248: `\fB.\fR' is unchanged.
        !          1249: .IP
        !          1250: The
        !          1251: command line
        !          1252: is stored in register `U'.
        !          1253: If a second `!' immediately follows the first,
        !          1254: it is replaced with the uninterpreted contents
        !          1255: of this register.
        !          1256: Thus `!!' repeats the most recent bang command,
        !          1257: and `!! \(or wc'
        !          1258: repeats the command with an additional pipeline element added.
        !          1259: .TP 5
        !          1260: ( 1 , $ )\|>\|<\s-2UNIX\s+2 command>
        !          1261: The zap command is similar
        !          1262: to the bang command,
        !          1263: but the addressed lines become the default standard input of the command.
        !          1264: The command is stored in register `U',
        !          1265: as for bang;
        !          1266: `>>' corresponds to `!!'.
        !          1267: .TP 5
        !          1268: ( $ )\|<\|<\s-2UNIX\s+2 command>
        !          1269: The crunch command is similar to the bang command,
        !          1270: but the standard output of the command is appended to the current buffer
        !          1271: after the addressed line, as though read with an \fIr\fR command
        !          1272: from a temporary file.
        !          1273: The command is stored in register `U'
        !          1274: as for bang;
        !          1275: `<<' corresponds to `!!'.
        !          1276: `\fB.\fP' is left at the last line read.
        !          1277: .TP 5
        !          1278: ( 1 , $ )\||\|<\s-2UNIX\s+2 command>
        !          1279: The pipe command is similar to the bang command,
        !          1280: but the addressed lines become the default standard input of the command,
        !          1281: and are replaced by the standard output of the command.
        !          1282: The command is stored in register `U'
        !          1283: as for bang;
        !          1284: `|\||' corresponds to `!!'.
        !          1285: If the command returns non-zero status, the original lines are not deleted.
        !          1286: `\fB.\fP' is left at the last line read.
        !          1287: .TP 5
        !          1288: ( \fB.\fR )"
        !          1289: The comment command sets dot to the addressed line, and ignores
        !          1290: the rest of the line up to the first following double quote or newline.
        !          1291: If, however, the character immediately after the double quote is
        !          1292: a second double quote (i.e. the command is ``""''),
        !          1293: the text which would normally be ignored is typed on the standard output.
        !          1294: Special characters in the text will be interpreted, whether or not
        !          1295: the text is printed,
        !          1296: so to print a message such as ``Type \\bx'' requires the command
        !          1297: ``"\|"\|Type \\cbx''.
        !          1298: Commented lines are used as labels by the
        !          1299: .I y
        !          1300: (jump) command.
        !          1301: .TP 5
        !          1302: %
        !          1303: The register print command displays the name and value of all defined
        !          1304: registers,
        !          1305: followed by the \\p (`P') and \\r (`R') pseudo-registers,
        !          1306: and the browse (`B') pseudo-register, if defined.
        !          1307: .TP 5
        !          1308: #
        !          1309: The numeric register print command displays the name and value of all
        !          1310: defined registers with numeric values.
        !          1311: .TP 5
        !          1312: ( \fB.\fR+1 , \fB.\fR+1 )<newline>
        !          1313: An address or addresses alone on a line
        !          1314: cause the addressed lines to be printed.
        !          1315: If the last address separator before the newline was `;',
        !          1316: only the final addressed line is printed.
        !          1317: A blank line alone causes the contents of the
        !          1318: browse pseudo-register (described with the
        !          1319: .I o
        !          1320: command) to be executed.
        !          1321: If the register is null, as it is initially,
        !          1322: the newline command behaves as though the register contains
        !          1323: `\fB.\fP+1p'.
        !          1324: .PP
        !          1325: .ul
        !          1326: Special Characters
        !          1327: .PP
        !          1328: \fIQed\fP has some special character sequences with non-literal
        !          1329: interpretations.
        !          1330: These sequences are processed at the
        !          1331: .I lowest
        !          1332: level of input, so their interpretation is completely transparent
        !          1333: to the actual commands.
        !          1334: Whenever input from the user is expected, a special character can appear and
        !          1335: will be processed.
        !          1336: Special characters can be nested in the sense that, for example,
        !          1337: a buffer invoked by `\eb' can contain a register invocation `\e\|z'.
        !          1338: Backslashed escape sequences such as `\e\|(' in regular expressions
        !          1339: are
        !          1340: .I not
        !          1341: special characters, so are not interpreted at input.
        !          1342: The sequence `\e\|(' is left untouched by the input mechanism of
        !          1343: .I qed;
        !          1344: any special meaning it receives is given it during regular expression
        !          1345: processing.
        !          1346: The special characters are:
        !          1347: .RS
        !          1348: .IP \eb<bname>
        !          1349: The `b' must be followed by a bname.
        !          1350: When `\eb\fIX\fR' is typed,
        !          1351: the contents of buffer \fIX\fR, up to but \fInot including\fP the last
        !          1352: newline, are read as if they were entered from the keyboard.
        !          1353: Typically, the missing newline is replaced by the newline which
        !          1354: appears after the buffer invocation.
        !          1355: Changing the contents of an executing buffer may have bizarre effects.
        !          1356: .PD 0
        !          1357: .IP \e\|B
        !          1358: Equivalent to current buffer's bname.
        !          1359: .IP \ec
        !          1360: The sequence \ec is replaced by a single backslash,
        !          1361: which is not re-scanned.
        !          1362: The effect of the `c' is to delay interpretation of a special
        !          1363: character.
        !          1364: .IP \e\|f
        !          1365: Equivalent to current buffer's file name.
        !          1366: .IP \e\|F<bname>
        !          1367: Equivalent to the file name in the named buffer.
        !          1368: .IP \e\|l
        !          1369: One line is read from the standard input up to, but \fInot including\fP
        !          1370: the terminal newline, which is discarded.
        !          1371: Note that the first invocation will read the remainder of the last
        !          1372: line entered from the keyboard.
        !          1373: For example, if a buffer is invoked by typing the line:
        !          1374: .br
        !          1375: .ti +5
        !          1376: \ebxjunk
        !          1377: .br
        !          1378: the first \e\|l in buffer `x' will return the string `junk'.
        !          1379: .IP \e\|N
        !          1380: Equivalent to a newline.
        !          1381: Primarily useful when delayed.
        !          1382: .IP \ep
        !          1383: Equivalent to the most recent regular expression used.
        !          1384: .IP \e\|r
        !          1385: Equivalent to the replacement text of
        !          1386: the most recent substitute or join command.
        !          1387: .IP \e\|z<bname>
        !          1388: Equivalent to the contents of register `\e\|z\fIX\fR'.
        !          1389: If the register changes during execution, the changes appear immediately
        !          1390: and affect execution.
        !          1391: If a `+' (`\-') appears between the `z' and the bname,
        !          1392: the ASCII values of the characters in the register are
        !          1393: incremented (decremented) by one before interpretation.
        !          1394: If a `#' precedes the `+' (`\-')
        !          1395: the contents of the register are numerically incremented (decremented).
        !          1396: .IP \e"
        !          1397: The sequence \e" means `no character at all'!
        !          1398: It is primarily used to delay interpretation of a period
        !          1399: that terminates an append, until the second or third time
        !          1400: it is read (e.g. in loading execution buffers):
        !          1401: the sequence \ec"\fB.\fP at the beginning of a line
        !          1402: puts a period on the line which will terminate
        !          1403: an append the second time it is read.
        !          1404: .IP \e\*q[bfFlprz]\ 
        !          1405: If an apostrophe
        !          1406: appears between the backslash and the identifying character
        !          1407: for one of the special characters `\eb', `\e\|f', `\e\|F', `\e\|l', `\e\|p',
        !          1408: `\e\|r' or `\e\|z', interpretation is as usual except that
        !          1409: any further special characters \fIembedded\fP
        !          1410: in the buffer, register, etc. are \fInot\fP interpreted.
        !          1411: Actually, any special character may be quoted, but in forms such as
        !          1412: `\e\*q\|B', the quote has no effect.
        !          1413: .RE
        !          1414: .PD
        !          1415: .PP
        !          1416: A special character is interpreted immediately when it appears
        !          1417: in the input stream,
        !          1418: whether it is currently coming from
        !          1419: the teletype, a buffer, a register, etc.
        !          1420: (This includes characters read when typing a special character:
        !          1421: `\e\*qb\eza', with register `a' containing the character `X',
        !          1422: invokes the literal contents of buffer `X'.)\ 
        !          1423: Thus, interpretation is recursive unless the special character
        !          1424: is `\ec'.
        !          1425: Special characters appearing in text processed in a command such
        !          1426: as move, read or write, are \fInot\fP interpreted.
        !          1427: If the backslash-character pair is not a special character
        !          1428: from the above list, it is passed unchanged.
        !          1429: Interpretation may be delayed using `\ec'; for example,
        !          1430: if a `\ebx' is to be appended to a buffer for later interpretation,
        !          1431: the user must type `\ecbx'.
        !          1432: To delay interpretation \fIn\fP times, \fIn\fP c's must be placed between the
        !          1433: backslash and the identifying character.
        !          1434: In regular expressions and substitutes,
        !          1435: a backslash preceding a metacharacter turns off its special meaning.
        !          1436: Even in these cases,
        !          1437: a backslash preceding an ordinary character is not deleted,
        !          1438: unlike in \fIed\fP.
        !          1439: For example, since the `g' command must read its entire line,
        !          1440: a `\e\|zx' in a substitute driven by a global must be delayed
        !          1441: if the contents of the register are to be different for each line,
        !          1442: but since `\e&' is not a special character except to the substitute,
        !          1443: its interpretation need not be delayed:
        !          1444: .sp
        !          1445: .in +5
        !          1446: zA#:1
        !          1447: .br
        !          1448: g/\|\e$/ s\|/\|\e.xyz\|/\|\eczA \e&/p  zA#+1
        !          1449: .sp
        !          1450: .in
        !          1451: globally searches for lines with a literal currency sign,
        !          1452: and on each one substitutes for `.xyz' the contents
        !          1453: of register `A'
        !          1454: at the time of substitution,
        !          1455: followed by a space and a literal ampersand,
        !          1456: prints the result and increments register `A'.
        !          1457: As a second example, the substitute
        !          1458: .ti +5
        !          1459: .sp
        !          1460: s\|/xyz\|/\|\e\e\|N&/
        !          1461: .sp
        !          1462: replaces `xyz' with a newline followed by `xyz'.
        !          1463: Note that the `\e\e\|N' is interpreted as
        !          1464: `backslash followed by newline,'
        !          1465: as the sequence `\\\\'
        !          1466: .ft I
        !          1467: has no special meaning in qed
        !          1468: .ft R
        !          1469: outside of regular expressions
        !          1470: and replacement text.
        !          1471: However,
        !          1472: to match, say, `\e\e\|z' using a regular expression, it must be entered
        !          1473: as `\e\e\ecz'.
        !          1474: .PP
        !          1475: .PP
        !          1476: If an interrupt signal (ASCII DEL) is sent,
        !          1477: .I qed
        !          1478: prints `??' and returns to its command level.
        !          1479: If a hangup signal is received,
        !          1480: .I qed
        !          1481: executes the command `S qed.hup'.
        !          1482: .PP
        !          1483: Some size limitations:
        !          1484: 512 characters per line,
        !          1485: 256 characters per global command list,
        !          1486: 1024 characters of string storage area,
        !          1487: used for storing registers, file names and regular expressions,
        !          1488: 16 levels of input nesting,
        !          1489: and 128K characters in the temporary file.
        !          1490: The limit on the number of lines depends on the amount of core:
        !          1491: each line takes 1 word.
        !          1492: .SH FILES
        !          1493: /tmp/q#, temporary;
        !          1494: `#' is the process number (six decimal digits).
        !          1495: .SH DIAGNOSTICS
        !          1496: Diagnostics are in the form of `?' followed by a single letter code.
        !          1497: If the diagnostic is because of an inaccessible file,
        !          1498: the offending file name is also displayed.
        !          1499: If input is not from the highest level (i.e. the standard input,
        !          1500: usually the terminal), a traceback is printed, starting with the
        !          1501: lowest level.
        !          1502: The elements of the traceback
        !          1503: are of the form ?b\fIXM.N\fR or ?z\fIXN\fR,
        !          1504: where \fIX\fR is the buffer or register being executed when the
        !          1505: error was encountered,
        !          1506: \fIM\fR is the line number in the buffer and \fIN\fR is the character
        !          1507: number in the line or register.
        !          1508: The possible errors are:
        !          1509: .PD 0
        !          1510: .IP 0
        !          1511: non-zero status return in \fI|\fR command
        !          1512: .IP F
        !          1513: bad bname for \e\|F
        !          1514: .IP G
        !          1515: nested globuf commands
        !          1516: .IP N
        !          1517: last line of input did not end with newline
        !          1518: .IP O
        !          1519: unknown option in the \fIo?c\fP command
        !          1520: .IP R
        !          1521: restore (\fIR\fR) command failed
        !          1522: (file not found or bad format)
        !          1523: .IP T
        !          1524: I/O error or overflow in tempfile
        !          1525: .IP Z
        !          1526: out of string space; clear a few registers or file names
        !          1527: .IP a
        !          1528: address syntax
        !          1529: .IP b
        !          1530: bad bname in a \fIb\fR command or for \\b
        !          1531: .IP c
        !          1532: ran out of core
        !          1533: .IP f
        !          1534: filename syntax error
        !          1535: .IP g
        !          1536: nested global commands
        !          1537: .IP i
        !          1538: more than 52 files in initialization argument list
        !          1539: .IP k
        !          1540: bad bname in \fIk\fR command
        !          1541: .IP l
        !          1542: an internal table length was exceeded
        !          1543: .IP m
        !          1544: tried to move to an illegal place (e.g. 1,6m4)
        !          1545: .IP o
        !          1546: error opening or creating a file
        !          1547: .IP p
        !          1548: bad regular expression (pattern) syntax
        !          1549: .IP q
        !          1550: .I e
        !          1551: with the current changed flag set,
        !          1552: or
        !          1553: .I q
        !          1554: with any changed flag set
        !          1555: .IP r
        !          1556: read error from file
        !          1557: .IP s
        !          1558: no substitutions found
        !          1559: .IP t
        !          1560: bad \fIx\fR command data or single-case terminal
        !          1561: .IP u
        !          1562: no line for \fIu\fR command to undo
        !          1563: .IP x
        !          1564: command syntax error
        !          1565: .IP w
        !          1566: write error on file
        !          1567: .IP y
        !          1568: bad jump command (including popping the input buffer while scanning the label)
        !          1569: .IP z
        !          1570: bad register bname
        !          1571: .IP |
        !          1572: failure to create pipe for \fI<\fR, \fI|\fR or \fI>\fR command
        !          1573: .IP #
        !          1574: bad numeric register operation
        !          1575: .IP $
        !          1576: line address out of range
        !          1577: .IP ?
        !          1578: interrupt
        !          1579: .IP /
        !          1580: line search failed
        !          1581: .IP [
        !          1582: bad index in a register take or drop command
        !          1583: .IP \e
        !          1584: attempt to recursively append a buffer
        !          1585: .IP !
        !          1586: jackpot \(em you found a bug in regular expression matching
        !          1587: .PD
        !          1588: .PP
        !          1589: .SH "SEE ALSO"
        !          1590: qedbufs(1)
        !          1591: .br
        !          1592: A Tutorial Introduction to the ED Text Editor
        !          1593: (B. W. Kernighan)
        !          1594: .br
        !          1595: Programming in
        !          1596: .IR Qed :
        !          1597: a Tutorial
        !          1598: (Robert Pike)
        !          1599: .br
        !          1600: ed(1)
        !          1601: .SH "U of T INFO"
        !          1602: Written at U of T,
        !          1603: based on several incarnations of
        !          1604: .I ed,
        !          1605: with contributions from
        !          1606: Tom Duff, Robert Pike, Hugh Redelmeier and David Tilbrook.
        !          1607: .SH BUGS
        !          1608: The changed flag is not omniscient; changing the contents of
        !          1609: the file outside of
        !          1610: .I qed
        !          1611: will fool it.
        !          1612: .br
        !          1613: Xform \fIcould\fP work on single-case terminals, but backslashes
        !          1614: become very confusing for the user.
        !          1615: .br
        !          1616: On the PDP-11, numeric registers are 16-bit integers, but the
        !          1617: count is a 32-bit integer.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.