aboutsummaryrefslogtreecommitdiffstats
path: root/man-pages-posix-2003/man1p/ex.1p
diff options
context:
space:
mode:
Diffstat (limited to 'man-pages-posix-2003/man1p/ex.1p')
-rw-r--r--man-pages-posix-2003/man1p/ex.1p6061
1 files changed, 6061 insertions, 0 deletions
diff --git a/man-pages-posix-2003/man1p/ex.1p b/man-pages-posix-2003/man1p/ex.1p
new file mode 100644
index 0000000..474894a
--- /dev/null
+++ b/man-pages-posix-2003/man1p/ex.1p
@@ -0,0 +1,6061 @@
+.\" Copyright (c) 2001-2003 The Open Group, All Rights Reserved
+.TH "EX" 1P 2003 "IEEE/The Open Group" "POSIX Programmer's Manual"
+.\" ex
+.SH PROLOG
+This manual page is part of the POSIX Programmer's Manual.
+The Linux implementation of this interface may differ (consult
+the corresponding Linux manual page for details of Linux behavior),
+or the interface may not be implemented on Linux.
+.SH NAME
+ex \- text editor
+.SH SYNOPSIS
+.LP
+\fBex\fP \fB[\fP\fB-rR\fP\fB][\fP\fB-s | -v\fP\fB][\fP\fB-c\fP
+\fIcommand\fP\fB][\fP\fB-t\fP \fItagstring\fP\fB][\fP\fB-w\fP \fIsize\fP\fB][\fP\fIfile\fP
+\fB\&...\fP\fB]\fP\fB\fP
+.SH DESCRIPTION
+.LP
+The \fIex\fP utility is a line-oriented text editor. There are two
+other modes of the editor-open and visual-in which
+screen-oriented editing is available. This is described more fully
+by the \fIex\fP \fBopen\fP and \fBvisual\fP commands and in
+\fIvi\fP .
+.LP
+This section uses the term \fIedit buffer\fP to describe the current
+working text. No specific implementation is implied by
+this term. All editing changes are performed on the edit buffer, and
+no changes to it shall affect any file until an editor command
+writes the file.
+.LP
+Certain terminals do not have all the capabilities necessary to support
+the complete \fIex\fP definition, such as the
+full-screen editing commands ( \fIvisual mode\fP or \fIopen mode\fP).
+When these commands cannot be supported on such terminals,
+this condition shall not produce an error message such as "not an
+editor command" or report a syntax error. The implementation
+may either accept the commands and produce results on the screen that
+are the result of an unsuccessful attempt to meet the
+requirements of this volume of IEEE\ Std\ 1003.1-2001 or report an
+error describing the terminal-related deficiency.
+.SH OPTIONS
+.LP
+The \fIex\fP utility shall conform to the Base Definitions volume
+of IEEE\ Std\ 1003.1-2001, Section 12.2, Utility Syntax Guidelines.
+.LP
+The following options shall be supported:
+.TP 7
+\fB-c\ \fP \fIcommand\fP
+Specify an initial command to be executed in the first edit buffer
+loaded from an existing file (see the EXTENDED DESCRIPTION
+section). Implementations may support more than a single \fB-c\fP
+option. In such implementations, the specified commands shall be
+executed in the order specified on the command line.
+.TP 7
+\fB-r\fP
+Recover the named files (see the EXTENDED DESCRIPTION section). Recovery
+information for a file shall be saved during an editor
+or system crash (for example, when the editor is terminated by a signal
+which the editor can catch), or after the use of an
+\fIex\fP \fBpreserve\fP command.
+.LP
+A \fIcrash\fP in this context is an unexpected failure of the system
+or utility that requires restarting the failed system or
+utility. A system crash implies that any utilities running at the
+time also crash. In the case of an editor or system crash, the
+number of changes to the edit buffer (since the most recent \fBpreserve\fP
+command) that will be recovered is unspecified.
+.LP
+If no \fIfile\fP operands are given and the \fB-t\fP option is not
+specified, all other options, the \fIEXINIT\fP variable,
+and any \fB.exrc\fP files shall be ignored; a list of all recoverable
+files available to the invoking user shall be written, and
+the editor shall exit normally without further action.
+.TP 7
+\fB-R\fP
+Set \fBreadonly\fP edit option.
+.TP 7
+\fB-s\fP
+Prepare \fIex\fP for batch use by taking the following actions:
+.RS
+.IP " *" 3
+Suppress writing prompts and informational (but not diagnostic) messages.
+.LP
+.IP " *" 3
+Ignore the value of \fITERM\fP and any implementation default terminal
+type and assume the terminal is a type incapable of
+supporting open or visual modes; see the \fBvisual\fP command and
+the description of \fIvi\fP .
+.LP
+.IP " *" 3
+Suppress the use of the \fIEXINIT\fP environment variable and the
+reading of any \fB.exrc\fP file; see the EXTENDED
+DESCRIPTION section.
+.LP
+.IP " *" 3
+Suppress autoindentation, ignoring the value of the \fBautoindent\fP
+edit option.
+.LP
+.RE
+.TP 7
+\fB-t\ \fP \fItagstring\fP
+Edit the file containing the specified \fItagstring\fP; see \fIctags\fP
+\&. The tags feature
+represented by \fB-t\fP \fItagstring\fP and the \fBtag\fP command
+is optional. It shall be provided on any system that also
+provides a conforming implementation of \fIctags\fP; otherwise, the
+use of \fB-t\fP
+produces undefined results. On any system, it shall be an error to
+specify more than a single \fB-t\fP option.
+.TP 7
+\fB-v\fP
+Begin in visual mode (see \fIvi\fP ).
+.TP 7
+\fB-w\ \fP \fIsize\fP
+Set the value of the \fIwindow\fP editor option to \fIsize\fP.
+.sp
+.SH OPERANDS
+.LP
+The following operand shall be supported:
+.TP 7
+\fIfile\fP
+A pathname of a file to be edited.
+.sp
+.SH STDIN
+.LP
+The standard input consists of a series of commands and input text,
+as described in the EXTENDED DESCRIPTION section. The
+implementation may limit each line of standard input to a length of
+{LINE_MAX}.
+.LP
+If the standard input is not a terminal device, it shall be as if
+the \fB-s\fP option had been specified.
+.LP
+If a read from the standard input returns an error, or if the editor
+detects an end-of-file condition from the standard input,
+it shall be equivalent to a SIGHUP asynchronous event.
+.SH INPUT FILES
+.LP
+Input files shall be text files or files that would be text files
+except for an incomplete last line that is not longer than
+{LINE_MAX}-1 bytes in length and contains no NUL characters. By default,
+any incomplete last line shall be treated as if it had a
+trailing <newline>. The editing of other forms of files may optionally
+be allowed by \fIex\fP implementations.
+.LP
+The \fB.exrc\fP files and source files shall be text files consisting
+of \fIex\fP commands; see the EXTENDED DESCRIPTION
+section.
+.LP
+By default, the editor shall read lines from the files to be edited
+without interpreting any of those lines as any form of
+editor command.
+.SH ENVIRONMENT VARIABLES
+.LP
+The following environment variables shall affect the execution of
+\fIex\fP:
+.TP 7
+\fICOLUMNS\fP
+Override the system-selected horizontal screen size. See the Base
+Definitions volume of IEEE\ Std\ 1003.1-2001, Chapter 8, Environment
+Variables for valid values and results when it is unset or null.
+.TP 7
+\fIEXINIT\fP
+Determine a list of \fIex\fP commands that are executed on editor
+start-up. See the EXTENDED DESCRIPTION section for more
+details of the initialization phase.
+.TP 7
+\fIHOME\fP
+Determine a pathname of a directory that shall be searched for an
+editor start-up file named \fB.exrc\fP; see the EXTENDED
+DESCRIPTION section.
+.TP 7
+\fILANG\fP
+Provide a default value for the internationalization variables that
+are unset or null. (See the Base Definitions volume of
+IEEE\ Std\ 1003.1-2001, Section 8.2, Internationalization Variables
+for
+the precedence of internationalization variables used to determine
+the values of locale categories.)
+.TP 7
+\fILC_ALL\fP
+If set to a non-empty string value, override the values of all the
+other internationalization variables.
+.TP 7
+\fILC_COLLATE\fP
+.sp
+Determine the locale for the behavior of ranges, equivalence classes,
+and multi-character collating elements within regular
+expressions.
+.TP 7
+\fILC_CTYPE\fP
+Determine the locale for the interpretation of sequences of bytes
+of text data as characters (for example, single-byte as
+opposed to multi-byte characters in arguments and input files), the
+behavior of character classes within regular expressions, the
+classification of characters as uppercase or lowercase letters, the
+case conversion of letters, and the detection of word
+boundaries.
+.TP 7
+\fILC_MESSAGES\fP
+Determine the locale that should be used to affect the format and
+contents of diagnostic messages written to standard
+error.
+.TP 7
+\fILINES\fP
+Override the system-selected vertical screen size, used as the number
+of lines in a screenful and the vertical screen size in
+visual mode. See the Base Definitions volume of IEEE\ Std\ 1003.1-2001,
+Chapter 8,
+Environment Variables for valid values and results when it is unset
+or null.
+.TP 7
+\fINLSPATH\fP
+Determine the location of message catalogs for the processing of \fILC_MESSAGES
+\&.\fP
+.TP 7
+\fIPATH\fP
+Determine the search path for the shell command specified in the \fIex\fP
+editor commands \fB!\fP, \fBshell\fP, \fBread\fP,
+and \fBwrite\fP, and the open and visual mode command \fB!\fP; see
+the description of command search and execution in \fICommand Search
+and Execution\fP .
+.TP 7
+\fISHELL\fP
+Determine the preferred command line interpreter for use as the default
+value of the \fBshell\fP edit option.
+.TP 7
+\fITERM\fP
+Determine the name of the terminal type. If this variable is unset
+or null, an unspecified default terminal type shall be
+used.
+.sp
+.SH ASYNCHRONOUS EVENTS
+.LP
+The following term is used in this and following sections to specify
+command and asynchronous event actions:
+.TP 7
+\fIcomplete\ write\fP
+.sp
+A complete write is a write of the entire contents of the edit buffer
+to a file of a type other than a terminal device, or the
+saving of the edit buffer caused by the user executing the \fIex\fP
+\fBpreserve\fP command. Writing the contents of the edit
+buffer to a temporary file that will be removed when the editor exits
+shall not be considered a complete write.
+.sp
+.LP
+The following actions shall be taken upon receipt of signals:
+.TP 7
+SIGINT
+If the standard input is not a terminal device, \fIex\fP shall not
+write the file or return to command or text input mode, and
+shall exit with a non-zero exit status.
+.LP
+Otherwise, if executing an open or visual text input mode command,
+\fIex\fP in receipt of SIGINT shall behave identically to
+its receipt of the <ESC> character.
+.LP
+Otherwise:
+.RS
+.IP " 1." 4
+If executing an \fIex\fP text input mode command, all input lines
+that have been completely entered shall be resolved into the
+edit buffer, and any partially entered line shall be discarded.
+.LP
+.IP " 2." 4
+If there is a currently executing command, it shall be aborted and
+a message displayed. Unless otherwise specified by the
+\fIex\fP or \fIvi\fP command descriptions, it is unspecified whether
+any lines modified by the
+executing command appear modified, or as they were before being modified
+by the executing command, in the buffer.
+.LP
+If the currently executing command was a motion command, its associated
+command shall be discarded.
+.LP
+.IP " 3." 4
+If in open or visual command mode, the terminal shall be alerted.
+.LP
+.IP " 4." 4
+The editor shall then return to command mode.
+.LP
+.RE
+.TP 7
+SIGCONT
+The screen shall be refreshed if in open or visual mode.
+.TP 7
+SIGHUP
+If the edit buffer has been modified since the last complete write,
+\fIex\fP shall attempt to save the edit buffer so that it
+can be recovered later using the \fB-r\fP option or the \fIex\fP \fBrecover\fP
+command. The editor shall not write the file or
+return to command or text input mode, and shall terminate with a non-zero
+exit status.
+.TP 7
+SIGTERM
+Refer to SIGHUP.
+.sp
+.LP
+The action taken for all other signals is unspecified.
+.SH STDOUT
+.LP
+The standard output shall be used only for writing prompts to the
+user, for informational messages, and for writing lines from
+the file.
+.SH STDERR
+.LP
+The standard error shall be used only for diagnostic messages.
+.SH OUTPUT FILES
+.LP
+The output from \fIex\fP shall be text files.
+.SH EXTENDED DESCRIPTION
+.LP
+Only the \fIex\fP mode of the editor is described in this section.
+See \fIvi\fP for additional editing
+capabilities available in \fIex\fP.
+.LP
+When an error occurs, \fIex\fP shall write a message. If the terminal
+supports a standout mode (such as inverse video), the
+message shall be written in standout mode. If the terminal does not
+support a standout mode, and the edit option \fBerrorbells\fP
+is set, an alert action shall precede the error message.
+.LP
+By default, \fIex\fP shall start in command mode, which shall be indicated
+by a \fB:\fP prompt; see the \fBprompt\fP command.
+Text input mode can be entered by the \fBappend\fP, \fBinsert\fP,
+or \fBchange\fP commands; it can be exited (and command mode
+re-entered) by typing a period ( \fB'.'\fP ) alone at the beginning
+of a line.
+.SS Initialization in ex and vi
+.LP
+The following symbols are used in this and following sections to specify
+locations in the edit buffer:
+.TP 7
+\fIalternate\ and\ current\ pathnames\fP
+.sp
+Two pathnames, named \fIcurrent\fP and \fIalternate\fP, are maintained
+by the editor. Any \fIex\fP commands that take filenames
+as arguments shall set them as follows:
+.RS
+.IP " 1." 4
+If a \fIfile\fP argument is specified to the \fIex\fP \fBedit\fP,
+\fBex\fP, or \fBrecover\fP commands, or if an \fIex\fP
+\fBtag\fP command replaces the contents of the edit buffer.
+.RS
+.IP " a." 4
+If the command replaces the contents of the edit buffer, the current
+pathname shall be set to the \fIfile\fP argument or the
+file indicated by the tag, and the alternate pathname shall be set
+to the previous value of the current pathname.
+.LP
+.IP " b." 4
+Otherwise, the alternate pathname shall be set to the \fIfile\fP argument.
+.LP
+.RE
+.LP
+.IP " 2." 4
+If a \fIfile\fP argument is specified to the \fIex\fP \fBnext\fP command:
+.RS
+.IP " a." 4
+If the command replaces the contents of the edit buffer, the current
+pathname shall be set to the first \fIfile\fP argument,
+and the alternate pathname shall be set to the previous value of the
+current pathname.
+.LP
+.RE
+.LP
+.IP " 3." 4
+If a \fIfile\fP argument is specified to the \fIex\fP \fBfile\fP command,
+the current pathname shall be set to the
+\fIfile\fP argument, and the alternate pathname shall be set to the
+previous value of the current pathname.
+.LP
+.IP " 4." 4
+If a \fIfile\fP argument is specified to the \fIex\fP \fBread\fP and
+\fBwrite\fP commands (that is, when reading or writing
+a file, and not to the program named by the \fBshell\fP edit option),
+or a \fIfile\fP argument is specified to the \fIex\fP
+\fBxit\fP command:
+.RS
+.IP " a." 4
+If the current pathname has no value, the current pathname shall be
+set to the \fIfile\fP argument.
+.LP
+.IP " b." 4
+Otherwise, the alternate pathname shall be set to the \fIfile\fP argument.
+.LP
+.RE
+.LP
+.RE
+.LP
+If the alternate pathname is set to the previous value of the current
+pathname when the current pathname had no previous value,
+then the alternate pathname shall have no value as a result.
+.TP 7
+\fIcurrent\ line\fP
+.sp
+The line of the edit buffer referenced by the cursor. Each command
+description specifies the current line after the command has
+been executed, as the \fIcurrent line value\fP. When the edit buffer
+contains no lines, the current line shall be zero; see Addressing
+in ex .
+.TP 7
+\fIcurrent\ column\fP
+.sp
+The current display line column occupied by the cursor. (The columns
+shall be numbered beginning at 1.) Each command description
+specifies the current column after the command has been executed,
+as the \fIcurrent column\fP value. This column is an
+\fIideal\fP column that is remembered over the lifetime of the editor.
+The actual display line column upon which the cursor rests
+may be different from the current column; see the cursor positioning
+discussion in \fICommand
+Descriptions in vi\fP .
+.TP 7
+\fIset\ to\ non-<blank>\fP
+.sp
+A description for a current column value, meaning that the current
+column shall be set to the last display line column on which is
+displayed any part of the first non- <blank> of the line. If the line
+has no non- <blank> non- <newline>s, the
+current column shall be set to the last display line column on which
+is displayed any part of the last non- <newline> in the
+line. If the line is empty, the current column shall be set to column
+position 1.
+.sp
+.LP
+The length of lines in the edit buffer may be limited to {LINE_MAX}
+bytes. In open and visual mode, the length of lines in the
+edit buffer may be limited to the number of characters that will fit
+in the display. If either limit is exceeded during editing, an
+error message shall be written. If either limit is exceeded by a line
+read in from a file, an error message shall be written and
+the edit session may be terminated.
+.LP
+If the editor stops running due to any reason other than a user command,
+and the edit buffer has been modified since the last
+complete write, it shall be equivalent to a SIGHUP asynchronous event.
+If the system crashes, it shall be equivalent to a SIGHUP
+asynchronous event.
+.LP
+During initialization (before the first file is copied into the edit
+buffer or any user commands from the terminal are
+processed) the following shall occur:
+.IP " 1." 4
+If the environment variable \fIEXINIT\fP is set, the editor shall
+execute the \fIex\fP commands contained in that
+variable.
+.LP
+.IP " 2." 4
+If the \fIEXINIT\fP variable is not set, and all of the following
+are true:
+.RS
+.IP " a." 4
+The \fIHOME\fP environment variable is not null and not empty.
+.LP
+.IP " b." 4
+The file \fB.exrc\fP in the directory referred to by the \fIHOME\fP
+environment variable:
+.RS
+.IP " 1." 4
+Exists
+.LP
+.IP " 2." 4
+Is owned by the same user ID as the real user ID of the process or
+the process has appropriate privileges
+.LP
+.IP " 3." 4
+Is not writable by anyone other than the owner
+.LP
+.RE
+.LP
+.RE
+.LP
+the editor shall execute the \fIex\fP commands contained in that file.
+.LP
+.IP " 3." 4
+If and only if all of the following are true:
+.RS
+.IP " a." 4
+The current directory is not referred to by the \fIHOME\fP environment
+variable.
+.LP
+.IP " b." 4
+A command in the \fIEXINIT\fP environment variable or a command in
+the \fB.exrc\fP file in the directory referred to by the
+\fIHOME\fP environment variable sets the editor option \fBexrc\fP.
+.LP
+.IP " c." 4
+The \fB.exrc\fP file in the current directory:
+.RS
+.IP " 1." 4
+Exists
+.LP
+.IP " 2." 4
+Is owned by the same user ID as the real user ID of the process, or
+by one of a set of implementation-defined user IDs
+.LP
+.IP " 3." 4
+Is not writable by anyone other than the owner
+.LP
+.RE
+.LP
+.RE
+.LP
+the editor shall attempt to execute the \fIex\fP commands contained
+in that file.
+.LP
+.LP
+Lines in any \fB.exrc\fP file that are blank lines shall be ignored.
+If any \fB.exrc\fP file exists, but is not read for
+ownership or permission reasons, it shall be an error.
+.LP
+After the \fIEXINIT\fP variable and any \fB.exrc\fP files are processed,
+the first file specified by the user shall be edited,
+as follows:
+.IP " 1." 4
+If the user specified the \fB-t\fP option, the effect shall be as
+if the \fIex\fP \fBtag\fP command was entered with the
+specified argument, with the exception that if tag processing does
+not result in a file to edit, the effect shall be as described
+in step 3. below.
+.LP
+.IP " 2." 4
+Otherwise, if the user specified any command line \fIfile\fP arguments,
+the effect shall be as if the \fIex\fP \fBedit\fP
+command was entered with the first of those arguments as its \fIfile\fP
+argument.
+.LP
+.IP " 3." 4
+Otherwise, the effect shall be as if the \fIex\fP \fBedit\fP command
+was entered with a nonexistent filename as its
+\fIfile\fP argument. It is unspecified whether this action shall set
+the current pathname. In an implementation where this action
+does not set the current pathname, any editor command using the current
+pathname shall fail until an editor command sets the
+current pathname.
+.LP
+.LP
+If the \fB-r\fP option was specified, the first time a file in the
+initial argument list or a file specified by the \fB-t\fP
+option is edited, if recovery information has previously been saved
+about it, that information shall be recovered and the editor
+shall behave as if the contents of the edit buffer have already been
+modified. If there are multiple instances of the file to be
+recovered, the one most recently saved shall be recovered, and an
+informational message that there are previous versions of the
+file that can be recovered shall be written. If no recovery information
+about a file is available, an informational message to this
+effect shall be written, and the edit shall proceed as usual.
+.LP
+If the \fB-c\fP option was specified, the first time a file that already
+exists (including a file that might not exist but for
+which recovery information is available, when the \fB-r\fP option
+is specified) replaces or initializes the contents of the edit
+buffer, the current line shall be set to the last line of the edit
+buffer, the current column shall be set to non- <blank>,
+and the \fIex\fP commands specified with the \fB-c\fP option shall
+be executed. In this case, the current line and current column
+shall not be set as described for the command associated with the
+replacement or initialization of the edit buffer contents.
+However, if the \fB-t\fP option or a \fBtag\fP command is associated
+with this action, the \fB-c\fP option commands shall be
+executed and then the movement to the tag shall be performed.
+.LP
+The current argument list shall initially be set to the filenames
+specified by the user on the command line. If no filenames are
+specified by the user, the current argument list shall be empty. If
+the \fB-t\fP option was specified, it is unspecified whether
+any filename resulting from tag processing shall be prepended to the
+current argument list. In the case where the filename is added
+as a prefix to the current argument list, the current argument list
+reference shall be set to that filename. In the case where the
+filename is not added as a prefix to the current argument list, the
+current argument list reference shall logically be located
+before the first of the filenames specified on the command line (for
+example, a subsequent \fIex\fP \fBnext\fP command shall edit
+the first filename from the command line). If the \fB-t\fP option
+was not specified, the current argument list reference shall be
+to the first of the filenames on the command line.
+.SS Addressing in ex
+.LP
+Addressing in \fIex\fP relates to the current line and the current
+column; the address of a line is its 1-based line number,
+the address of a column is its 1-based count from the beginning of
+the line. Generally, the current line is the last line affected
+by a command. The current line number is the address of the current
+line. In each command description, the effect of the command on
+the current line number and the current column is described.
+.LP
+Addresses are constructed as follows:
+.IP " 1." 4
+The character \fB'.'\fP (period) shall address the current line.
+.LP
+.IP " 2." 4
+The character \fB'$'\fP shall address the last line of the edit buffer.
+.LP
+.IP " 3." 4
+The positive decimal number \fIn\fP shall address the \fIn\fPth line
+of the edit buffer.
+.LP
+.IP " 4." 4
+The address \fB"'x"\fP refers to the line marked with the mark name
+character \fB'x'\fP, which shall be a lowercase
+letter from the portable character set or one of the characters \fB'`'\fP
+or \fB'"\fP . It shall be an error if the line
+that was marked is not currently present in the edit buffer or the
+mark has not been set. Lines can be marked with the \fIex\fP
+\fBmark\fP or \fBk\fP commands, or the \fIvi\fP \fBm\fP command.
+.LP
+.IP " 5." 4
+A regular expression enclosed by slashes ( \fB'/'\fP ) shall address
+the first line found by searching forwards from the line
+following the current line toward the end of the edit buffer and stopping
+at the first line for which the line excluding the
+terminating <newline> matches the regular expression. As stated in
+Regular Expressions in ex,
+an address consisting of a null regular expression delimited by slashes
+\fB"//"\fP shall address the next line for which the
+line excluding the terminating <newline> matches the last regular
+expression encountered. In addition, the second slash can
+be omitted at the end of a command line. If the \fBwrapscan\fP edit
+option is set, the search shall wrap around to the beginning
+of the edit buffer and continue up to and including the current line,
+so that the entire edit buffer is searched. Within the
+regular expression, the sequence \fB"\\/"\fP shall represent a literal
+slash instead of the regular expression delimiter.
+.LP
+.IP " 6." 4
+A regular expression enclosed in question marks ( \fB'?'\fP ) shall
+address the first line found by searching backwards from
+the line preceding the current line toward the beginning of the edit
+buffer and stopping at the first line for which the line
+excluding the terminating <newline> matches the regular expression.
+An address consisting of a null regular expression
+delimited by question marks \fB"??"\fP shall address the previous
+line for which the line excluding the terminating
+<newline> matches the last regular expression encountered. In addition,
+the second question mark can be omitted at the end of
+a command line. If the \fBwrapscan\fP edit option is set, the search
+shall wrap around from the beginning of the edit buffer to
+the end of the edit buffer and continue up to and including the current
+line, so that the entire edit buffer is searched. Within
+the regular expression, the sequence \fB"\\?"\fP shall represent a
+literal question mark instead of the RE delimiter.
+.LP
+.IP " 7." 4
+A plus sign ( \fB'+'\fP ) or a minus sign ( \fB'-'\fP ) followed by
+a decimal number shall address the current line plus
+or minus the number. A \fB'+'\fP or \fB'-'\fP not followed by a decimal
+number shall address the current line plus or minus
+1.
+.LP
+.LP
+Addresses can be followed by zero or more address offsets, optionally
+<blank>-separated. Address offsets are constructed
+as follows:
+.IP " 1." 4
+A \fB'+'\fP or \fB'-'\fP immediately followed by a decimal number
+shall add (subtract) the indicated number of lines to
+(from) the address. A \fB'+'\fP or \fB'-'\fP not followed by a decimal
+number shall add (subtract) 1 to (from) the
+address.
+.LP
+.IP " 2." 4
+A decimal number shall add the indicated number of lines to the address.
+.LP
+.LP
+It shall not be an error for an intermediate address value to be less
+than zero or greater than the last line in the edit
+buffer. It shall be an error for the final address value to be less
+than zero or greater than the last line in the edit buffer.
+.LP
+Commands take zero, one, or two addresses; see the descriptions of
+\fI1addr\fP and \fI2addr\fP in Command Descriptions in ex . If more
+than the required number of addresses are provided to a command that
+requires zero addresses, it shall be an error. Otherwise, if more
+than the required number of addresses are provided to a command,
+the addresses specified first shall be evaluated and then discarded
+until the maximum number of valid addresses remain.
+.LP
+Addresses shall be separated from each other by a comma ( \fB','\fP
+) or a semicolon ( \fB';'\fP ). If no address is
+specified before or after a comma or semicolon separator, it shall
+be as if the address of the current line was specified before or
+after the separator. In the case of a semicolon separator, the current
+line ( \fB'.'\fP ) shall be set to the first address, and
+only then will the next address be calculated. This feature can be
+used to determine the starting line for forwards and backwards
+searches (see rules 5. and 6.).
+.LP
+A percent sign ( \fB'%'\fP ) shall be equivalent to entering the two
+addresses \fB"1,$"\fP .
+.LP
+Any delimiting <blank>s between addresses, address separators, or
+address offsets shall be discarded.
+.SS Command Line Parsing in ex
+.LP
+The following symbol is used in this and following sections to describe
+parsing behavior:
+.TP 7
+\fIescape\fP
+If a character is referred to as "backslash-escaped" or " <control>-V-escaped,"
+it shall mean that the character
+acquired or lost a special meaning by virtue of being preceded, respectively,
+by a backslash or <control>-V character. Unless
+otherwise specified, the escaping character shall be discarded at
+that time and shall not be further considered for any
+purpose.
+.sp
+.LP
+Command-line parsing shall be done in the following steps. For each
+step, characters already evaluated shall be ignored; that
+is, the phrase "leading character" refers to the next character that
+has not yet been evaluated.
+.IP " 1." 4
+Leading colon characters shall be skipped.
+.LP
+.IP " 2." 4
+Leading <blank>s shall be skipped.
+.LP
+.IP " 3." 4
+If the leading character is a double-quote character, the characters
+up to and including the next non-backslash-escaped
+<newline> shall be discarded, and any subsequent characters shall
+be parsed as a separate command.
+.LP
+.IP " 4." 4
+Leading characters that can be interpreted as addresses shall be evaluated;
+see Addressing in ex
+\&.
+.LP
+.IP " 5." 4
+Leading <blank>s shall be skipped.
+.LP
+.IP " 6." 4
+If the next character is a vertical-line character or a <newline>:
+.RS
+.IP " a." 4
+If the next character is a <newline>:
+.RS
+.IP " 1." 4
+If \fIex\fP is in open or visual mode, the current line shall be set
+to the last address specified, if any.
+.LP
+.IP " 2." 4
+Otherwise, if the last command was terminated by a vertical-line character,
+no action shall be taken; for example, the command
+\fB"||<newline>"\fP shall execute two implied commands, not three.
+.LP
+.IP " 3." 4
+Otherwise, step 6.b. shall apply.
+.LP
+.RE
+.LP
+.IP " b." 4
+Otherwise, the implied command shall be the \fBprint\fP command. The
+last \fB#\fP, \fBp\fP, and \fBl\fP flags specified to
+any \fIex\fP command shall be remembered and shall apply to this implied
+command. Executing the \fIex\fP \fBnumber\fP,
+\fBprint\fP, or \fBlist\fP command shall set the remembered flags
+to \fB#\fP, nothing, and \fBl\fP, respectively, plus any
+other flags specified for that execution of the \fBnumber\fP, \fBprint\fP,
+or \fBlist\fP command.
+.LP
+If \fIex\fP is not currently performing a \fBglobal\fP or \fBv\fP
+command, and no address or count is specified, the current
+line shall be incremented by 1 before the command is executed. If
+incrementing the current line would result in an address past the
+last line in the edit buffer, the command shall fail, and the increment
+shall not happen.
+.LP
+.IP " c." 4
+The <newline> or vertical-line character shall be discarded and any
+subsequent characters shall be parsed as a separate
+command.
+.LP
+.RE
+.LP
+.IP " 7." 4
+The command name shall be comprised of the next character (if the
+character is not alphabetic), or the next character and any
+subsequent alphabetic characters (if the character is alphabetic),
+with the following exceptions:
+.RS
+.IP " a." 4
+Commands that consist of any prefix of the characters in the command
+name \fBdelete\fP, followed immediately by any of the
+characters \fB'l'\fP, \fB'p'\fP, \fB'+'\fP, \fB'-'\fP, or \fB'#'\fP
+shall be interpreted as a \fBdelete\fP
+command, followed by a <blank>, followed by the characters that were
+not part of the prefix of the \fBdelete\fP command. The
+maximum number of characters shall be matched to the command name
+\fBdelete\fP; for example, \fB"del"\fP shall not be treated
+as \fB"de"\fP followed by the flag \fBl\fP.
+.LP
+.IP " b." 4
+Commands that consist of the character \fB'k'\fP, followed by a character
+that can be used as the name of a mark, shall be
+equivalent to the mark command followed by a <blank>, followed by
+the character that followed the \fB'k'\fP .
+.LP
+.IP " c." 4
+Commands that consist of the character \fB's'\fP, followed by characters
+that could be interpreted as valid options to the
+\fBs\fP command, shall be the equivalent of the \fBs\fP command, without
+any pattern or replacement values, followed by a
+<blank>, followed by the characters after the \fB's'\fP .
+.LP
+.RE
+.LP
+.IP " 8." 4
+The command name shall be matched against the possible command names,
+and a command name that contains a prefix matching the
+characters specified by the user shall be the executed command. In
+the case of commands where the characters specified by the user
+could be ambiguous, the executed command shall be as follows:
+.TS C
+center; l l l l l l l l.
+\fBa\fP \fBappend\fP n \fBnext\fP \fBt\fP t \fB\ \fP \fB\ \fP
+\fBc\fP \fBchange\fP p \fBprint\fP \fBu\fP undo \fB\ \fP \fB\ \fP
+\fBch\fP \fBchange\fP pr \fBprint\fP \fBun\fP undo \fB\ \fP \fB\ \fP
+\fBe\fP \fBedit\fP r \fBread\fP \fBv\fP v \fB\ \fP \fB\ \fP
+\fBm\fP \fBmove\fP re \fBread\fP \fBw\fP write \fB\ \fP \fB\ \fP
+\fBma\fP \fBmark\fP s \fBs\fP \fB\ \fP \ \fB\ \fP \fB\ \fP
+.TE
+.LP
+Implementation extensions with names causing similar ambiguities shall
+not be checked for a match until all possible matches for
+commands specified by IEEE\ Std\ 1003.1-2001 have been checked.
+.LP
+.IP " 9." 4
+If the command is a \fB!\fP command, or if the command is a \fBread\fP
+command followed by zero or more <blank>s and a
+\fB!\fP, or if the command is a \fBwrite\fP command followed by one
+or more <blank>s and a \fB!\fP, the rest of the
+command shall include all characters up to a non-backslash-escaped
+<newline>. The <newline> shall be discarded and any
+subsequent characters shall be parsed as a separate \fIex\fP command.
+.LP
+.IP "10." 4
+Otherwise, if the command is an \fBedit\fP, \fBex\fP, or \fBnext\fP
+command, or a \fBvisual\fP command while in open or
+visual mode, the next part of the command shall be parsed as follows:
+.RS
+.IP " a." 4
+Any \fB'!'\fP character immediately following the command shall be
+skipped and be part of the command.
+.LP
+.IP " b." 4
+Any leading <blank>s shall be skipped and be part of the command.
+.LP
+.IP " c." 4
+If the next character is a \fB'+'\fP, characters up to the first
+non-backslash-escaped <newline> or
+non-backslash-escaped <blank> shall be skipped and be part of the
+command.
+.LP
+.IP " d." 4
+The rest of the command shall be determined by the steps specified
+in paragraph 12.
+.LP
+.RE
+.LP
+.IP "11." 4
+Otherwise, if the command is a \fBglobal\fP, \fBopen\fP, \fBs\fP,
+or \fBv\fP command, the next part of the command shall be
+parsed as follows:
+.RS
+.IP " a." 4
+Any leading <blank>s shall be skipped and be part of the command.
+.LP
+.IP " b." 4
+If the next character is not an alphanumeric, double-quote, <newline>,
+backslash, or vertical-line character:
+.RS
+.IP " 1." 4
+The next character shall be used as a command delimiter.
+.LP
+.IP " 2." 4
+If the command is a \fBglobal\fP, \fBopen\fP, or \fBv\fP command,
+characters up to the first non-backslash-escaped
+<newline>, or first non-backslash-escaped delimiter character, shall
+be skipped and be part of the command.
+.LP
+.IP " 3." 4
+If the command is an \fBs\fP command, characters up to the first non-backslash-escaped
+<newline>, or second
+non-backslash-escaped delimiter character, shall be skipped and be
+part of the command.
+.LP
+.RE
+.LP
+.IP " c." 4
+If the command is a \fBglobal\fP or \fBv\fP command, characters up
+to the first non-backslash-escaped <newline> shall be
+skipped and be part of the command.
+.LP
+.IP " d." 4
+Otherwise, the rest of the command shall be determined by the steps
+specified in paragraph 12.
+.LP
+.RE
+.LP
+.IP "12." 4
+Otherwise:
+.RS
+.IP " a." 4
+If the command was a \fBmap\fP, \fBunmap\fP, \fBabbreviate\fP, or
+\fBunabbreviate\fP command, characters up to the first
+non- <control>-V-escaped <newline>, vertical-line, or double-quote
+character shall be skipped and be part of the
+command.
+.LP
+.IP " b." 4
+Otherwise, characters up to the first non-backslash-escaped <newline>,
+vertical-line, or double-quote character shall be
+skipped and be part of the command.
+.LP
+.IP " c." 4
+If the command was an \fBappend\fP, \fBchange\fP, or \fBinsert\fP
+command, and the step 12.b. ended at a vertical-line
+character, any subsequent characters, up to the next non-backslash-escaped
+<newline> shall be used as input text to the
+command.
+.LP
+.IP " d." 4
+If the command was ended by a double-quote character, all subsequent
+characters, up to the next non-backslash-escaped
+<newline>, shall be discarded.
+.LP
+.IP " e." 4
+The terminating <newline> or vertical-line character shall be discarded
+and any subsequent characters shall be parsed as a
+separate \fIex\fP command.
+.LP
+.RE
+.LP
+.LP
+Command arguments shall be parsed as described by the Synopsis and
+Description of each individual \fIex\fP command. This
+parsing shall not be <blank>-sensitive, except for the \fB!\fP argument,
+which must follow the command name without
+intervening <blank>s, and where it would otherwise be ambiguous. For
+example, \fIcount\fP and \fIflag\fP arguments need not
+be <blank>-separated because \fB"d22p"\fP is not ambiguous, but \fIfile\fP
+arguments to the \fIex\fP \fBnext\fP command
+must be separated by one or more <blank>s. Any <blank> in command
+arguments for the \fBabbreviate\fP,
+\fBunabbreviate\fP, \fBmap\fP, and \fBunmap\fP commands can be <control>-V-escaped,
+in which case the <blank> shall
+not be used as an argument delimiter. Any <blank> in the command argument
+for any other command can be backslash-escaped, in
+which case that <blank> shall not be used as an argument delimiter.
+.LP
+Within command arguments for the \fBabbreviate\fP, \fBunabbreviate\fP,
+\fBmap\fP, and \fBunmap\fP commands, any character
+can be <control>-V-escaped. All such escaped characters shall be treated
+literally and shall have no special meaning. Within
+command arguments for all other \fIex\fP commands that are not regular
+expressions or replacement strings, any character that
+would otherwise have a special meaning can be backslash-escaped. Escaped
+characters shall be treated literally, without special
+meaning as shell expansion characters or \fB'!'\fP, \fB'%'\fP, and
+\fB'#'\fP expansion characters. See Regular Expressions in ex and
+Replacement Strings in ex for descriptions of
+command arguments that are regular expressions or replacement strings.
+.LP
+Non-backslash-escaped \fB'%'\fP characters appearing in \fIfile\fP
+arguments to any \fIex\fP command shall be replaced by
+the current pathname; unescaped \fB'#'\fP characters shall be replaced
+by the alternate pathname. It shall be an error if
+\fB'%'\fP or \fB'#'\fP characters appear unescaped in an argument
+and their corresponding values are not set.
+.LP
+Non-backslash-escaped \fB'!'\fP characters in the arguments to either
+the \fIex\fP \fB!\fP command or the open and visual
+mode \fB!\fP command, or in the arguments to the \fIex\fP \fBread\fP
+command, where the first non- <blank> after the
+command name is a \fB'!'\fP character, or in the arguments to the
+\fIex\fP \fBwrite\fP command where the command name is
+followed by one or more <blank>s and the first non- <blank> after
+the command name is a \fB'!'\fP character, shall
+be replaced with the arguments to the last of those three commands
+as they appeared after all unescaped \fB'%'\fP, \fB'#'\fP,
+and \fB'!'\fP characters were replaced. It shall be an error if
+\fB'!'\fP characters appear unescaped in one of these
+commands and there has been no previous execution of one of these
+commands.
+.LP
+If an error occurs during the parsing or execution of an \fIex\fP
+command:
+.IP " *" 3
+An informational message to this effect shall be written. Execution
+of the \fIex\fP command shall stop, and the cursor (for
+example, the current line and column) shall not be further modified.
+.LP
+.IP " *" 3
+If the \fIex\fP command resulted from a map expansion, all characters
+from that map expansion shall be discarded, except as
+otherwise specified by the \fBmap\fP command.
+.LP
+.IP " *" 3
+Otherwise, if the \fIex\fP command resulted from the processing of
+an \fIEXINIT\fP environment variable, a \fB.exrc\fP file,
+a \fB:source\fP command, a \fB-c\fP option, or a \fB+\fP \fIcommand\fP
+specified to an \fIex\fP \fBedit\fP, \fBex\fP,
+\fBnext\fP, or \fBvisual\fP command, no further commands from the
+source of the commands shall be executed.
+.LP
+.IP " *" 3
+Otherwise, if the \fIex\fP command resulted from the execution of
+a buffer or a \fBglobal\fP or \fBv\fP command, no further
+commands caused by the execution of the buffer or the \fBglobal\fP
+or \fBv\fP command shall be executed.
+.LP
+.IP " *" 3
+Otherwise, if the \fIex\fP command was not terminated by a <newline>,
+all characters up to and including the next
+non-backslash-escaped <newline> shall be discarded.
+.LP
+.SS Input Editing in ex
+.LP
+The following symbol is used in this and the following sections to
+specify command actions:
+.TP 7
+\fIword\fP
+In the POSIX locale, a word consists of a maximal sequence of letters,
+digits, and underscores, delimited at both ends by
+characters other than letters, digits, or underscores, or by the beginning
+or end of a line or the edit buffer.
+.sp
+.LP
+When accepting input characters from the user, in either \fIex\fP
+command mode or \fIex\fP text input mode, \fIex\fP shall
+enable canonical mode input processing, as defined in the System Interfaces
+volume of IEEE\ Std\ 1003.1-2001.
+.LP
+If in \fIex\fP text input mode:
+.IP " 1." 4
+If the \fBnumber\fP edit option is set, \fIex\fP shall prompt for
+input using the line number that would be assigned to the
+line if it is entered, in the format specified for the \fIex\fP \fBnumber\fP
+command.
+.LP
+.IP " 2." 4
+If the \fBautoindent\fP edit option is set, \fIex\fP shall prompt
+for input using \fBautoindent\fP characters, as described
+by the \fBautoindent\fP edit option. \fBautoindent\fP characters shall
+follow the line number, if any.
+.LP
+.LP
+If in \fIex\fP command mode:
+.IP " 1." 4
+If the \fBprompt\fP edit option is set, input shall be prompted for
+using a single \fB':'\fP character; otherwise, there
+shall be no prompt.
+.LP
+.LP
+The input characters in the following sections shall have the following
+effects on the input line.
+.SS Scroll
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBeof
+\fP
+.fi
+.RE
+.sp
+.LP
+See the description of the \fIstty\fP \fIeof\fP character in \fIstty\fP
+\&.
+.LP
+If in \fIex\fP command mode:
+If the \fIeof\fP character is the first character entered on the line,
+the line shall be evaluated as if it contained
+two characters: a <control>-D and a <newline>.
+.LP
+Otherwise, the \fIeof\fP character shall have no special meaning.
+.sp
+.LP
+If in \fIex\fP text input mode:
+If the cursor follows an \fBautoindent\fP character, the \fBautoindent\fP
+characters in the line shall be modified so
+that a part of the next text input character will be displayed on
+the first column in the line after the previous \fBshiftwidth\fP
+edit option column boundary, and the user shall be prompted again
+for input for the same line.
+.LP
+Otherwise, if the cursor follows a \fB'0'\fP, which follows an \fBautoindent\fP
+character, and the \fB'0'\fP was the
+previous text input character, the \fB'0'\fP and all \fBautoindent\fP
+characters in the line shall be discarded, and the user
+shall be prompted again for input for the same line.
+.LP
+Otherwise, if the cursor follows a \fB'^'\fP, which follows an \fBautoindent\fP
+character, and the \fB'^'\fP was the
+previous text input character, the \fB'^'\fP and all \fBautoindent\fP
+characters in the line shall be discarded, and the user
+shall be prompted again for input for the same line. In addition,
+the \fBautoindent\fP level for the next input line shall be
+derived from the same line from which the \fBautoindent\fP level for
+the current input line was derived.
+.LP
+Otherwise, if there are no \fBautoindent\fP or text input characters
+in the line, the \fIeof\fP character shall be
+discarded.
+.LP
+Otherwise, the \fIeof\fP character shall have no special meaning.
+.SS <newline>
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB<newline>
+.sp
+
+<control>-J
+\fP
+.fi
+.RE
+.sp
+.LP
+If in \fIex\fP command mode:
+Cause the command line to be parsed; <control>-J shall be mapped to
+the <newline> for this
+purpose.
+.LP
+If in \fIex\fP text input mode:
+Terminate the current line. If there are no characters other than
+\fBautoindent\fP characters on the line, all
+characters on the line shall be discarded.
+.LP
+Prompt for text input on a new line after the current line. If the
+\fBautoindent\fP edit option is set, an appropriate number
+of \fBautoindent\fP characters shall be added as a prefix to the line
+as described by the \fIex\fP \fBautoindent\fP edit
+option.
+.SS <backslash>
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB<backslash>
+\fP
+.fi
+.RE
+.sp
+.LP
+Allow the entry of a subsequent <newline> or <control>-J as a literal
+character, removing any special meaning that
+it may have to the editor during text input mode. The backslash character
+shall be retained and evaluated when the command line is
+parsed, or retained and included when the input text becomes part
+of the edit buffer.
+.SS <control>-V
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB<control>-V
+\fP
+.fi
+.RE
+.sp
+.LP
+Allow the entry of any subsequent character as a literal character,
+removing any special meaning that it may have to the editor
+during text input mode. The <control>-V character shall be discarded
+before the command line is parsed or the input text
+becomes part of the edit buffer.
+.LP
+If the "literal next" functionality is performed by the underlying
+system, it is implementation-defined whether a character
+other than <control>-V performs this function.
+.SS <control>-W
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB<control>-W
+\fP
+.fi
+.RE
+.sp
+.LP
+Discard the <control>-W, and the word previous to it in the input
+line, including any <blank>s following the word
+and preceding the <control>-W. If the "word erase" functionality is
+performed by the underlying system, it is
+implementation-defined whether a character other than <control>-W
+performs this function.
+.SS Command Descriptions in ex
+.LP
+The following symbols are used in this section to represent command
+modifiers. Some of these modifiers can be omitted, in which
+case the specified defaults shall be used.
+.TP 7
+\fI1addr\fP
+A single line address, given in any of the forms described in Addressing
+in ex ; the default
+shall be the current line ( \fB'.'\fP ), unless otherwise specified.
+.LP
+If the line address is zero, it shall be an error, unless otherwise
+specified in the following command descriptions.
+.LP
+If the edit buffer is empty, and the address is specified with a command
+other than \fB=\fP, \fBappend\fP, \fBinsert\fP,
+\fBopen\fP, \fBput\fP, \fBread\fP, or \fBvisual\fP, or the address
+is not zero, it shall be an error.
+.TP 7
+\fI2addr\fP
+Two addresses specifying an inclusive range of lines. If no addresses
+are specified, the default for \fI2addr\fP shall be the
+current line only ( \fB".,."\fP ), unless otherwise specified in the
+following command descriptions. If one address is
+specified, \fI2addr\fP shall specify that line only, unless otherwise
+specified in the following command descriptions.
+.LP
+It shall be an error if the first address is greater than the second
+address.
+.LP
+If the edit buffer is empty, and the two addresses are specified with
+a command other than the \fB!\fP, \fBwrite\fP,
+\fBwq\fP, or \fBxit\fP commands, or either address is not zero, it
+shall be an error.
+.TP 7
+\fIcount\fP
+A positive decimal number. If \fIcount\fP is specified, it shall be
+equivalent to specifying an additional address to the
+command, unless otherwise specified by the following command descriptions.
+The additional address shall be equal to the last
+address specified to the command (either explicitly or by default)
+plus \fIcount\fP-1.
+.LP
+If this would result in an address greater than the last line of the
+edit buffer, it shall be corrected to equal the last line
+of the edit buffer.
+.TP 7
+\fIflags\fP
+One or more of the characters \fB'+'\fP, \fB'-'\fP, \fB'#'\fP,
+\fB'p'\fP, or \fB'l'\fP (ell). The flag
+characters can be <blank>-separated, and in any order or combination.
+The characters \fB'#'\fP, \fB'p'\fP, and
+\fB'l'\fP shall cause lines to be written in the format specified
+by the \fBprint\fP command with the specified \fIflags\fP.
+.LP
+The lines to be written are as follows:
+.RS
+.IP " 1." 4
+All edit buffer lines written during the execution of the \fIex\fP
+\fB&\fP, \fB~\fP, \fBlist\fP, \fBnumber\fP,
+\fBopen\fP, \fBprint\fP, \fBs\fP, \fBvisual\fP, and \fBz\fP commands
+shall be written as specified by \fIflags\fP.
+.LP
+.IP " 2." 4
+After the completion of an \fIex\fP command with a flag as an argument,
+the current line shall be written as specified by
+\fIflags\fP, unless the current line was the last line written by
+the command.
+.LP
+.RE
+.LP
+The characters \fB'+'\fP and \fB'-'\fP cause the value of the current
+line after the execution of the \fIex\fP command to
+be adjusted by the offset address as described in Addressing in ex
+\&. This adjustment shall occur
+before the current line is written as described in 2. above.
+.LP
+The default for \fIflags\fP shall be none.
+.TP 7
+\fIbuffer\fP
+One of a number of named areas for holding text. The named buffers
+are specified by the alphanumeric characters of the POSIX
+locale. There shall also be one "unnamed" buffer. When no buffer is
+specified for editor commands that use a buffer, the unnamed
+buffer shall be used. Commands that store text into buffers shall
+store the text as it was before the command took effect, and
+shall store text occurring earlier in the file before text occurring
+later in the file, regardless of how the text region was
+specified. Commands that store text into buffers shall store the text
+into the unnamed buffer as well as any specified buffer.
+.LP
+In \fIex\fP commands, buffer names are specified as the name by itself.
+In open or visual mode commands the name is preceded by
+a double quote ( \fB' )'\fP character.
+.LP
+If the specified buffer name is an uppercase character, and the buffer
+contents are to be modified, the buffer shall be appended
+to rather than being overwritten. If the buffer is not being modified,
+specifying the buffer name in lowercase and uppercase shall
+have identical results.
+.LP
+There shall also be buffers named by the numbers 1 through 9. In open
+and visual mode, if a region of text including characters
+from more than a single line is being modified by the \fIvi\fP \fBc\fP
+or \fBd\fP commands,
+the motion character associated with the \fBc\fP or \fBd\fP commands
+specifies that the buffer text shall be in line mode, or the
+commands \fB%\fP, \fB`\fP, \fB/\fP, \fB?\fP, \fB(\fP, \fB)\fP, \fBN\fP,
+\fBn\fP, \fB{\fP, or \fB}\fP are used to define a
+region of text for the \fBc\fP or \fBd\fP commands, the contents of
+buffers 1 through 8 shall be moved into the buffer named by
+the next numerically greater value, the contents of buffer 9 shall
+be discarded, and the region of text shall be copied into buffer
+1. This shall be in addition to copying the text into a user-specified
+buffer or unnamed buffer, or both. Numeric buffers can be
+specified as a source buffer for open and visual mode commands; however,
+specifying a numeric buffer as the write target of an open
+or visual mode command shall have unspecified results.
+.LP
+The text of each buffer shall have the characteristic of being in
+either line or character mode. Appending text to a non-empty
+buffer shall set the mode to match the characteristic of the text
+being appended. Appending text to a buffer shall cause the
+creation of at least one additional line in the buffer. All text stored
+into buffers by \fIex\fP commands shall be in line mode.
+The \fIex\fP commands that use buffers as the source of text specify
+individually how buffers of different modes are handled. Each
+open or visual mode command that uses buffers for any purpose specifies
+individually the mode of the text stored into the buffer
+and how buffers of different modes are handled.
+.TP 7
+\fIfile\fP
+Command text used to derive a pathname. The default shall be the current
+pathname, as defined previously, in which case, if no
+current pathname has yet been established it shall be an error, except
+where specifically noted in the individual command
+descriptions that follow. If the command text contains any of the
+characters \fB'~'\fP, \fB'{'\fP, \fB'['\fP,
+\fB'*'\fP, \fB'?'\fP, \fB'$'\fP, \fB'`'\fP, \fB'"\fP, \fB' ,'\fP
+and \fB'\\'\fP, it shall be subjected
+to the process of "shell expansions", as described below; if more
+than a single pathname results and the command expects only
+one, it shall be an error.
+.LP
+The process of shell expansions in the editor shall be done as follows.
+The \fIex\fP utility shall pass two arguments to the
+program named by the shell edit option; the first shall be \fB-c\fP,
+and the second shall be the string \fB"echo"\fP and the
+command text as a single argument. The standard output and standard
+error of that command shall replace the command text.
+.TP 7
+\fB!\fP
+A character that can be appended to the command name to modify its
+operation, as detailed in the individual command
+descriptions. With the exception of the \fIex\fP \fBread\fP, \fBwrite\fP,
+and \fB!\fP commands, the \fB'!'\fP character
+shall only act as a modifier if there are no <blank>s between it and
+the command name.
+.TP 7
+\fIremembered\ search\ direction\fP
+.sp
+The \fIvi\fP commands \fBN\fP and \fBn\fP begin searching in a forwards
+or backwards
+direction in the edit buffer based on a remembered search direction,
+which is initially unset, and is set by the \fIex\fP
+\fBglobal\fP, \fBv\fP, \fBs\fP, and \fBtag\fP commands, and the \fIvi\fP
+\fB/\fP and
+\fB?\fP commands.
+.sp
+.SS Abbreviate
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBab\fP\fB[\fP\fIbreviate\fP\fB][\fP\fIlhs rhs\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+If \fIlhs\fP and \fIrhs\fP are not specified, write the current list
+of abbreviations and do nothing more.
+.LP
+Implementations may restrict the set of characters accepted in \fIlhs\fP
+or \fIrh\fP, except that printable characters and
+<blank>s shall not be restricted. Additional restrictions shall be
+implementation-defined.
+.LP
+In both \fIlhs\fP and \fIrhs\fP, any character may be escaped with
+a <control>-V, in which case the character shall not
+be used to delimit \fIlhs\fP from \fIrhs\fP, and the escaping <control>-V
+shall be discarded.
+.LP
+In open and visual text input mode, if a non-word or <ESC> character
+that is not escaped by a <control>-V character
+is entered after a word character, a check shall be made for a set
+of characters matching \fIlhs\fP, in the text input entered
+during this command. If it is found, the effect shall be as if \fIrhs\fP
+was entered instead of \fIlhs\fP.
+.LP
+The set of characters that are checked is defined as follows:
+.IP " 1." 4
+If there are no characters inserted before the word and non-word or
+<ESC> characters that triggered the check, the set of
+characters shall consist of the word character.
+.LP
+.IP " 2." 4
+If the character inserted before the word and non-word or <ESC> characters
+that triggered the check is a word character,
+the set of characters shall consist of the characters inserted immediately
+before the triggering characters that are word
+characters, plus the triggering word character.
+.LP
+.IP " 3." 4
+If the character inserted before the word and non-word or <ESC> characters
+that triggered the check is not a word
+character, the set of characters shall consist of the characters that
+were inserted before the triggering characters that are
+neither <blank>s nor word characters, plus the triggering word character.
+.LP
+.LP
+It is unspecified whether the \fIlhs\fP argument entered for the \fIex\fP
+\fBabbreviate\fP and \fBunabbreviate\fP commands
+is replaced in this fashion. Regardless of whether or not the replacement
+occurs, the effect of the command shall be as if the
+replacement had not occurred.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Unchanged.
+.SS Append
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI1addr\fP\fB]\fP \fBa\fP\fB[\fP\fBppend\fP\fB][\fP\fB!\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+Enter \fIex\fP text input mode; the input text shall be placed after
+the specified line. If line zero is specified, the text
+shall be placed at the beginning of the edit buffer.
+.LP
+This command shall be affected by the \fBnumber\fP and \fBautoindent\fP
+edit options; following the command name with
+\fB'!'\fP shall cause the \fBautoindent\fP edit option setting to
+be toggled for the duration of this command only.
+.LP
+\fICurrent line\fP: Set to the last input line; if no lines were input,
+set to the specified line, or to the first line of the
+edit buffer if a line of zero was specified, or zero if the edit buffer
+is empty.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Arguments
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBar\fP\fB[\fP\fIgs\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+Write the current argument list, with the current argument-list entry,
+if any, between \fB'['\fP and \fB']'\fP
+characters.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Unchanged.
+.SS Change
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI2addr\fP\fB]\fP \fBc\fP\fB[\fP\fBhange\fP\fB][\fP\fB!\fP\fB][\fP\fIcount\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+Enter \fIex\fP text input mode; the input text shall replace the specified
+lines. The specified lines shall be copied into the
+unnamed buffer, which shall become a line mode buffer.
+.LP
+This command shall be affected by the \fBnumber\fP and \fBautoindent\fP
+edit options; following the command name with
+\fB'!'\fP shall cause the \fBautoindent\fP edit option setting to
+be toggled for the duration of this command only.
+.LP
+\fICurrent line\fP: Set to the last input line; if no lines were input,
+set to the line before the first address, or to the
+first line of the edit buffer if there are no lines preceding the
+first address, or to zero if the edit buffer is empty.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Change Directory
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBchd\fP\fB[\fP\fBir\fP\fB][\fP\fB!\fP\fB][\fP\fIdirectory\fP\fB]\fP\fBcd\fP\fB[\fP\fB!\fP\fB][\fP\fIdirectory\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+Change the current working directory to \fIdirectory\fP.
+.LP
+If no \fIdirectory\fP argument is specified, and the \fIHOME\fP environment
+variable is set to a non-null and non-empty value,
+\fIdirectory\fP shall default to the value named in the \fIHOME\fP
+environment variable. If the \fIHOME\fP environment variable
+is empty or is undefined, the default value of \fIdirectory\fP is
+implementation-defined.
+.LP
+If no \fB'!'\fP is appended to the command name, and the edit buffer
+has been modified since the last complete write, and the
+current pathname does not begin with a \fB'/'\fP, it shall be an
+error.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Unchanged.
+.SS Copy
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI2addr\fP\fB]\fP \fBco\fP\fB[\fP\fBpy\fP\fB]\fP \fI1addr\fP \fB[\fP\fIflags\fP\fB]
+[\fP\fI2addr\fP\fB]\fP \fBt\fP \fI1addr\fP \fB[\fP\fIflags\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+Copy the specified lines after the specified destination line; line
+zero specifies that the lines shall be placed at the
+beginning of the edit buffer.
+.LP
+\fICurrent line\fP: Set to the last line copied.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Delete
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI2addr\fP\fB]\fP \fBd\fP\fB[\fP\fBelete\fP\fB][\fP\fIbuffer\fP\fB][\fP\fIcount\fP\fB][\fP\fIflags\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+Delete the specified lines into a buffer (defaulting to the unnamed
+buffer), which shall become a line-mode buffer.
+.LP
+Flags can immediately follow the command name; see Command Line Parsing
+in ex .
+.LP
+\fICurrent line\fP: Set to the line following the deleted lines, or
+to the last line in the edit buffer if that line is past
+the end of the edit buffer, or to zero if the edit buffer is empty.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Edit
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBe\fP\fB[\fP\fBdit\fP\fB][\fP\fB!\fP\fB][\fP\fB+\fP\fIcommand\fP\fB][\fP\fIfile\fP\fB]\fP\fBex\fP\fB[\fP\fB!\fP\fB][\fP\fB+\fP\fIcommand\fP\fB][\fP\fIfile\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+If no \fB'!'\fP is appended to the command name, and the edit buffer
+has been modified since the last complete write, it
+shall be an error.
+.LP
+If \fIfile\fP is specified, replace the current contents of the edit
+buffer with the current contents of \fIfile\fP, and set
+the current pathname to \fIfile\fP. If \fIfile\fP is not specified,
+replace the current contents of the edit buffer with the
+current contents of the file named by the current pathname. If for
+any reason the current contents of the file cannot be accessed,
+the edit buffer shall be empty.
+.LP
+The \fB+\fP \fIcommand\fP option shall be <blank>-delimited; <blank>s
+within \fB+\fP \fIcommand\fP can be
+escaped by preceding them with a backslash character. The \fB+\fP
+\fIcommand\fP shall be interpreted as an \fIex\fP command
+immediately after the contents of the edit buffer have been replaced
+and the current line and column have been set.
+.LP
+If the edit buffer is empty:
+.LP
+\fICurrent line\fP: Set to 0.
+.LP
+\fICurrent column\fP: Set to 1.
+.LP
+Otherwise, if executed while in \fIex\fP command mode or if the \fB+\fP
+\fIcommand\fP argument is specified:
+.LP
+\fICurrent line\fP: Set to the last line of the edit buffer.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.LP
+Otherwise, if \fIfile\fP is omitted or results in the current pathname:
+.LP
+\fICurrent line\fP: Set to the first line of the edit buffer.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.LP
+Otherwise, if \fIfile\fP is the same as the last file edited, the
+line and column shall be set as follows; if the file was
+previously edited, the line and column may be set as follows:
+.LP
+\fICurrent line\fP: Set to the last value held when that file was
+last edited. If this value is not a valid line in the new
+edit buffer, set to the first line of the edit buffer.
+.LP
+\fICurrent column\fP: If the current line was set to the last value
+held when the file was last edited, set to the last value
+held when the file was last edited. Otherwise, or if the last value
+is not a valid column in the new edit buffer, set to non-
+<blank>.
+.LP
+Otherwise:
+.LP
+\fICurrent line\fP: Set to the first line of the edit buffer.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS File
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBf\fP\fB[\fP\fBile\fP\fB][\fP\fIfile\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+If a \fIfile\fP argument is specified, the alternate pathname shall
+be set to the current pathname, and the current pathname
+shall be set to \fIfile\fP.
+.LP
+Write an informational message. If the file has a current pathname,
+it shall be included in this message; otherwise, the message
+shall indicate that there is no current pathname. If the edit buffer
+contains lines, the current line number and the number of
+lines in the edit buffer shall be included in this message; otherwise,
+the message shall indicate that the edit buffer is empty. If
+the edit buffer has been modified since the last complete write, this
+fact shall be included in this message. If the
+\fBreadonly\fP edit option is set, this fact shall be included in
+this message. The message may contain other unspecified
+information.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Unchanged.
+.SS Global
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI2addr\fP\fB]\fP \fBg\fP\fB[\fP\fBlobal\fP\fB]\fP \fB/\fP\fIpattern\fP\fB/\fP \fB[\fP\fIcommands\fP\fB]
+[\fP\fI2addr\fP\fB]\fP \fBv /\fP\fIpattern\fP\fB/\fP \fB[\fP\fIcommands\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+The optional \fB'!'\fP character after the \fBglobal\fP command shall
+be the same as executing the \fBv\fP command.
+.LP
+If \fIpattern\fP is empty (for example, \fB"//"\fP ) or not specified,
+the last regular expression used in the editor
+command shall be used as the \fIpattern\fP. The \fIpattern\fP can
+be delimited by slashes (shown in the Synopsis), as well as any
+non-alphanumeric or non- <blank> other than backslash, vertical line,
+double quote, or <newline>.
+.LP
+If no lines are specified, the lines shall default to the entire file.
+.LP
+The \fBglobal\fP and \fBv\fP commands are logically two-pass operations.
+First, mark the lines within the specified lines for
+which the line excluding the terminating <newline> matches ( \fBglobal\fP)
+or does not match ( \fBv\fP or \fBglobal!\fP)
+the specified pattern. Second, execute the \fIex\fP commands given
+by \fIcommands\fP, with the current line ( \fB'.'\fP ) set
+to each marked line. If an error occurs during this process, or the
+contents of the edit buffer are replaced (for example, by the
+\fIex\fP \fB:edit\fP command) an error message shall be written and
+no more commands resulting from the execution of this command
+shall be processed.
+.LP
+Multiple \fIex\fP commands can be specified by entering multiple commands
+on a single line using a vertical line to delimit
+them, or one per line, by escaping each <newline> with a backslash.
+.LP
+If no commands are specified:
+.IP " 1." 4
+If in \fIex\fP command mode, it shall be as if the \fBprint\fP command
+were specified.
+.LP
+.IP " 2." 4
+Otherwise, no command shall be executed.
+.LP
+.LP
+For the \fBappend\fP, \fBchange\fP, and \fBinsert\fP commands, the
+input text shall be included as part of the command, and
+the terminating period can be omitted if the command ends the list
+of commands. The \fBopen\fP and \fBvisual\fP commands can be
+specified as one of the commands, in which case each marked line shall
+cause the editor to enter open or visual mode. If open or
+visual mode is exited using the \fIvi\fP \fBQ\fP command, the current
+line shall be set to the
+next marked line, and open or visual mode reentered, until the list
+of marked lines is exhausted.
+.LP
+The \fBglobal\fP, \fBv\fP, and \fBundo\fP commands cannot be used
+in \fIcommands\fP. Marked lines may be deleted by commands
+executed for lines occurring earlier in the file than the marked lines.
+In this case, no commands shall be executed for the deleted
+lines.
+.LP
+If the remembered search direction is not set, the \fBglobal\fP and
+\fBv\fP commands shall set it to forward.
+.LP
+The \fBautoprint\fP and \fBautoindent\fP edit options shall be inhibited
+for the duration of the \fBg\fP or \fBv\fP
+command.
+.LP
+\fICurrent line\fP: If no commands executed, set to the last marked
+line. Otherwise, as specified for the executed \fIex\fP
+commands.
+.LP
+\fICurrent column\fP: If no commands are executed, set to non- <blank>;
+otherwise, as specified for the individual
+\fIex\fP commands.
+.SS Insert
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI1addr\fP\fB]\fP \fBi\fP\fB[\fP\fBnsert\fP\fB][\fP\fB!\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+Enter \fIex\fP text input mode; the input text shall be placed before
+the specified line. If the line is zero or 1, the text
+shall be placed at the beginning of the edit buffer.
+.LP
+This command shall be affected by the \fBnumber\fP and \fBautoindent\fP
+edit options; following the command name with
+\fB'!'\fP shall cause the \fBautoindent\fP edit option setting to
+be toggled for the duration of this command only.
+.LP
+\fICurrent line\fP: Set to the last input line; if no lines were input,
+set to the line before the specified line, or to the
+first line of the edit buffer if there are no lines preceding the
+specified line, or zero if the edit buffer is empty.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Join
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI2addr\fP\fB]\fP \fBj\fP\fB[\fP\fBoin\fP\fB][\fP\fB!\fP\fB][\fP\fIcount\fP\fB][\fP\fIflags\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+If \fIcount\fP is specified:
+If no address was specified, the \fBjoin\fP command shall behave as
+if \fI2addr\fP were the current line and the
+current line plus \fIcount\fP (.,. + \fIcount\fP).
+.LP
+If one address was specified, the \fBjoin\fP command shall behave
+as if \fI2addr\fP were the specified address and the
+specified address plus \fIcount\fP ( \fIaddr\fP, \fIaddr\fP + \fIcount\fP).
+.LP
+If two addresses were specified, the \fBjoin\fP command shall behave
+as if an additional address, equal to the last address
+plus \fIcount\fP -1 ( \fIaddr1\fP, \fIaddr2\fP, \fIaddr2\fP + \fIcount\fP
+-1), was specified.
+.LP
+If this would result in a second address greater than the last line
+of the edit buffer, it shall be corrected to be equal to the
+last line of the edit buffer.
+.LP
+If no \fIcount\fP is specified:
+If no address was specified, the \fBjoin\fP command shall behave as
+if \fI2addr\fP were the current line and the next
+line (.,. +1).
+.LP
+If one address was specified, the \fBjoin\fP command shall behave
+as if \fI2addr\fP were the specified address and the next
+line ( \fIaddr\fP, \fIaddr\fP +1).
+.LP
+Join the text from the specified lines together into a single line,
+which shall replace the specified lines.
+.LP
+If a \fB'!'\fP character is appended to the command name, the \fBjoin\fP
+shall be without modification of any line,
+independent of the current locale.
+.LP
+Otherwise, in the POSIX locale, set the current line to the first
+of the specified lines, and then, for each subsequent line,
+proceed as follows:
+.IP " 1." 4
+Discard leading <space>s from the line to be joined.
+.LP
+.IP " 2." 4
+If the line to be joined is now empty, delete it, and skip steps 3
+through 5.
+.LP
+.IP " 3." 4
+If the current line ends in a <blank>, or the first character of the
+line to be joined is a \fB')'\fP character, join
+the lines without further modification.
+.LP
+.IP " 4." 4
+If the last character of the current line is a \fB'.'\fP, join the
+lines with two <space>s between them.
+.LP
+.IP " 5." 4
+Otherwise, join the lines with a single <space> between them.
+.LP
+.LP
+\fICurrent line\fP: Set to the first line specified.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS List
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI2addr\fP\fB]\fP \fBl\fP\fB[\fP\fBist\fP\fB][\fP\fIcount\fP\fB][\fP\fIflags\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+This command shall be equivalent to the \fIex\fP command:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI2addr\fP\fB]\fP \fBp\fP\fB[\fP\fBrint\fP\fB][\fP\fIcount\fP\fB]\fP \fBl\fP\fB[\fP\fIflags\fP\fB]\fP
+.fi
+.RE
+.LP
+See Print .
+.SS Map
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBmap\fP\fB[\fP\fB!\fP\fB][\fP\fIlhs rhs\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+If \fIlhs\fP and \fIrhs\fP are not specified:
+.IP " 1." 4
+If \fB'!'\fP is specified, write the current list of text input mode
+maps.
+.LP
+.IP " 2." 4
+Otherwise, write the current list of command mode maps.
+.LP
+.IP " 3." 4
+Do nothing more.
+.LP
+.LP
+Implementations may restrict the set of characters accepted in \fIlhs\fP
+or \fIrhs\fP, except that printable characters and
+<blank>s shall not be restricted. Additional restrictions shall be
+implementation-defined. In both \fIlhs\fP and \fIrhs\fP,
+any character can be escaped with a <control>-V, in which case the
+character shall not be used to delimit \fIlhs\fP from
+\fIrhs\fP, and the escaping <control>-V shall be discarded.
+.LP
+If the character \fB'!'\fP is appended to the \fBmap\fP command name,
+the mapping shall be effective during open or visual
+text input mode rather than \fBopen\fP or \fBvisual\fP command mode.
+This allows \fIlhs\fP to have two different \fBmap\fP
+definitions at the same time: one for command mode and one for text
+input mode.
+.LP
+For command mode mappings:
+When the \fIlhs\fP is entered as any part of a \fIvi\fP command in
+open or visual
+mode (but not as part of the arguments to the command), the action
+shall be as if the corresponding \fIrhs\fP had been entered.
+.LP
+If any character in the command, other than the first, is escaped
+using a <control>-V character, that character shall not
+be part of a match to an \fIlhs\fP.
+.LP
+It is unspecified whether implementations shall support \fBmap\fP
+commands where the \fIlhs\fP is more than a single character
+in length, where the first character of the \fIlhs\fP is printable.
+.LP
+If \fIlhs\fP contains more than one character and the first character
+is \fB'#'\fP, followed by a sequence of digits
+corresponding to a numbered function key, then when this function
+key is typed it shall be mapped to \fIrhs\fP. Characters other
+than digits following a \fB'#'\fP character also represent the function
+key named by the characters in the \fIlhs\fP following
+the \fB'#'\fP and may be mapped to \fIrhs\fP. It is unspecified how
+function keys are named or what function keys are
+supported.
+.LP
+For text input mode mappings:
+When the \fIlhs\fP is entered as any part of text entered in open
+or visual text input modes, the action shall be as
+if the corresponding \fIrhs\fP had been entered.
+.LP
+If any character in the input text is escaped using a <control>-V
+character, that character shall not be part of a match
+to an \fIlhs\fP.
+.LP
+It is unspecified whether the \fIlhs\fP text entered for subsequent
+\fBmap\fP or \fBunmap\fP commands is replaced with the
+\fIrhs\fP text for the purposes of the screen display; regardless
+of whether or not the display appears as if the corresponding
+\fIrhs\fP text was entered, the effect of the command shall be as
+if the \fIlhs\fP text was entered.
+.LP
+If only part of the \fIlhs\fP is entered, it is unspecified how long
+the editor will wait for additional, possibly matching
+characters before treating the already entered characters as not matching
+the \fIlhs\fP.
+.LP
+The \fIrhs\fP characters shall themselves be subject to remapping,
+unless otherwise specified by the \fBremap\fP edit option,
+except that if the characters in \fIlhs\fP occur as prefix characters
+in \fIrhs\fP, those characters shall not be remapped.
+.LP
+On block-mode terminals, the mapping need not occur immediately (for
+example, it may occur after the terminal transmits a group
+of characters to the system), but it shall achieve the same results
+as if it occurred immediately.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Unchanged.
+.SS Mark
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI1addr\fP\fB]\fP \fBma\fP\fB[\fP\fBrk\fP\fB]\fP \fIcharacter
+\fP\fB[\fP\fI1addr\fP\fB]\fP \fBk\fP \fIcharacter\fP
+.fi
+.RE
+.sp
+.LP
+Implementations shall support \fIcharacter\fP values of a single lowercase
+letter of the POSIX locale and the characters
+\fB'`'\fP and \fB'"\fP ; support of other characters is implementation-defined.
+.LP
+If executing the \fIvi\fP \fBm\fP command, set the specified mark
+to the current line and
+1-based numbered character referenced by the current column, if any;
+otherwise, column position 1.
+.LP
+Otherwise, set the specified mark to the specified line and 1-based
+numbered first non- <blank> non- <newline> in
+the line, if any; otherwise, the last non- <newline> in the line,
+if any; otherwise, column position 1.
+.LP
+The mark shall remain associated with the line until the mark is reset
+or the line is deleted. If a deleted line is restored by
+a subsequent \fBundo\fP command, any marks previously associated with
+the line, which have not been reset, shall be restored as
+well. Any use of a mark not associated with a current line in the
+edit buffer shall be an error.
+.LP
+The marks \fB`\fP and \fB'\fP shall be set as described previously,
+immediately before the following events occur in the
+editor:
+.IP " 1." 4
+The use of \fB'$'\fP as an \fIex\fP address
+.LP
+.IP " 2." 4
+The use of a positive decimal number as an \fIex\fP address
+.LP
+.IP " 3." 4
+The use of a search command as an \fIex\fP address
+.LP
+.IP " 4." 4
+The use of a mark reference as an \fIex\fP address
+.LP
+.IP " 5." 4
+The use of the following open and visual mode commands: <control>-],
+\fB%\fP, \fB(\fP, \fB)\fP, \fB[\fP, \fB]\fP,
+\fB{\fP, \fB}\fP
+.LP
+.IP " 6." 4
+The use of the following open and visual mode commands: \fB'\fP, \fBG\fP,
+\fBH\fP, \fBL\fP, \fBM\fP, \fBz\fP if the
+current line will change as a result of the command
+.LP
+.IP " 7." 4
+The use of the open and visual mode commands: \fB/\fP, \fB?\fP, \fBN\fP,
+\fB`\fP, \fBn\fP if the current line or column
+will change as a result of the command
+.LP
+.IP " 8." 4
+The use of the \fIex\fP mode commands: \fBz\fP, \fBundo\fP, \fBglobal\fP,
+\fBv\fP
+.LP
+.LP
+For rules 1., 2., 3., and 4., the \fB`\fP and \fB'\fP marks shall
+not be set if the \fIex\fP command is parsed as specified
+by rule 6.a. in Command Line Parsing in ex .
+.LP
+For rules 5., 6., and 7., the \fB`\fP and \fB'\fP marks shall not
+be set if the commands are used as motion commands in open
+and visual mode.
+.LP
+For rules 1., 2., 3., 4., 5., 6., 7., and 8., the \fB`\fP and \fB'\fP
+marks shall not be set if the command fails.
+.LP
+The \fB`\fP and \fB'\fP marks shall be set as described previously,
+each time the contents of the edit buffer are replaced
+(including the editing of the initial buffer), if in open or visual
+mode, or if in \fBex\fP mode and the edit buffer is not empty,
+before any commands or movements (including commands or movements
+specified by the \fB-c\fP or \fB-t\fP options or the \fB+\fP
+\fIcommand\fP argument) are executed on the edit buffer. If in open
+or visual mode, the marks shall be set as if executing the \fIvi\fP
+\fBm\fP command; otherwise, as if executing the \fIex\fP \fBmark\fP
+command.
+.LP
+When changing from \fBex\fP mode to open or visual mode, if the \fB`\fP
+and \fB'\fP marks are not already set, the \fB`\fP
+and \fB'\fP marks shall be set as described previously.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Unchanged.
+.SS Move
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI2addr\fP\fB]\fP \fBm\fP\fB[\fP\fBove\fP\fB]\fP \fI1addr\fP \fB\fP\fB[\fP\fIflags\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+Move the specified lines after the specified destination line. A destination
+of line zero specifies that the lines shall be
+placed at the beginning of the edit buffer. It shall be an error if
+the destination line is within the range of lines to be
+moved.
+.LP
+\fICurrent line\fP: Set to the last of the moved lines.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Next
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBn\fP\fB[\fP\fBext\fP\fB][\fP\fB!\fP\fB][\fP\fB+\fP\fIcommand\fP\fB][\fP\fIfile\fP \fB...\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+If no \fB'!'\fP is appended to the command name, and the edit buffer
+has been modified since the last complete write, it
+shall be an error, unless the file is successfully written as specified
+by the \fBautowrite\fP option.
+.LP
+If one or more files is specified:
+.IP " 1." 4
+Set the argument list to the specified filenames.
+.LP
+.IP " 2." 4
+Set the current argument list reference to be the first entry in the
+argument list.
+.LP
+.IP " 3." 4
+Set the current pathname to the first filename specified.
+.LP
+.LP
+Otherwise:
+.IP " 1." 4
+It shall be an error if there are no more filenames in the argument
+list after the filename currently referenced.
+.LP
+.IP " 2." 4
+Set the current pathname and the current argument list reference to
+the filename after the filename currently referenced in the
+argument list.
+.LP
+.LP
+Replace the contents of the edit buffer with the contents of the file
+named by the current pathname. If for any reason the
+contents of the file cannot be accessed, the edit buffer shall be
+empty.
+.LP
+This command shall be affected by the \fBautowrite\fP and \fBwriteany\fP
+edit options.
+.LP
+The \fB+\fP \fIcommand\fP option shall be <blank>-delimited; <blank>s
+can be escaped by preceding them with a
+backslash character. The \fB+\fP \fIcommand\fP shall be interpreted
+as an \fIex\fP command immediately after the contents of the
+edit buffer have been replaced and the current line and column have
+been set.
+.LP
+\fICurrent line\fP: Set as described for the \fBedit\fP command.
+.LP
+\fICurrent column\fP: Set as described for the \fBedit\fP command.
+.SS Number
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI2addr\fP\fB]\fP \fBnu\fP\fB[\fP\fBmber\fP\fB][\fP\fIcount\fP\fB][\fP\fIflags\fP\fB]
+[\fP\fI2addr\fP\fB]\fP \fB#\fP\fB[\fP\fIcount\fP\fB][\fP\fIflags\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+These commands shall be equivalent to the \fIex\fP command:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI2addr\fP\fB]\fP \fBp\fP\fB[\fP\fBrint\fP\fB][\fP\fIcount\fP\fB]\fP \fB#\fP\fB[\fP\fIflags\fP\fB]\fP
+.fi
+.RE
+.LP
+See Print .
+.SS Open
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI1addr\fP\fB]\fP \fBo\fP\fB[\fP\fBpen\fP\fB]\fP \fB/\fP\fIpattern\fP\fB/\fP \fB[\fP\fIflags\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+This command need not be supported on block-mode terminals or terminals
+with insufficient capabilities. If standard input,
+standard output, or standard error are not terminal devices, the results
+are unspecified.
+.LP
+Enter open mode.
+.LP
+The trailing delimiter can be omitted from \fIpattern\fP at the end
+of the command line. If \fIpattern\fP is empty (for
+example, \fB"//"\fP ) or not specified, the last regular expression
+used in the editor shall be used as the pattern. The pattern
+can be delimited by slashes (shown in the Synopsis), as well as any
+alphanumeric, or non- <blank> other than backslash,
+vertical line, double quote, or <newline>.
+.LP
+\fICurrent line\fP: Set to the specified line.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Preserve
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBpre\fP\fB[\fP\fBserve\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+Save the edit buffer in a form that can later be recovered by using
+the \fB-r\fP option or by using the \fIex\fP
+\fBrecover\fP command. After the file has been preserved, a mail message
+shall be sent to the user. This message shall be readable
+by invoking the \fImailx\fP utility. The message shall contain the
+name of the file, the
+time of preservation, and an \fIex\fP command that could be used to
+recover the file. Additional information may be included in
+the mail message.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Unchanged.
+.SS Print
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI2addr\fP\fB]\fP \fBp\fP\fB[\fP\fBrint\fP\fB][\fP\fIcount\fP\fB][\fP\fIflags\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+Write the addressed lines. The behavior is unspecified if the number
+of columns on the display is less than the number of
+columns required to write any single character in the lines being
+written.
+.LP
+Non-printable characters, except for the <tab>, shall be written as
+implementation-defined multi-character sequences.
+.LP
+If the \fB#\fP flag is specified or the \fBnumber\fP edit option is
+set, each line shall be preceded by its line number in the
+following format:
+.sp
+.RS
+.nf
+
+\fB"%6d ", <\fP\fIline number\fP\fB>
+\fP
+.fi
+.RE
+.LP
+If the \fBl\fP flag is specified or the \fBlist\fP edit option is
+set:
+.IP " 1." 4
+The characters listed in the Base Definitions volume of IEEE\ Std\ 1003.1-2001,
+Table 5-1, Escape Sequences and
+Associated Actions shall be written as the corresponding escape sequence.
+.LP
+.IP " 2." 4
+Non-printable characters not in the Base Definitions volume of IEEE\ Std\ 1003.1-2001,
+Table 5-1, Escape Sequences and
+Associated Actions shall be written as one three-digit octal number
+(with a preceding backslash) for each byte in the character
+(most significant byte first). If the size of a byte on the system
+is greater than 9 bits, the format used for non-printable
+characters is implementation-defined.
+.LP
+.IP " 3." 4
+The end of each line shall be marked with a \fB'$'\fP, and literal
+\fB'$'\fP characters within the line shall be written
+with a preceding backslash.
+.LP
+.LP
+Long lines shall be folded; the length at which folding occurs is
+unspecified, but should be appropriate for the output
+terminal, considering the number of columns of the terminal.
+.LP
+If a line is folded, and the \fBl\fP flag is not specified and the
+\fBlist\fP edit option is not set, it is unspecified
+whether a multi-column character at the folding position is separated;
+it shall not be discarded.
+.LP
+\fICurrent line\fP: Set to the last written line.
+.LP
+\fICurrent column\fP: Unchanged if the current line is unchanged;
+otherwise, set to non- <blank>.
+.SS Put
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI1addr\fP\fB]\fP \fBpu\fP\fB[\fP\fBt\fP\fB][\fP\fIbuffer\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+Append text from the specified buffer (by default, the unnamed buffer)
+to the specified line; line zero specifies that the text
+shall be placed at the beginning of the edit buffer. Each portion
+of a line in the buffer shall become a new line in the edit
+buffer, regardless of the mode of the buffer.
+.LP
+\fICurrent line\fP: Set to the last line entered into the edit buffer.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Quit
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBq\fP\fB[\fP\fBuit\fP\fB][\fP\fB!\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+If no \fB'!'\fP is appended to the command name:
+.IP " 1." 4
+If the edit buffer has been modified since the last complete write,
+it shall be an error.
+.LP
+.IP " 2." 4
+If there are filenames in the argument list after the filename currently
+referenced, and the last command was not a \fBquit\fP,
+\fBwq\fP, \fBxit\fP, or \fBZZ\fP (see \fIExit\fP ) command, it shall
+be an error.
+.LP
+.LP
+Otherwise, terminate the editing session.
+.SS Read
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI1addr\fP\fB]\fP \fBr\fP\fB[\fP\fBead\fP\fB][\fP\fB!\fP\fB][\fP\fIfile\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+If \fB'!'\fP is not the first non- <blank> to follow the command name,
+a copy of the specified file shall be appended
+into the edit buffer after the specified line; line zero specifies
+that the copy shall be placed at the beginning of the edit
+buffer. The number of lines and bytes read shall be written. If no
+\fIfile\fP is named, the current pathname shall be the default.
+If there is no current pathname, then \fIfile\fP shall become the
+current pathname. If there is no current pathname or \fIfile\fP
+operand, it shall be an error. Specifying a \fIfile\fP that is not
+of type regular shall have unspecified results.
+.LP
+Otherwise, if \fIfile\fP is preceded by \fB'!'\fP, the rest of the
+line after the \fB'!'\fP shall have \fB'%'\fP,
+\fB'#'\fP, and \fB'!'\fP characters expanded as described in Command
+Line Parsing in ex .
+.LP
+The \fIex\fP utility shall then pass two arguments to the program
+named by the shell edit option; the first shall be \fB-c\fP
+and the second shall be the expanded arguments to the \fBread\fP command
+as a single argument. The standard input of the program
+shall be set to the standard input of the \fIex\fP program when it
+was invoked. The standard error and standard output of the
+program shall be appended into the edit buffer after the specified
+line.
+.LP
+Each line in the copied file or program output (as delimited by <newline>s
+or the end of the file or output if it is not
+immediately preceded by a <newline>), shall be a separate line in
+the edit buffer. Any occurrences of <carriage-return>
+and <newline> pairs in the output shall be treated as single <newline>s.
+.LP
+The special meaning of the \fB'!'\fP following the \fBread\fP command
+can be overridden by escaping it with a backslash
+character.
+.LP
+\fICurrent line\fP: If no lines are added to the edit buffer, unchanged.
+Otherwise, if in open or visual mode, set to the first
+line entered into the edit buffer. Otherwise, set to the last line
+entered into the edit buffer.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Recover
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBrec\fP\fB[\fP\fBover\fP\fB][\fP\fB!\fP\fB]\fP \fIfile\fP
+.fi
+.RE
+.sp
+.LP
+If no \fB'!'\fP is appended to the command name, and the edit buffer
+has been modified since the last complete write, it
+shall be an error.
+.LP
+If no \fIfile\fP operand is specified, then the current pathname shall
+be used. If there is no current pathname or \fIfile\fP
+operand, it shall be an error.
+.LP
+If no recovery information has previously been saved about \fIfile\fP,
+the \fBrecover\fP command shall behave identically to
+the \fBedit\fP command, and an informational message to this effect
+shall be written.
+.LP
+Otherwise, set the current pathname to \fIfile\fP, and replace the
+current contents of the edit buffer with the recovered
+contents of \fIfile\fP. If there are multiple instances of the file
+to be recovered, the one most recently saved shall be
+recovered, and an informational message that there are previous versions
+of the file that can be recovered shall be written. The
+editor shall behave as if the contents of the edit buffer have already
+been modified.
+.LP
+\fICurrent file\fP: Set as described for the \fBedit\fP command.
+.LP
+\fICurrent column\fP: Set as described for the \fBedit\fP command.
+.SS Rewind
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBrew\fP\fB[\fP\fBind\fP\fB][\fP\fB!\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+If no \fB'!'\fP is appended to the command name, and the edit buffer
+has been modified since the last complete write, it
+shall be an error, unless the file is successfully written as specified
+by the \fBautowrite\fP option.
+.LP
+If the argument list is empty, it shall be an error.
+.LP
+The current argument list reference and the current pathname shall
+be set to the first filename in the argument list.
+.LP
+Replace the contents of the edit buffer with the contents of the file
+named by the current pathname. If for any reason the
+contents of the file cannot be accessed, the edit buffer shall be
+empty.
+.LP
+This command shall be affected by the \fBautowrite\fP and \fBwriteany\fP
+edit options.
+.LP
+\fICurrent line\fP: Set as described for the \fBedit\fP command.
+.LP
+\fICurrent column\fP: Set as described for the \fBedit\fP command.
+.SS Set
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBse\fP\fB[\fP\fBt\fP\fB][\fP\fIoption\fP\fB[\fP\fB=\fP\fB[\fP\fIvalue\fP\fB]]\fP \fB...\fP\fB][\fP\fBno\fP\fIoption\fP \fB...\fP\fB][\fP\fIoption\fP\fB? ...\fP\fB][\fP\fBall\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+When no arguments are specified, write the value of the \fBterm\fP
+edit option and those options whose values have been changed
+from the default settings; when the argument \fIall\fP is specified,
+write all of the option values.
+.LP
+Giving an option name followed by the character \fB'?'\fP shall cause
+the current value of that option to be written. The
+\fB'?'\fP can be separated from the option name by zero or more <blank>s.
+The \fB'?'\fP shall be necessary only for
+Boolean valued options. Boolean options can be given values by the
+form \fBset\fP \fIoption\fP to turn them on or \fBset\fP
+\fBno\fP \fIoption\fP to turn them off; string and numeric options
+can be assigned by the form \fBset\fP \fIoption\fP=
+\fIvalue\fP. Any <blank>s in strings can be included as is by preceding
+each <blank> with an escaping backslash. More
+than one option can be set or listed by a single set command by specifying
+multiple arguments, each separated from the next by one
+or more <blank>s.
+.LP
+See Edit Options in ex for details about specific options.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Unchanged.
+.SS Shell
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBsh\fP\fB[\fP\fBell\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+Invoke the program named in the \fBshell\fP edit option with the single
+argument \fB-i\fP (interactive mode). Editing shall be
+resumed when the program exits.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Unchanged.
+.SS Source
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBso\fP\fB[\fP\fBurce\fP\fB]\fP \fIfile\fP
+.fi
+.RE
+.sp
+.LP
+Read and execute \fIex\fP commands from \fIfile\fP. Lines in the file
+that are blank lines shall be ignored.
+.LP
+\fICurrent line\fP: As specified for the individual \fIex\fP commands.
+.LP
+\fICurrent column\fP: As specified for the individual \fIex\fP commands.
+.SS Substitute
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI2addr\fP\fB]\fP \fBs\fP\fB[\fP\fBubstitute\fP\fB][\fP\fB/\fP\fIpattern\fP\fB/\fP\fIrepl\fP\fB/\fP\fB[\fP\fIoptions\fP\fB][\fP\fIcount\fP\fB][\fP\fIflags\fP\fB]]\fP\fB
+.br
+
+\fP\fB[\fP\fI2addr\fP\fB]\fP \fB&\fP\fB[\fP\fIoptions\fP\fB][\fP\fIcount\fP\fB][\fP\fIflags\fP\fB]]\fP\fB
+.br
+
+\fP\fB[\fP\fI2addr\fP\fB]\fP \fB~\fP\fB[\fP\fIoptions\fP\fB][\fP\fIcount\fP\fB][\fP\fIflags\fP\fB]]\fP
+.fi
+.RE
+.sp
+.LP
+Replace the first instance of the pattern \fIpattern\fP by the string
+\fIrepl\fP on each specified line. (See Regular Expressions in ex
+and Replacement Strings in ex .) Any
+non-alphabetic, non- <blank> delimiter other than \fB'\\'\fP, \fB'|'\fP,
+double quote, or <newline> can be used
+instead of \fB'/'\fP . Backslash characters can be used to escape
+delimiters, backslash characters, and other special
+characters.
+.LP
+The trailing delimiter can be omitted from \fIpattern\fP or from \fIrepl\fP
+at the end of the command line. If both
+\fIpattern\fP and \fIrepl\fP are not specified or are empty (for example,
+\fB"//"\fP ), the last \fBs\fP command shall be
+repeated. If only \fIpattern\fP is not specified or is empty, the
+last regular expression used in the editor shall be used as the
+pattern. If only \fIrepl\fP is not specified or is empty, the pattern
+shall be replaced by nothing. If the entire replacement
+pattern is \fB'%'\fP, the last replacement pattern to an \fBs\fP
+command shall be used.
+.LP
+Entering a <carriage-return> in \fIrepl\fP (which requires an escaping
+backslash in \fIex\fP mode and an escaping
+<control>-V in open or \fIvi\fP mode) shall split the line at that
+point, creating a new
+line in the edit buffer. The <carriage-return> shall be discarded.
+.LP
+If \fIoptions\fP includes the letter \fB'g'\fP ( \fBglobal\fP), all
+non-overlapping instances of the pattern in the line
+shall be replaced.
+.LP
+If \fIoptions\fP includes the letter \fB'c'\fP ( \fBconfirm\fP), then
+before each substitution the line shall be written;
+the written line shall reflect all previous substitutions. On the
+following line, <space>s shall be written beneath the
+characters from the line that are before the \fIpattern\fP to be replaced,
+and \fB'^'\fP characters written beneath the
+characters included in the \fIpattern\fP to be replaced. The \fIex\fP
+utility shall then wait for a response from the user. An
+affirmative response shall cause the substitution to be done, while
+any other input shall not make the substitution. An affirmative
+response shall consist of a line with the affirmative response (as
+defined by the current locale) at the beginning of the line.
+This line shall be subject to editing in the same way as the \fIex\fP
+command line.
+.LP
+If interrupted (see the ASYNCHRONOUS EVENTS section), any modifications
+confirmed by the user shall be preserved in the edit
+buffer after the interrupt.
+.LP
+If the remembered search direction is not set, the \fBs\fP command
+shall set it to forward.
+.LP
+In the second Synopsis, the \fB&\fP command shall repeat the previous
+substitution, as if the \fB&\fP command were
+replaced by:
+.sp
+.RS
+.nf
+
+\fBs/\fP\fIpattern\fP\fB/\fP\fIrepl\fP\fB/
+\fP
+.fi
+.RE
+.LP
+where \fIpattern\fP and \fIrepl\fP are as specified in the previous
+\fBs\fP, \fB&\fP, or \fB~\fP command.
+.LP
+In the third Synopsis, the \fB~\fP command shall repeat the previous
+substitution, as if the \fB'~'\fP were
+replaced by:
+.sp
+.RS
+.nf
+
+\fBs/\fP\fIpattern\fP\fB/\fP\fIrepl\fP\fB/
+\fP
+.fi
+.RE
+.LP
+where \fIpattern\fP shall be the last regular expression specified
+to the editor, and \fIrepl\fP shall be from the previous
+substitution (including \fB&\fP and \fB~\fP) command.
+.LP
+These commands shall be affected by the \fILC_MESSAGES\fP environment
+variable.
+.LP
+\fICurrent line\fP: Set to the last line in which a substitution occurred,
+or, unchanged if no substitution occurred.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Suspend
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBsu\fP\fB[\fP\fBspend\fP\fB][\fP\fB!\fP\fB]\fP\fBst\fP\fB[\fP\fBop\fP\fB][\fP\fB!\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+Allow control to return to the invoking process; \fIex\fP shall suspend
+itself as if it had received the SIGTSTP signal. The
+suspension shall occur only if job control is enabled in the invoking
+shell (see the description of \fIset\fP \fB-m\fP).
+.LP
+These commands shall be affected by the \fBautowrite\fP and \fBwriteany\fP
+edit options.
+.LP
+The current \fBsusp\fP character (see \fIstty\fP ) shall be equivalent
+to the \fBsuspend\fP
+command.
+.SS Tag
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBta\fP\fB[\fP\fBg\fP\fB][\fP\fB!\fP\fB]\fP \fItagstring\fP
+.fi
+.RE
+.sp
+.LP
+The results are unspecified if the format of a tags file is not as
+specified by the \fIctags\fP utility (see \fIctags\fP ) description.
+.LP
+The \fBtag\fP command shall search for \fItagstring\fP in the tag
+files referred to by the \fBtag\fP edit option, in the
+order they are specified, until a reference to \fItagstring\fP is
+found. Files shall be searched from beginning to end. If no
+reference is found, it shall be an error and an error message to this
+effect shall be written. If the reference is not found, or if
+an error occurs while processing a file referred to in the \fBtag\fP
+edit option, it shall be an error, and an error message shall
+be written at the first occurrence of such an error.
+.LP
+Otherwise, if the tags file contained a pattern, the pattern shall
+be treated as a regular expression used in the editor; for
+example, for the purposes of the \fBs\fP command.
+.LP
+If the \fItagstring\fP is in a file with a different name than the
+current pathname, set the current pathname to the name of
+that file, and replace the contents of the edit buffer with the contents
+of that file. In this case, if no \fB'!'\fP is appended
+to the command name, and the edit buffer has been modified since the
+last complete write, it shall be an error, unless the file is
+successfully written as specified by the \fBautowrite\fP option.
+.LP
+This command shall be affected by the \fBautowrite\fP, \fBtag\fP,
+\fBtaglength\fP, and \fBwriteany\fP edit options.
+.LP
+\fICurrent line\fP: If the tags file contained a line number, set
+to that line number. If the line number is larger than the
+last line in the edit buffer, an error message shall be written and
+the current line shall be set as specified for the \fBedit\fP
+command.
+.LP
+If the tags file contained a pattern, set to the first occurrence
+of the pattern in the file. If no matching pattern is found,
+an error message shall be written and the current line shall be set
+as specified for the \fBedit\fP command.
+.LP
+\fICurrent column\fP: If the tags file contained a line-number reference
+and that line-number was not larger than the last line
+in the edit buffer, or if the tags file contained a pattern and that
+pattern was found, set to non- <blank>. Otherwise, set
+as specified for the \fBedit\fP command.
+.SS Unabbreviate
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBuna\fP\fB[\fP\fBbbrev\fP\fB]\fP \fIlhs\fP
+.fi
+.RE
+.sp
+.LP
+If \fIlhs\fP is not an entry in the current list of abbreviations
+(see Abbreviate ), it shall be
+an error. Otherwise, delete \fIlhs\fP from the list of abbreviations.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Unchanged.
+.SS Undo
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBu\fP\fB[\fP\fBndo\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+Reverse the changes made by the last command that modified the contents
+of the edit buffer, including \fBundo\fP. For this
+purpose, the \fBglobal\fP, \fBv\fP, \fBopen\fP, and \fBvisual\fP commands,
+and commands resulting from buffer executions and
+mapped character expansions, are considered single commands.
+.LP
+If no action that can be undone preceded the \fBundo\fP command, it
+shall be an error.
+.LP
+If the \fBundo\fP command restores lines that were marked, the mark
+shall also be restored unless it was reset subsequent to
+the deletion of the lines.
+.LP
+\fICurrent line\fP:
+.IP " 1." 4
+If lines are added or changed in the file, set to the first line added
+or changed.
+.LP
+.IP " 2." 4
+Set to the line before the first line deleted, if it exists.
+.LP
+.IP " 3." 4
+Set to 1 if the edit buffer is not empty.
+.LP
+.IP " 4." 4
+Set to zero.
+.LP
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Unmap
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBunm\fP\fB[\fP\fBap\fP\fB][\fP\fB!\fP\fB]\fP \fIlhs\fP
+.fi
+.RE
+.sp
+.LP
+If \fB'!'\fP is appended to the command name, and if \fIlhs\fP is
+not an entry in the list of text input mode map
+definitions, it shall be an error. Otherwise, delete \fIlhs\fP from
+the list of text input mode map definitions.
+.LP
+If no \fB'!'\fP is appended to the command name, and if \fIlhs\fP
+is not an entry in the list of command mode map
+definitions, it shall be an error. Otherwise, delete \fIlhs\fP from
+the list of command mode map definitions.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Unchanged.
+.SS Version
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBve\fP\fB[\fP\fBrsion\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+Write a message containing version information for the editor. The
+format of the message is unspecified.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Unchanged.
+.SS Visual
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI1addr\fP\fB]\fP \fBvi\fP\fB[\fP\fBsual\fP\fB][\fP\fItype\fP\fB][\fP\fIcount\fP\fB][\fP\fIflags\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+If \fIex\fP is currently in open or visual mode, the Synopsis and
+behavior of the visual command shall be the same as the
+\fBedit\fP command, as specified by Edit .
+.LP
+Otherwise, this command need not be supported on block-mode terminals
+or terminals with insufficient capabilities. If standard
+input, standard output, or standard error are not terminal devices,
+the results are unspecified.
+.LP
+If \fIcount\fP is specified, the value of the \fBwindow\fP edit option
+shall be set to \fIcount\fP (as described in window ). If the \fB'^'\fP
+type character was also specified, the \fBwindow\fP edit option shall
+be set
+before being used by the type character.
+.LP
+Enter visual mode. If \fItype\fP is not specified, it shall be as
+if a \fItype\fP of \fB'+'\fP was specified. The
+\fItype\fP shall cause the following effects:
+.TP 7
+\fB+\fP
+Place the beginning of the specified line at the top of the display.
+.TP 7
+\fB-\fP
+Place the end of the specified line at the bottom of the display.
+.TP 7
+\fB\&.\fP
+Place the beginning of the specified line in the middle of the display.
+.TP 7
+\fB^\fP
+If the specified line is less than or equal to the value of the \fBwindow\fP
+edit option, set the line to 1; otherwise,
+decrement the line by the value of the \fBwindow\fP edit option minus
+1. Place the beginning of this line as close to the bottom
+of the displayed lines as possible, while still displaying the value
+of the \fBwindow\fP edit option number of lines.
+.sp
+.LP
+\fICurrent line\fP: Set to the specified line.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Write
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI2addr\fP\fB]\fP \fBw\fP\fB[\fP\fBrite\fP\fB][\fP\fB!\fP\fB][\fP\fB>>\fP\fB][\fP\fIfile\fP\fB]
+[\fP\fI2addr\fP\fB]\fP \fBw\fP\fB[\fP\fBrite\fP\fB][\fP\fB!\fP\fB][\fP\fIfile\fP\fB]
+[\fP\fI2addr\fP\fB]\fP \fBwq\fP\fB[\fP\fB!\fP\fB][\fP\fB>>\fP\fB][\fP\fIfile\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+If no lines are specified, the lines shall default to the entire file.
+.LP
+The command \fBwq\fP shall be equivalent to a \fBwrite\fP command
+followed by a \fBquit\fP command; \fBwq!\fP shall be
+equivalent to \fBwrite!\fP followed by \fBquit\fP. In both cases,
+if the \fBwrite\fP command fails, the \fBquit\fP shall not be
+attempted.
+.LP
+If the command name is not followed by one or more <blank>s, or \fIfile\fP
+is not preceded by a \fB'!'\fP character,
+the \fBwrite\fP shall be to a file.
+.IP " 1." 4
+If the \fB>>\fP argument is specified, and the file already exists,
+the lines shall be appended to the file instead of
+replacing its contents. If the \fB>>\fP argument is specified, and
+the file does not already exist, it is unspecified
+whether the write shall proceed as if the \fB>>\fP argument had not
+been specified or if the write shall fail.
+.LP
+.IP " 2." 4
+If the \fBreadonly\fP edit option is set (see readonly ), the \fBwrite\fP
+shall fail.
+.LP
+.IP " 3." 4
+If \fIfile\fP is specified, and is not the current pathname, and the
+file exists, the \fBwrite\fP shall fail.
+.LP
+.IP " 4." 4
+If \fIfile\fP is not specified, the current pathname shall be used.
+If there is no current pathname, the \fBwrite\fP command
+shall fail.
+.LP
+.IP " 5." 4
+If the current pathname is used, and the current pathname has been
+changed by the \fBfile\fP or \fBread\fP commands, and the
+file exists, the \fBwrite\fP shall fail. If the \fBwrite\fP is successful,
+subsequent \fBwrite\fPs shall not fail for this
+reason (unless the current pathname is changed again).
+.LP
+.IP " 6." 4
+If the whole edit buffer is not being written, and the file to be
+written exists, the \fBwrite\fP shall fail.
+.LP
+.LP
+For rules 1., 2., 4., and 5., the \fBwrite\fP can be forced by appending
+the character \fB'!'\fP to the command name.
+.LP
+For rules 2., 4., and 5., the \fBwrite\fP can be forced by setting
+the \fBwriteany\fP edit option.
+.LP
+Additional, implementation-defined tests may cause the \fBwrite\fP
+to fail.
+.LP
+If the edit buffer is empty, a file without any contents shall be
+written.
+.LP
+An informational message shall be written noting the number of lines
+and bytes written.
+.LP
+Otherwise, if the command is followed by one or more <blank>s, and
+the file is preceded by \fB'!'\fP, the rest of the
+line after the \fB'!'\fP shall have \fB'%'\fP, \fB'#'\fP, and \fB'!'\fP
+characters expanded as described in Command Line Parsing in ex .
+.LP
+The \fIex\fP utility shall then pass two arguments to the program
+named by the \fBshell\fP edit option; the first shall be
+\fB-c\fP and the second shall be the expanded arguments to the \fBwrite\fP
+command as a single argument. The specified lines
+shall be written to the standard input of the command. The standard
+error and standard output of the program, if any, shall be
+written as described for the \fBprint\fP command. If the last character
+in that output is not a <newline>, a <newline>
+shall be written at the end of the output.
+.LP
+The special meaning of the \fB'!'\fP following the \fBwrite\fP command
+can be overridden by escaping it with a backslash
+character.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Unchanged.
+.SS Write and Exit
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI2addr\fP\fB]\fP \fBx\fP\fB[\fP\fBit\fP\fB][\fP\fB!\fP\fB][\fP\fIfile\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+If the edit buffer has not been modified since the last complete \fBwrite\fP,
+\fBxit\fP shall be equivalent to the \fBquit\fP
+command, or if a \fB'!'\fP is appended to the command name, to \fBquit!\fP.
+.LP
+Otherwise, \fBxit\fP shall be equivalent to the \fBwq\fP command,
+or if a \fB'!'\fP is appended to the command name, to
+\fBwq!\fP.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Unchanged.
+.SS Yank
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI2addr\fP\fB]\fP \fBya\fP\fB[\fP\fBnk\fP\fB][\fP\fIbuffer\fP\fB][\fP\fIcount\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+Copy the specified lines to the specified buffer (by default, the
+unnamed buffer), which shall become a line-mode buffer.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Unchanged.
+.SS Adjust Window
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI1addr\fP\fB]\fP \fBz\fP\fB[\fP\fB!\fP\fB][\fP\fItype\fP \fB...\fP\fB][\fP\fIcount\fP\fB][\fP\fIflags\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+If no line is specified, the current line shall be the default; if
+\fItype\fP is omitted as well, the current line value shall
+first be incremented by 1. If incrementing the current line would
+cause it to be greater than the last line in the edit buffer, it
+shall be an error.
+.LP
+If there are <blank>s between the \fItype\fP argument and the preceding
+\fBz\fP command name or optional \fB'!'\fP
+character, it shall be an error.
+.LP
+If \fIcount\fP is specified, the value of the \fBwindow\fP edit option
+shall be set to \fIcount\fP (as described in window ). If \fIcount\fP
+is omitted, it shall default to 2 times the value of the \fBscroll\fP
+edit
+option, or if \fB!\fP was specified, the number of lines in the display
+minus 1.
+.LP
+If \fItype\fP is omitted, then \fIcount\fP lines starting with the
+specified line shall be written. Otherwise, \fIcount\fP
+lines starting with the line specified by the \fItype\fP argument
+shall be written.
+.LP
+The \fItype\fP argument shall change the lines to be written. The
+possible values of \fItype\fP are as follows:
+.TP 7
+\fB-\fP
+The specified line shall be decremented by the following value:
+.sp
+.RS
+.nf
+
+\fB(((number of "-" characters) x\fP \fIcount\fP\fB) -1)
+\fP
+.fi
+.RE
+.LP
+If the calculation would result in a number less than 1, it shall
+be an error. Write lines from the edit buffer, starting at the
+new value of line, until \fIcount\fP lines or the last line in the
+edit buffer has been written.
+.TP 7
+\fB+\fP
+The specified line shall be incremented by the following value:
+.sp
+.RS
+.nf
+
+\fB(((number of "+" characters) -1) x\fP \fIcount\fP\fB) +1
+\fP
+.fi
+.RE
+.LP
+If the calculation would result in a number greater than the last
+line in the edit buffer, it shall be an error. Write lines
+from the edit buffer, starting at the new value of line, until \fIcount\fP
+lines or the last line in the edit buffer has been
+written.
+.TP 7
+\fB=\fP,\fB.\fP
+If more than a single \fB'.'\fP or \fB'='\fP is specified, it shall
+be an error. The following steps shall be taken:
+.RS
+.IP " 1." 4
+If \fIcount\fP is zero, nothing shall be written.
+.LP
+.IP " 2." 4
+Write as many of the \fIN\fP lines before the current line in the
+edit buffer as exist. If \fIcount\fP or \fB'!'\fP was
+specified, \fIN\fP shall be:
+.sp
+.RS
+.nf
+
+\fB(\fP\fIcount\fP \fB-1) /2
+\fP
+.fi
+.RE
+.LP
+Otherwise, \fIN\fP shall be:
+.sp
+.RS
+.nf
+
+\fB(\fP\fIcount\fP \fB-3) /2
+\fP
+.fi
+.RE
+.LP
+If \fIN\fP is a number less than 3, no lines shall be written.
+.LP
+.IP " 3." 4
+If \fB'='\fP was specified as the type character, write a line consisting
+of the smaller of the number of columns in the
+display divided by two, or 40 \fB'-'\fP characters.
+.LP
+.IP " 4." 4
+Write the current line.
+.LP
+.IP " 5." 4
+Repeat step 3.
+.LP
+.IP " 6." 4
+Write as many of the \fIN\fP lines after the current line in the edit
+buffer as exist. \fIN\fP shall be defined as in step 2.
+If \fIN\fP is a number less than 3, no lines shall be written. If
+\fIcount\fP is less than 3, no lines shall be written.
+.LP
+.RE
+.TP 7
+\fB^\fP
+The specified line shall be decremented by the following value:
+.sp
+.RS
+.nf
+
+\fB(((number of "^" characters) +1) x\fP \fIcount\fP\fB) -1
+\fP
+.fi
+.RE
+.LP
+If the calculation would result in a number less than 1, it shall
+be an error. Write lines from the edit buffer, starting at the
+new value of line, until \fIcount\fP lines or the last line in the
+edit buffer has been written.
+.sp
+.LP
+\fICurrent line\fP: Set to the last line written, unless the type
+is \fB=\fP, in which case, set to the specified line.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Escape
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB!\fP \fIcommand
+\fP\fB[\fP\fIaddr\fP\fB]\fP\fB!\fP \fIcommand\fP
+.fi
+.RE
+.sp
+.LP
+The contents of the line after the \fB'!'\fP shall have \fB'%'\fP,
+\fB'#'\fP, and \fB'!'\fP characters expanded as
+described in Command Line Parsing in ex . If the expansion causes
+the text of the line to change, it
+shall be redisplayed, preceded by a single \fB'!'\fP character.
+.LP
+The \fIex\fP utility shall execute the program named by the \fBshell\fP
+edit option. It shall pass two arguments to the
+program; the first shall be \fB-c\fP, and the second shall be the
+expanded arguments to the \fB!\fP command as a single
+argument.
+.LP
+If no lines are specified, the standard input, standard output, and
+standard error of the program shall be set to the standard
+input, standard output, and standard error of the \fIex\fP program
+when it was invoked. In addition, a warning message shall be
+written if the edit buffer has been modified since the last complete
+write, and the \fBwarn\fP edit option is set.
+.LP
+If lines are specified, they shall be passed to the program as standard
+input, and the standard output and standard error of the
+program shall replace those lines in the edit buffer. Each line in
+the program output (as delimited by <newline>s or the end
+of the output if it is not immediately preceded by a <newline>), shall
+be a separate line in the edit buffer. Any occurrences
+of <carriage-return> and <newline> pairs in the output shall be treated
+as single <newline>s. The specified lines
+shall be copied into the unnamed buffer before they are replaced,
+and the unnamed buffer shall become a line-mode buffer.
+.LP
+If in \fIex\fP mode, a single \fB'!'\fP character shall be written
+when the program completes.
+.LP
+This command shall be affected by the \fBshell\fP and \fBwarn\fP edit
+options. If no lines are specified, this command shall
+be affected by the \fBautowrite\fP and \fBwriteany\fP edit options.
+If lines are specified, this command shall be affected by the
+\fBautoprint\fP edit option.
+.LP
+\fICurrent line\fP:
+.IP " 1." 4
+If no lines are specified, unchanged.
+.LP
+.IP " 2." 4
+Otherwise, set to the last line read in, if any lines are read in.
+.LP
+.IP " 3." 4
+Otherwise, set to the line before the first line of the lines specified,
+if that line exists.
+.LP
+.IP " 4." 4
+Otherwise, set to the first line of the edit buffer if the edit buffer
+is not empty.
+.LP
+.IP " 5." 4
+Otherwise, set to zero.
+.LP
+.LP
+\fICurrent column\fP: If no lines are specified, unchanged. Otherwise,
+set to non- <blank>.
+.SS Shift Left
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI2addr\fP\fB]\fP \fB<\fP\fB[\fP\fB< ...\fP\fB][\fP\fIcount\fP\fB][\fP\fIflags\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+Shift the specified lines to the start of the line; the number of
+column positions to be shifted shall be the number of command
+characters times the value of the \fBshiftwidth\fP edit option. Only
+leading <blank>s shall be deleted or changed into other
+<blank>s in shifting; other characters shall not be affected.
+.LP
+Lines to be shifted shall be copied into the unnamed buffer, which
+shall become a line-mode buffer.
+.LP
+This command shall be affected by the \fBautoprint\fP edit option.
+.LP
+\fICurrent line\fP: Set to the last line in the lines specified.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Shift Right
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI2addr\fP\fB]\fP \fB>\fP\fB[\fP\fB> ...\fP\fB][\fP\fIcount\fP\fB][\fP\fIflags\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+Shift the specified lines away from the start of the line; the number
+of column positions to be shifted shall be the number of
+command characters times the value of the \fBshiftwidth\fP edit option.
+The shift shall be accomplished by adding <blank>s
+as a prefix to the line or changing leading <blank>s into other <blank>s.
+Empty lines shall not be changed.
+.LP
+Lines to be shifted shall be copied into the unnamed buffer, which
+shall become a line-mode buffer.
+.LP
+This command shall be affected by the \fBautoprint\fP edit option.
+.LP
+\fICurrent line\fP: Set to the last line in the lines specified.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS <control>-D
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB<control>-D
+\fP
+.fi
+.RE
+.sp
+.LP
+Write the next \fIn\fP lines, where \fIn\fP is the minimum of the
+values of the \fBscroll\fP edit option and the number of
+lines after the current line in the edit buffer. If the current line
+is the last line of the edit buffer it shall be an error.
+.LP
+\fICurrent line\fP: Set to the last line written.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Write Line Number
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI1addr\fP\fB]\fP \fB=\fP \fB[\fP\fIflags\fP\fB]\fP
+.fi
+.RE
+.sp
+.LP
+If \fIline\fP is not specified, it shall default to the last line
+in the edit buffer. Write the line number of the specified
+line.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Unchanged.
+.SS Execute
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fI2addr\fP\fB]\fP \fB@\fP \fIbuffer\fP\fB[\fP\fI2addr\fP\fB]\fP \fB*\fP \fIbuffer\fP
+.fi
+.RE
+.sp
+.LP
+If no buffer is specified or is specified as \fB'@'\fP or \fB'*'\fP,
+the last buffer executed shall be used. If no
+previous buffer has been executed, it shall be an error.
+.LP
+For each line specified by the addresses, set the current line ( \fB'.'\fP
+) to the specified line, and execute the contents
+of the named \fIbuffer\fP (as they were at the time the \fB@\fP command
+was executed) as \fIex\fP commands. For each line of a
+line-mode buffer, and all but the last line of a character-mode buffer,
+the \fIex\fP command parser shall behave as if the line
+was terminated by a <newline>.
+.LP
+If an error occurs during this process, or a line specified by the
+addresses does not exist when the current line would be set
+to it, or more than a single line was specified by the addresses,
+and the contents of the edit buffer are replaced (for example, by
+the \fIex\fP \fB:edit\fP command) an error message shall be written,
+and no more commands resulting from the execution of this
+command shall be processed.
+.LP
+\fICurrent line\fP: As specified for the individual \fIex\fP commands.
+.LP
+\fICurrent column\fP: As specified for the individual \fIex\fP commands.
+.SS Regular Expressions in ex
+.LP
+The \fIex\fP utility shall support regular expressions that are a
+superset of the basic regular expressions described in the
+Base Definitions volume of IEEE\ Std\ 1003.1-2001, Section 9.3, Basic
+Regular Expressions. A null regular expression ( \fB"//"\fP ) shall
+be equivalent to the last regular expression
+encountered.
+.LP
+Regular expressions can be used in addresses to specify lines and,
+in some commands (for example, the \fBsubstitute\fP
+command), to specify portions of a line to be substituted.
+.LP
+The following constructs can be used to enhance the basic regular
+expressions:
+.TP 7
+\fB\\<\fP
+Match the beginning of a \fIword\fP. (See the definition of \fIword\fP
+at the beginning of Command
+Descriptions in ex .)
+.TP 7
+\fB\\>\fP
+Match the end of a \fIword\fP.
+.TP 7
+\fB~\fP
+Match the replacement part of the last \fBsubstitute\fP command. The
+tilde ( \fB'~'\fP ) character can be escaped in a
+regular expression to become a normal character with no special meaning.
+The backslash shall be discarded.
+.sp
+.LP
+When the editor option \fBmagic\fP is not set, the only characters
+with special meanings shall be \fB'^'\fP at the beginning
+of a pattern, \fB'$'\fP at the end of a pattern, and \fB'\\'\fP .
+The characters \fB'.'\fP, \fB'*'\fP, \fB'['\fP,
+and \fB'~'\fP shall be treated as ordinary characters unless preceded
+by a \fB'\\'\fP ; when preceded by a \fB'\\'\fP
+they shall regain their special meaning, or in the case of backslash,
+be handled as a single backslash. Backslashes used to escape
+other characters shall be discarded.
+.SS Replacement Strings in ex
+.LP
+The character \fB'&'\fP ( \fB'\\&'\fP if the editor option \fBmagic\fP
+is not set) in the replacement string shall
+stand for the text matched by the pattern to be replaced. The character
+\fB'~'\fP ( \fB'\\~'\fP if \fBmagic\fP is
+not set) shall be replaced by the replacement part of the previous
+\fBsubstitute\fP command. The sequence \fB'\\n'\fP, where
+\fIn\fP is an integer, shall be replaced by the text matched by the
+pattern enclosed in the \fIn\fPth set of parentheses
+\fB'\\('\fP and \fB'\\)'\fP .
+.LP
+The strings \fB'\\l'\fP, \fB'\\u'\fP, \fB'\\L'\fP, and \fB'\\U'\fP
+can be used to modify the case of elements in the
+replacement string (using the \fB'\\&'\fP or \fB"\\"\fP digit) notation.
+The string \fB'\\l'\fP ( \fB'\\u'\fP ) shall
+cause the character that follows to be converted to lowercase (uppercase).
+The string \fB'\\L'\fP ( \fB'\\U'\fP ) shall cause
+all characters subsequent to it to be converted to lowercase (uppercase)
+as they are inserted by the substitution until the string
+\fB'\\e'\fP or \fB'\\E'\fP, or the end of the replacement string,
+is encountered.
+.LP
+Otherwise, any character following a backslash shall be treated as
+that literal character, and the escaping backslash shall be
+discarded.
+.LP
+An example of case conversion with the \fBs\fP command is as follows:
+.sp
+.RS
+.nf
+
+\fB:\fP\fBp
+\fP\fBThe cat sat on the mat.
+:\fP\fBs/\\<.at\\>/\\u&/gp
+\fP\fBThe Cat Sat on the Mat.
+:\fP\fBs/S\\(.*\\)M/S\\U\\1\\eM/p
+\fP\fBThe Cat SAT ON THE Mat.\fP
+.fi
+.RE
+.SS Edit Options in ex
+.LP
+The \fIex\fP utility has a number of options that modify its behavior.
+These options have default settings, which can be
+changed using the \fBset\fP command.
+.LP
+Options are Boolean unless otherwise specified.
+.SS autoindent, ai
+.LP
+[Default \fIunset\fP]
+.LP
+If \fBautoindent\fP is set, each line in input mode shall be indented
+(using first as many <tab>s as possible, as
+determined by the editor option \fBtabstop\fP, and then using <space>s)
+to align with another line, as follows:
+.IP " 1." 4
+If in open or visual mode and the text input is part of a line-oriented
+command (see the EXTENDED DESCRIPTION in \fIvi\fP ), align to the
+first column.
+.LP
+.IP " 2." 4
+Otherwise, if in open or visual mode, indentation for each line shall
+be set as follows:
+.RS
+.IP " a." 4
+If a line was previously inserted as part of this command, it shall
+be set to the indentation of the last inserted line by
+default, or as otherwise specified for the <control>-D character in
+\fIInput Mode Commands
+in vi\fP .
+.LP
+.IP " b." 4
+Otherwise, it shall be set to the indentation of the previous current
+line, if any; otherwise, to the first column.
+.LP
+.RE
+.LP
+.IP " 3." 4
+For the \fIex\fP \fBa\fP, \fBi\fP, and \fBc\fP commands, indentation
+for each line shall be set as follows:
+.RS
+.IP " a." 4
+If a line was previously inserted as part of this command, it shall
+be set to the indentation of the last inserted line by
+default, or as otherwise specified for the \fIeof\fP character in
+Scroll .
+.LP
+.IP " b." 4
+Otherwise, if the command is the \fIex\fP \fBa\fP command, it shall
+be set to the line appended after, if any; otherwise to
+the first column.
+.LP
+.IP " c." 4
+Otherwise, if the command is the \fIex\fP \fBi\fP command, it shall
+be set to the line inserted before, if any; otherwise to
+the first column.
+.LP
+.IP " d." 4
+Otherwise, if the command is the \fIex\fP \fBc\fP command, it shall
+be set to the indentation of the line replaced.
+.LP
+.RE
+.LP
+.SS autoprint, ap
+.LP
+[Default \fIset\fP]
+.LP
+If \fBautoprint\fP is set, the current line shall be written after
+each \fIex\fP command that modifies the contents of the
+current edit buffer, and after each \fBtag\fP command for which the
+tag search pattern was found or tag line number was valid,
+unless:
+.IP " 1." 4
+The command was executed while in open or visual mode.
+.LP
+.IP " 2." 4
+The command was executed as part of a \fBglobal\fP or \fBv\fP command
+or \fB@\fP buffer execution.
+.LP
+.IP " 3." 4
+The command was the form of the \fBread\fP command that reads a file
+into the edit buffer.
+.LP
+.IP " 4." 4
+The command was the \fBappend\fP, \fBchange\fP, or \fBinsert\fP command.
+.LP
+.IP " 5." 4
+The command was not terminated by a <newline>.
+.LP
+.IP " 6." 4
+The current line shall be written by a flag specified to the command;
+for example, \fBdelete #\fP shall write the current line
+as specified for the flag modifier to the \fBdelete\fP command, and
+not as specified by the \fBautoprint\fP edit option.
+.LP
+.SS autowrite, aw
+.LP
+[Default \fIunset\fP]
+.LP
+If \fBautowrite\fP is set, and the edit buffer has been modified since
+it was last completely written to any file, the contents
+of the edit buffer shall be written as if the \fIex\fP \fBwrite\fP
+command had been specified without arguments, before each
+command affected by the \fBautowrite\fP edit option is executed. Appending
+the character \fB'!'\fP to the command name of any
+of the \fIex\fP commands except \fB'!'\fP shall prevent the write.
+If the write fails, it shall be an error and the command
+shall not be executed.
+.SS beautify, bf
+.LP
+[Default \fIunset\fP]
+.LP
+If \fBbeautify\fP is set, all non-printable characters, other than
+<tab>s, <newline>s, and <form-feed>s,
+shall be discarded from text read in from files.
+.SS directory, dir
+.LP
+[Default \fIimplementation-defined\fP]
+.LP
+The value of this option specifies the directory in which the editor
+buffer is to be placed. If this directory is not writable
+by the user, the editor shall quit.
+.SS edcompatible, ed
+.LP
+[Default \fIunset\fP]
+.LP
+Causes the presence of \fBg\fP and \fBc\fP suffixes on substitute
+commands to be remembered, and toggled by repeating the
+suffixes.
+.SS errorbells, eb
+.LP
+[Default \fIunset\fP]
+.LP
+If the editor is in \fIex\fP mode, and the terminal does not support
+a standout mode (such as inverse video), and
+\fBerrorbells\fP is set, error messages shall be preceded by alerting
+the terminal.
+.SS exrc
+.LP
+[Default \fIunset\fP]
+.LP
+If \fBexrc\fP is set, \fIex\fP shall access any \fB.exrc\fP file in
+the current directory, as described in Initialization in ex and vi
+\&. If \fBexrc\fP is not set, \fIex\fP shall ignore any \fB.exrc\fP
+file in the
+current directory during initialization, unless the current directory
+is that named by the \fIHOME\fP environment variable.
+.SS ignorecase, ic
+.LP
+[Default \fIunset\fP]
+.LP
+If \fBignorecase\fP is set, characters that have uppercase and lowercase
+representations shall have those representations
+considered as equivalent for purposes of regular expression comparison.
+.LP
+The \fBignorecase\fP edit option shall affect all remembered regular
+expressions; for example, unsetting the \fBignorecase\fP
+edit option shall cause a subsequent \fIvi\fP \fBn\fP command to search
+for the last basic
+regular expression in a case-sensitive fashion.
+.SS list
+.LP
+[Default \fIunset\fP]
+.LP
+If \fBlist\fP is set, edit buffer lines written while in \fIex\fP
+command mode shall be written as specified for the
+\fBprint\fP command with the \fBl\fP flag specified. In open or visual
+mode, each edit buffer line shall be displayed as
+specified for the \fIex\fP \fBprint\fP command with the \fBl\fP flag
+specified. In open or visual text input mode, when the
+cursor does not rest on any character in the line, it shall rest on
+the \fB'$'\fP marking the end of the line.
+.SS magic
+.LP
+[Default \fIset\fP]
+.LP
+If \fBmagic\fP is set, modify the interpretation of characters in
+regular expressions and substitution replacement strings (see
+Regular Expressions in ex and Replacement Strings in ex ).
+.SS mesg
+.LP
+[Default \fIset\fP]
+.LP
+If \fBmesg\fP is set, the permission for others to use the \fBwrite\fP
+or \fBtalk\fP commands to write to the terminal shall
+be turned on while in open or visual mode. The shell-level command
+\fImesg\fP \fBn\fP shall
+take precedence over any setting of the \fIex\fP \fBmesg\fP option;
+that is, if \fBmesg y\fP was issued before the editor
+started (or in a shell escape), such as:
+.sp
+.RS
+.nf
+
+\fB:!mesg y
+\fP
+.fi
+.RE
+.LP
+the \fBmesg\fP option in \fIex\fP shall suppress incoming messages,
+but the \fBmesg\fP option shall not enable incoming
+messages if \fBmesg n\fP was issued.
+.SS number, nu
+.LP
+[Default \fIunset\fP]
+.LP
+If \fBnumber\fP is set, edit buffer lines written while in \fIex\fP
+command mode shall be written with line numbers, in the
+format specified by the \fBprint\fP command with the \fB#\fP flag
+specified. In \fIex\fP text input mode, each line shall be
+preceded by the line number it will have in the file.
+.LP
+In open or visual mode, each edit buffer line shall be displayed with
+a preceding line number, in the format specified by the
+\fIex\fP \fBprint\fP command with the \fB#\fP flag specified. This
+line number shall not be considered part of the line for the
+purposes of evaluating the current column; that is, column position
+1 shall be the first column position after the format specified
+by the \fBprint\fP command.
+.SS paragraphs, para
+.LP
+[Default in the POSIX locale \fBIPLPPPQPP LIpplpipbp\fP]
+.LP
+The \fBparagraphs\fP edit option shall define additional paragraph
+boundaries for the open and visual mode commands. The
+\fBparagraphs\fP edit option can be set to a character string consisting
+of zero or more character pairs. It shall be an error to
+set it to an odd number of characters.
+.SS prompt
+.LP
+[Default \fIset\fP]
+.LP
+If \fBprompt\fP is set, \fIex\fP command mode input shall be prompted
+for with a colon ( \fB':'\fP ); when unset, no prompt
+shall be written.
+.SS readonly
+.LP
+[Default \fIsee text\fP]
+.LP
+If the \fBreadonly\fP edit option is set, read-only mode shall be
+enabled (see Write ). The
+\fBreadonly\fP edit option shall be initialized to set if either of
+the following conditions are true:
+.IP " *" 3
+The command-line option -R was specified.
+.LP
+.IP " *" 3
+Performing actions equivalent to the \fIaccess\fP() function called
+with the following
+arguments indicates that the file lacks write permission:
+.RS
+.IP " 1." 4
+The current pathname is used as the \fIpath\fP argument.
+.LP
+.IP " 2." 4
+The constant \fBW_OK\fP is used as the \fIamode\fP argument.
+.LP
+.RE
+.LP
+.LP
+The \fBreadonly\fP edit option may be initialized to set for other,
+implementation-defined reasons. The \fBreadonly\fP edit
+option shall not be initialized to unset based on any special privileges
+of the user or process. The \fBreadonly\fP edit option
+shall be reinitialized each time that the contents of the edit buffer
+are replaced (for example, by an \fBedit\fP or \fBnext\fP
+command) unless the user has explicitly set it, in which case it shall
+remain set until the user explicitly unsets it. Once unset,
+it shall again be reinitialized each time that the contents of the
+edit buffer are replaced.
+.SS redraw
+.LP
+[Default \fIunset\fP]
+.LP
+The editor simulates an intelligent terminal on a dumb terminal. (Since
+this is likely to require a large amount of output to
+the terminal, it is useful only at high transmission speeds.)
+.SS remap
+.LP
+[Default \fIset\fP]
+.LP
+If \fBremap\fP is set, map translation shall allow for maps defined
+in terms of other maps; translation shall continue until a
+final product is obtained. If unset, only a one-step translation shall
+be done.
+.SS report
+.LP
+[Default 5]
+.LP
+The value of this \fBreport\fP edit option specifies what number of
+lines being added, copied, deleted, or modified in the edit
+buffer will cause an informational message to be written to the user.
+The following conditions shall cause an informational
+message. The message shall contain the number of lines added, copied,
+deleted, or modified, but is otherwise unspecified.
+.IP " *" 3
+An \fIex\fP or \fIvi\fP editor command, other than \fBopen\fP, \fBundo\fP,
+or
+\fBvisual\fP, that modifies at least the value of the \fBreport\fP
+edit option number of lines, and which is not part of an
+\fIex\fP \fBglobal\fP or \fBv\fP command, or \fIex\fP or \fIvi\fP
+buffer execution, shall
+cause an informational message to be written.
+.LP
+.IP " *" 3
+An \fIex\fP \fByank\fP or \fIvi\fP \fBy\fP or \fBY\fP command, that
+copies at least the
+value of the \fBreport\fP edit option plus 1 number of lines, and
+which is not part of an \fIex\fP \fBglobal\fP or \fBv\fP
+command, or \fIex\fP or \fIvi\fP buffer execution, shall cause an
+informational message to be
+written.
+.LP
+.IP " *" 3
+An \fIex\fP \fBglobal\fP, \fBv\fP, \fBopen\fP, \fBundo\fP, or \fBvisual\fP
+command or \fIex\fP or \fIvi\fP buffer execution, that adds or deletes
+a total of at least the value of the \fBreport\fP edit
+option number of lines, and which is not part of an \fIex\fP \fBglobal\fP
+or \fBv\fP command, or \fIex\fP or \fIvi\fP buffer execution, shall
+cause an informational message to be written. (For example, if 3 lines
+were added and 8 lines deleted during an \fIex\fP \fBvisual\fP command,
+5 would be the number compared against the \fBreport\fP
+edit option after the command completed.)
+.LP
+.SS scroll, scr
+.LP
+[Default (number of lines in the display -1)/2]
+.LP
+The value of the \fBscroll\fP edit option shall determine the number
+of lines scrolled by the \fIex\fP <control>-D and
+\fBz\fP commands. For the \fIvi\fP <control>-D and <control>-U commands,
+it shall
+be the initial number of lines to scroll when no previous <control>-D
+or <control>-U command has been executed.
+.SS sections
+.LP
+[Default in the POSIX locale \fBNHSHH HUnhsh\fP]
+.LP
+The \fBsections\fP edit option shall define additional section boundaries
+for the open and visual mode commands. The
+\fBsections\fP edit option can be set to a character string consisting
+of zero or more character pairs; it shall be an error to
+set it to an odd number of characters.
+.SS shell, sh
+.LP
+[Default from the environment variable \fISHELL ]\fP
+.LP
+The value of this option shall be a string. The default shall be taken
+from the \fISHELL\fP environment variable. If the
+\fISHELL\fP environment variable is null or empty, the \fIsh\fP (see
+\fIsh\fP ) utility shall be the default.
+.SS shiftwidth, sw
+.LP
+[Default 8]
+.LP
+The value of this option shall give the width in columns of an indentation
+level used during autoindentation and by the shift
+commands ( \fB<\fP and \fB>\fP).
+.SS showmatch, sm
+.LP
+[Default \fIunset\fP]
+.LP
+The functionality described for the \fBshowmatch\fP edit option need
+not be supported on block-mode terminals or terminals with
+insufficient capabilities.
+.LP
+If \fBshowmatch\fP is set, in open or visual mode, when a \fB')'\fP
+or \fB'}'\fP is typed, if the matching \fB'('\fP
+or \fB'{'\fP is currently visible on the display, the matching \fB'('\fP
+or \fB'{'\fP shall be flagged moving the cursor
+to its location for an unspecified amount of time.
+.SS showmode
+.LP
+[Default \fIunset\fP]
+.LP
+If \fBshowmode\fP is set, in open or visual mode, the current mode
+that the editor is in shall be displayed on the last line of
+the display. Command mode and text input mode shall be differentiated;
+other unspecified modes and implementation-defined
+information may be displayed.
+.SS slowopen
+.LP
+[Default \fIunset\fP]
+.LP
+If \fBslowopen\fP is set during open and visual text input modes,
+the editor shall not update portions of the display other
+than those display line columns that display the characters entered
+by the user (see \fIInput
+Mode Commands in vi\fP ).
+.SS tabstop, ts
+.LP
+[Default 8]
+.LP
+The value of this edit option shall specify the column boundary used
+by a <tab> in the display (see autoprint, ap and \fIInput Mode Commands
+in vi\fP ).
+.SS taglength, tl
+.LP
+[Default zero]
+.LP
+The value of this edit option shall specify the maximum number of
+characters that are considered significant in the
+user-specified tag name and in the tag name from the tags file. If
+the value is zero, all characters in both tag names shall be
+significant.
+.SS tags
+.LP
+[Default \fIsee text\fP]
+.LP
+The value of this edit option shall be a string of <blank>-delimited
+pathnames of files used by the \fBtag\fP command.
+The default value is unspecified.
+.SS term
+.LP
+[Default from the environment variable \fITERM ]\fP
+.LP
+The value of this edit option shall be a string. The default shall
+be taken from the \fITERM\fP variable in the environment. If
+the \fITERM\fP environment variable is empty or null, the default
+is unspecified. The editor shall use the value of this edit
+option to determine the type of the display device.
+.LP
+The results are unspecified if the user changes the value of the term
+edit option after editor initialization.
+.SS terse
+.LP
+[Default \fIunset\fP]
+.LP
+If \fBterse\fP is set, error messages may be less verbose. However,
+except for this caveat, error messages are unspecified.
+Furthermore, not all error messages need change for different settings
+of this option.
+.SS warn
+.LP
+[Default \fIset\fP]
+.LP
+If \fBwarn\fP is set, and the contents of the edit buffer have been
+modified since they were last completely written, the
+editor shall write a warning message before certain \fB!\fP commands
+(see Escape ).
+.SS window
+.LP
+[Default \fIsee text\fP]
+.LP
+A value used in open and visual mode, by the <control>-B and <control>-F
+commands, and, in visual mode, to specify
+the number of lines displayed when the screen is repainted.
+.LP
+If the \fB-w\fP command-line option is not specified, the default
+value shall be set to the value of the \fILINES\fP
+environment variable. If the \fILINES\fP environment variable is empty
+or null, the default shall be the number of lines in the
+display minus 1.
+.LP
+Setting the \fBwindow\fP edit option to zero or to a value greater
+than the number of lines in the display minus 1 (either
+explicitly or based on the \fB-w\fP option or the \fILINES\fP environment
+variable) shall cause the \fBwindow\fP edit option to
+be set to the number of lines in the display minus 1.
+.LP
+The baud rate of the terminal line may change the default in an implementation-defined
+manner.
+.SS wrapmargin, wm
+.LP
+[Default 0]
+.LP
+If the value of this edit option is zero, it shall have no effect.
+.LP
+If not in the POSIX locale, the effect of this edit option is implementation-defined.
+.LP
+Otherwise, it shall specify a number of columns from the ending margin
+of the terminal.
+.LP
+During open and visual text input modes, for each character for which
+any part of the character is displayed in a column that is
+less than \fBwrapmargin\fP columns from the ending margin of the display
+line, the editor shall behave as follows:
+.IP " 1." 4
+If the character triggering this event is a <blank>, it, and all immediately
+preceding <blank>s on the current line
+entered during the execution of the current text input command, shall
+be discarded, and the editor shall behave as if the user had
+entered a single <newline> instead. In addition, if the next user-entered
+character is a <space>, it shall be discarded
+as well.
+.LP
+.IP " 2." 4
+Otherwise, if there are one or more <blank>s on the current line immediately
+preceding the last group of inserted non-
+<blank>s which was entered during the execution of the current text
+input command, the <blank>s shall be replaced as if
+the user had entered a single <newline> instead.
+.LP
+.LP
+If the \fBautoindent\fP edit option is set, and the events described
+in 1. or 2. are performed, any <blank>s at or after
+the cursor in the current line shall be discarded.
+.LP
+The ending margin shall be determined by the system or overridden
+by the user, as described for \fICOLUMNS\fP in the
+ENVIRONMENT VARIABLES section and the Base Definitions volume of IEEE\ Std\ 1003.1-2001,
+Chapter 8, Environment Variables.
+.SS wrapscan, ws
+.LP
+[Default \fIset\fP]
+.LP
+If \fBwrapscan\fP is set, searches (the \fIex\fP \fB/\fP or \fB?\fP
+addresses, or open and visual mode \fB/\fP, \fB?\fP,
+\fBN\fP, and \fBn\fP commands) shall wrap around the beginning or
+end of the edit buffer; when unset, searches shall stop at the
+beginning or end of the edit buffer.
+.SS writeany, wa
+.LP
+[Default \fIunset\fP]
+.LP
+If \fBwriteany\fP is set, some of the checks performed when executing
+the \fIex\fP \fBwrite\fP commands shall be inhibited,
+as described in editor option \fBautowrite\fP.
+.SH EXIT STATUS
+.LP
+The following exit values shall be returned:
+.TP 7
+\ 0
+Successful completion.
+.TP 7
+>0
+An error occurred.
+.sp
+.SH CONSEQUENCES OF ERRORS
+.LP
+When any error is encountered and the standard input is not a terminal
+device file, \fIex\fP shall not write the file or return
+to command or text input mode, and shall terminate with a non-zero
+exit status.
+.LP
+Otherwise, when an unrecoverable error is encountered, it shall be
+equivalent to a SIGHUP asynchronous event.
+.LP
+Otherwise, when an error is encountered, the editor shall behave as
+specified in Command Line Parsing
+in ex .
+.LP
+\fIThe following sections are informative.\fP
+.SH APPLICATION USAGE
+.LP
+If a SIGSEGV signal is received while \fIex\fP is saving a file, the
+file might not be successfully saved.
+.LP
+The \fBnext\fP command can accept more than one file, so usage such
+as:
+.sp
+.RS
+.nf
+
+\fBnext `ls [abc]*`
+\fP
+.fi
+.RE
+.LP
+is valid; it would not be valid for the \fBedit\fP or \fBread\fP commands,
+for example, because they expect only one file and
+unspecified results occur.
+.SH EXAMPLES
+.LP
+None.
+.SH RATIONALE
+.LP
+The \fIex\fP/ \fIvi\fP specification is based on the historical practice
+found in the 4 BSD
+and System V implementations of \fIex\fP and \fIvi\fP. A freely redistributable
+implementation
+of \fIex\fP/ \fIvi\fP, which is tracking IEEE\ Std\ 1003.1-2001 fairly
+closely, and
+demonstrates the intended changes between historical implementations
+and IEEE\ Std\ 1003.1-2001, may be obtained by
+anonymous FTP from:
+.sp
+.RS
+.nf
+
+\fBftp://ftp.rdg.opengroup.org/pub/mirrors/nvi
+\fP
+.fi
+.RE
+.LP
+A \fIrestricted editor\fP (both the historical \fIred\fP utility and
+modifications to \fIex\fP) were considered and rejected
+for inclusion. Neither option provided the level of security that
+users might expect.
+.LP
+It is recognized that \fIex\fP visual mode and related features would
+be difficult, if not impossible, to implement
+satisfactorily on a block-mode terminal, or a terminal without any
+form of cursor addressing; thus, it is not a mandatory
+requirement that such features should work on all terminals. It is
+the intention, however, that an \fIex\fP implementation should
+provide the full set of capabilities on all terminals capable of supporting
+them.
+.SS Options
+.LP
+The \fB-c\fP replacement for \fB+\fP \fIcommand\fP was inspired by
+the \fB-e\fP option of \fIsed\fP. Historically, all such commands
+(see \fBedit\fP and \fBnext\fP as well) were executed
+from the last line of the edit buffer. This meant, for example, that
+\fB"+/pattern"\fP would fail unless the \fBwrapscan\fP
+option was set. IEEE\ Std\ 1003.1-2001 requires conformance to historical
+practice. Historically, some implementations
+restricted the \fIex\fP commands that could be listed as part of the
+command line arguments. For consistency,
+IEEE\ Std\ 1003.1-2001 does not permit these restrictions.
+.LP
+In historical implementations of the editor, the \fB-R\fP option (and
+the \fBreadonly\fP edit option) only prevented
+overwriting of files; appending to files was still permitted, mapping
+loosely into the \fIcsh\fP \fBnoclobber\fP variable. Some
+implementations, however, have not followed this semantic, and \fBreadonly\fP
+does not permit appending either.
+IEEE\ Std\ 1003.1-2001 follows the latter practice, believing that
+it is a more obvious and intuitive meaning of
+\fBreadonly\fP.
+.LP
+The \fB-s\fP option suppresses all interactive user feedback and is
+useful for editing scripts in batch jobs. The list of
+specific effects is historical practice. The terminal type "incapable
+of supporting open and visual modes" has historically been
+named "dumb".
+.LP
+The \fB-t\fP option was required because the \fIctags\fP utility appears
+in
+IEEE\ Std\ 1003.1-2001 and the option is available in all historical
+implementations of \fIex\fP.
+.LP
+Historically, the \fIex\fP and \fIvi\fP utilities accepted a \fB-x\fP
+option, which did
+encryption based on the algorithm found in the historical \fIcrypt\fP
+utility. The \fB-x\fP option for encryption, and the
+associated \fIcrypt\fP utility, were omitted because the algorithm
+used was not specifiable and the export control laws of some
+nations make it difficult to export cryptographic technology. In addition,
+it did not historically provide the level of security
+that users might expect.
+.SS Standard Input
+.LP
+An end-of-file condition is not equivalent to an end-of-file character.
+A common end-of-file character, <control>-D, is
+historically an \fIex\fP command.
+.LP
+There was no maximum line length in historical implementations of
+\fIex\fP. Specifically, as it was parsed in chunks, the
+addresses had a different maximum length than the filenames. Further,
+the maximum line buffer size was declared as BUFSIZ, which
+was different lengths on different systems. This version selected
+the value of {LINE_MAX} to impose a reasonable restriction on
+portable usage of \fIex\fP and to aid test suite writers in their
+development of realistic tests that exercise this limit.
+.SS Input Files
+.LP
+It was an explicit decision by the standard developers that a <newline>
+be added to any file lacking one. It was believed
+that this feature of \fIex\fP and \fIvi\fP was relied on by users
+in order to make text files
+lacking a trailing <newline> more portable. It is recognized that
+this will require a user-specified option or extension for
+implementations that permit \fIex\fP and \fIvi\fP to edit files of
+type other than text if
+such files are not otherwise identified by the system. It was agreed
+that the ability to edit files of arbitrary type can be
+useful, but it was not considered necessary to mandate that an \fIex\fP
+or \fIvi\fP
+implementation be required to handle files other than text files.
+.LP
+The paragraph in the INPUT FILES section, "By default, ...", is intended
+to close a long-standing security problem in
+\fIex\fP and \fIvi\fP; that of the "modeline" or "modelines" edit
+option. This feature
+allows any line in the first or last five lines of the file containing
+the strings \fB"ex:"\fP or \fB"vi:"\fP (and,
+apparently, \fB"ei:"\fP or \fB"vx:"\fP ) to be a line containing editor
+commands, and \fIex\fP interprets all the text up to
+the next \fB':'\fP or <newline> as a command. Consider the consequences,
+for example, of an unsuspecting user using
+\fIex\fP or \fIvi\fP as the editor when replying to a mail message
+in which a line such
+as:
+.sp
+.RS
+.nf
+
+\fBex:! rm -rf :
+\fP
+.fi
+.RE
+.LP
+appeared in the signature lines. The standard developers believed
+strongly that an editor should not by default interpret any
+lines of a file. Vendors are strongly urged to delete this feature
+from their implementations of \fIex\fP and \fIvi\fP.
+.SS Asynchronous Events
+.LP
+The intention of the phrase "complete write" is that the entire edit
+buffer be written to stable storage. The note regarding
+temporary files is intended for implementations that use temporary
+files to back edit buffers unnamed by the user.
+.LP
+Historically, SIGQUIT was ignored by \fIex\fP, but was the equivalent
+of the \fBQ\fP command in visual mode; that is, it
+exited visual mode and entered \fIex\fP mode. IEEE\ Std\ 1003.1-2001
+permits, but does not require, this behavior.
+Historically, SIGINT was often used by \fIvi\fP users to terminate
+text input mode (
+<control>-C is often easier to enter than <ESC>). Some implementations
+of \fIvi\fP
+alerted the terminal on this event, and some did not. IEEE\ Std\ 1003.1-2001
+requires that SIGINT behave identically to
+<ESC>, and that the terminal not be alerted.
+.LP
+Historically, suspending the \fIex\fP editor during text input mode
+was similar to SIGINT, as completed lines were retained,
+but any partial line discarded, and the editor returned to command
+mode. IEEE\ Std\ 1003.1-2001 is silent on this issue;
+implementations are encouraged to follow historical practice, where
+possible.
+.LP
+Historically, the \fIvi\fP editor did not treat SIGTSTP as an asynchronous
+event, and it was
+therefore impossible to suspend the editor in visual text input mode.
+There are two major reasons for this. The first is that
+SIGTSTP is a broadcast signal on UNIX systems, and the chain of events
+where the shell \fIexec\fPs an application that then \fIexec\fPs \fIvi\fP
+usually caused confusion for the
+terminal state if SIGTSTP was delivered to the process group in the
+default manner. The second was that most implementations of the
+UNIX \fIcurses\fP package are not reentrant, and the receipt of SIGTSTP
+at the wrong time will cause them to crash.
+IEEE\ Std\ 1003.1-2001 is silent on this issue; implementations are
+encouraged to treat suspension as an asynchronous event
+if possible.
+.LP
+Historically, modifications to the edit buffer made before SIGINT
+interrupted an operation were retained; that is, anywhere from
+zero to all of the lines to be modified might have been modified by
+the time the SIGINT arrived. These changes were not discarded
+by the arrival of SIGINT. IEEE\ Std\ 1003.1-2001 permits this behavior,
+noting that the \fBundo\fP command is required to
+be able to undo these partially completed commands.
+.LP
+The action taken for signals other than SIGINT, SIGCONT, SIGHUP, and
+SIGTERM is unspecified because some implementations attempt
+to save the edit buffer in a useful state when other signals are received.
+.SS Standard Error
+.LP
+For \fIex\fP/ \fIvi\fP, diagnostic messages are those messages reported
+as a result of a
+failed attempt to invoke \fIex\fP or \fIvi\fP, such as invalid options
+or insufficient
+resources, or an abnormal termination condition. Diagnostic messages
+should not be confused with the error messages generated by
+inappropriate or illegal user commands.
+.SS Initialization in ex and vi
+.LP
+If an \fIex\fP command (other than \fBcd\fP, \fBchdir\fP, or \fBsource\fP)
+has a filename argument, one or both of the
+alternate and current pathnames will be set. Informally, they are
+set as follows:
+.IP " 1." 4
+If the \fIex\fP command is one that replaces the contents of the edit
+buffer, and it succeeds, the current pathname will be set
+to the filename argument (the first filename argument in the case
+of the \fBnext\fP command) and the alternate pathname will be
+set to the previous current pathname, if there was one.
+.LP
+.IP " 2." 4
+In the case of the file read/write forms of the \fBread\fP and \fBwrite\fP
+commands, if there is no current pathname, the
+current pathname will be set to the filename argument.
+.LP
+.IP " 3." 4
+Otherwise, the alternate pathname will be set to the filename argument.
+.LP
+.LP
+For example, \fB:edit foo\fP and \fB:recover foo\fP, when successful,
+set the current pathname, and, if there was a previous
+current pathname, the alternate pathname. The commands \fB:write\fP,
+\fB!command\fP, and \fB:edit\fP set neither the current or
+alternate pathnames. If the \fB:edit foo\fP command were to fail for
+some reason, the alternate pathname would be set. The
+\fBread\fP and \fBwrite\fP commands set the alternate pathname to
+their \fIfile\fP argument, unless the current pathname is not
+set, in which case they set the current pathname to their \fIfile\fP
+arguments. The alternate pathname was not historically set by
+the \fB:source\fP command. IEEE\ Std\ 1003.1-2001 requires conformance
+to historical practice. Implementations adding
+commands that take filenames as arguments are encouraged to set the
+alternate pathname as described here.
+.LP
+Historically, \fIex\fP and \fIvi\fP read the \fB.exrc\fP file in the
+\fI$HOME\fP
+directory twice, if the editor was executed in the \fI$HOME\fP directory.
+IEEE\ Std\ 1003.1-2001 prohibits this
+behavior.
+.LP
+Historically, the 4 BSD \fIex\fP and \fIvi\fP read the \fI$HOME\fP
+and local \fB.exrc\fP
+files if they were owned by the real ID of the user, or the \fBsourceany\fP
+option was set, regardless of other considerations.
+This was a security problem because it is possible to put normal UNIX
+system commands inside a \fB.exrc\fP file.
+IEEE\ Std\ 1003.1-2001 does not specify the \fBsourceany\fP option,
+and historical implementations are encouraged to
+delete it.
+.LP
+The \fB.exrc\fP files must be owned by the real ID of the user, and
+not writable by anyone other than the owner. The
+appropriate privileges exception is intended to permit users to acquire
+special privileges, but continue to use the \fB.exrc\fP
+files in their home directories.
+.LP
+System V Release 3.2 and later \fIvi\fP implementations added the
+option \fB[no]exrc\fP.
+The behavior is that local \fB.exrc\fP files are read-only if the
+\fBexrc\fP option is set. The default for the \fBexrc\fP
+option was off, so by default, local \fB.exrc\fP files were not read.
+The problem this was intended to solve was that System V
+permitted users to give away files, so there is no possible ownership
+or writeability test to ensure that the file is safe. This is
+still a security problem on systems where users can give away files,
+but there is nothing additional that
+IEEE\ Std\ 1003.1-2001 can do. The implementation-defined exception
+is intended to permit groups to have local \fB.exrc\fP
+files that are shared by users, by creating pseudo-users to own the
+shared files.
+.LP
+IEEE\ Std\ 1003.1-2001 does not mention system-wide \fIex\fP and \fIvi\fP
+start-up
+files. While they exist in several implementations of \fIex\fP and
+\fIvi\fP, they are not
+present in any implementations considered historical practice by IEEE\ Std\ 1003.1-2001.
+Implementations that have such
+files should use them only if they are owned by the real user ID or
+an appropriate user (for example, root on UNIX systems) and if
+they are not writable by any user other than their owner. System-wide
+start-up files should be read before the \fIEXINIT\fP
+variable, \fB$HOME/.exrc\fP, or local \fB.exrc\fP files are evaluated.
+.LP
+Historically, any \fIex\fP command could be entered in the \fIEXINIT\fP
+variable or the \fB.exrc\fP file, although ones
+requiring that the edit buffer already contain lines of text generally
+caused historical implementations of the editor to drop
+\fBcore\fP. IEEE\ Std\ 1003.1-2001 requires that any \fIex\fP command
+be permitted in the \fIEXINIT\fP variable and
+\fB\&.exrc\fP files, for simplicity of specification and consistency,
+although many of them will obviously fail under many
+circumstances.
+.LP
+The initialization of the contents of the edit buffer uses the phrase
+"the effect shall be" with regard to various \fIex\fP
+commands. The intent of this phrase is that edit buffer contents loaded
+during the initialization phase not be lost; that is,
+loading the edit buffer should fail if the \fB.exrc\fP file read in
+the contents of a file and did not subsequently write the edit
+buffer. An additional intent of this phrase is to specify that the
+initial current line and column is set as specified for the
+individual \fIex\fP commands.
+.LP
+Historically, the \fB-t\fP option behaved as if the tag search were
+a \fB+\fP \fIcommand\fP; that is, it was executed from
+the last line of the file specified by the tag. This resulted in the
+search failing if the pattern was a forward search pattern and
+the \fBwrapscan\fP edit option was not set. IEEE\ Std\ 1003.1-2001
+does not permit this behavior, requiring that the
+search for the tag pattern be performed on the entire file, and, if
+not found, that the current line be set to a more reasonable
+location in the file.
+.LP
+Historically, the empty edit buffer presented for editing when a file
+was not specified by the user was unnamed. This is
+permitted by IEEE\ Std\ 1003.1-2001; however, implementations are
+encouraged to provide users a temporary filename for this
+buffer because it permits them the use of \fIex\fP commands that use
+the current pathname during temporary edit sessions.
+.LP
+Historically, the file specified using the \fB-t\fP option was not
+part of the current argument list. This practice is
+permitted by IEEE\ Std\ 1003.1-2001; however, implementations are
+encouraged to include its name in the current argument
+list for consistency.
+.LP
+Historically, the \fB-c\fP command was generally not executed until
+a file that already exists was edited.
+IEEE\ Std\ 1003.1-2001 requires conformance to this historical practice.
+Commands that could cause the \fB-c\fP command to
+be executed include the \fIex\fP commands \fBedit\fP, \fBnext\fP,
+\fBrecover\fP, \fBrewind\fP, and \fBtag\fP, and the \fIvi\fP commands
+<control>-^ and <control>-]. Historically, reading a file into an
+edit buffer did not cause the \fB-c\fP command to be executed (even
+though it might set the current pathname) with the exception
+that it did cause the \fB-c\fP command to be executed if: the editor
+was in \fIex\fP mode, the edit buffer had no current
+pathname, the edit buffer was empty, and no read commands had yet
+been attempted. For consistency and simplicity of specification,
+IEEE\ Std\ 1003.1-2001 does not permit this behavior.
+.LP
+Historically, the \fB-r\fP option was the same as a normal edit session
+if there was no recovery information available for the
+file. This allowed users to enter:
+.sp
+.RS
+.nf
+
+\fBvi -r *.c
+\fP
+.fi
+.RE
+.LP
+and recover whatever files were recoverable. In some implementations,
+recovery was attempted only on the first file named, and
+the file was not entered into the argument list; in others, recovery
+was attempted for each file named. In addition, some
+historical implementations ignored \fB-r\fP if \fB-t\fP was specified
+or did not support command line \fIfile\fP arguments with
+the \fB-t\fP option. For consistency and simplicity of specification,
+IEEE\ Std\ 1003.1-2001 disallows these special
+cases, and requires that recovery be attempted the first time each
+file is edited.
+.LP
+Historically, \fIvi\fP initialized the \fB`\fP and \fB'\fP marks,
+but \fIex\fP did not.
+This meant that if the first command in \fIex\fP mode was \fBvisual\fP
+or if an \fIex\fP command was executed first (for
+example, \fIvi\fP +10 \fIfile\fP), \fIvi\fP was entered
+without the marks being initialized. Because the standard developers
+believed the marks to be generally useful, and for consistency
+and simplicity of specification, IEEE\ Std\ 1003.1-2001 requires that
+they always be initialized if in open or visual mode,
+or if in \fIex\fP mode and the edit buffer is not empty. Not initializing
+it in \fIex\fP mode if the edit buffer is empty is
+historical practice; however, it has always been possible to set (and
+use) marks in empty edit buffers in open and visual mode edit
+sessions.
+.SS Addressing
+.LP
+Historically, \fIex\fP and \fIvi\fP accepted the additional addressing
+forms \fB'\\/'\fP
+and \fB'\\?'\fP . They were equivalent to \fB"//"\fP and \fB"??"\fP,
+respectively. They are not required by
+IEEE\ Std\ 1003.1-2001, mostly because nobody can remember whether
+they ever did anything different historically.
+.LP
+Historically, \fIex\fP and \fIvi\fP permitted an address of zero for
+several commands, and
+permitted the \fB%\fP address in empty files for others. For consistency,
+IEEE\ Std\ 1003.1-2001 requires support for the
+former in the few commands where it makes sense, and disallows it
+otherwise. In addition, because IEEE\ Std\ 1003.1-2001
+requires that \fB%\fP be logically equivalent to \fB"1,$"\fP, it
+is also supported where it makes sense and disallowed
+otherwise.
+.LP
+Historically, the \fB%\fP address could not be followed by further
+addresses. For consistency and simplicity of specification,
+IEEE\ Std\ 1003.1-2001 requires that additional addresses be supported.
+.LP
+All of the following are valid \fIaddresses\fP:
+.TP 7
+\fB+++\fP
+Three lines after the current line.
+.TP 7
+\fB/\fP\fIre\fP\fB/-\fP
+One line before the next occurrence of \fIre\fP.
+.TP 7
+\fB-2\fP
+Two lines before the current line.
+.TP 7
+\fB3\ ----\ 2\fP
+Line one (note intermediate negative address).
+.TP 7
+\fB1\ 2\ 3\fP
+Line six.
+.sp
+.LP
+Any number of addresses can be provided to commands taking addresses;
+for example, \fB"1,2,3,4,5p"\fP prints lines 4 and 5,
+because two is the greatest valid number of addresses accepted by
+the \fBprint\fP command. This, in combination with the semicolon
+delimiter, permits users to create commands based on ordered patterns
+in the file. For example, the command \fB3;/foo/;+2print\fP
+will display the first line after line 3 that contains the pattern
+\fIfoo\fP, plus the next two lines. Note that the address
+\fB3;\fP must be evaluated before being discarded because the search
+origin for the \fB/foo/\fP command depends on this.
+.LP
+Historically, values could be added to addresses by including them
+after one or more <blank>s; for example,
+\fB3\ -\ 5p\fP wrote the seventh line of the file, and \fB/foo/\ 5\fP
+was the same as \fB/foo/+5\fP. However, only
+absolute values could be added; for example, \fB5\ /foo/\fP was an
+error. IEEE\ Std\ 1003.1-2001 requires conformance
+to historical practice. Address offsets are separately specified from
+addresses because they could historically be provided to
+visual mode search commands.
+.LP
+Historically, any missing addresses defaulted to the current line.
+This was true for leading and trailing comma-delimited
+addresses, and for trailing semicolon-delimited addresses. For consistency,
+IEEE\ Std\ 1003.1-2001 requires it for leading
+semicolon addresses as well.
+.LP
+Historically, \fIex\fP and \fIvi\fP accepted the \fB'^'\fP character
+as both an address
+and as a flag offset for commands. In both cases it was identical
+to the \fB'-'\fP character. IEEE\ Std\ 1003.1-2001
+does not require or prohibit this behavior.
+.LP
+Historically, the enhancements to basic regular expressions could
+be used in addressing; for example, \fB'~'\fP,
+\fB'\\<'\fP, and \fB'\\>'\fP . IEEE\ Std\ 1003.1-2001 requires conformance
+to historical practice; that is, that
+regular expression usage be consistent, and that regular expression
+enhancements be supported wherever regular expressions are
+used.
+.SS Command Line Parsing in ex
+.LP
+Historical \fIex\fP command parsing was even more complex than that
+described here. IEEE\ Std\ 1003.1-2001 requires the
+subset of the command parsing that the standard developers believed
+was documented and that users could reasonably be expected to
+use in a portable fashion, and that was historically consistent between
+implementations. (The discarded functionality is obscure,
+at best.) Historical implementations will require changes in order
+to comply with IEEE\ Std\ 1003.1-2001; however, users
+are not expected to notice any of these changes. Most of the complexity
+in \fIex\fP parsing is to handle three special termination
+cases:
+.IP " 1." 4
+The \fB!\fP, \fBglobal\fP, \fBv\fP, and the filter versions of the
+\fBread\fP and \fBwrite\fP commands are delimited by
+<newline>s (they can contain vertical-line characters that are usually
+shell pipes).
+.LP
+.IP " 2." 4
+The \fBex\fP, \fBedit\fP, \fBnext\fP, and \fBvisual\fP in open and
+visual mode commands all take \fIex\fP commands,
+optionally containing vertical-line characters, as their first arguments.
+.LP
+.IP " 3." 4
+The \fBs\fP command takes a regular expression as its first argument,
+and uses the delimiting characters to delimit the
+command.
+.LP
+.LP
+Historically, vertical-line characters in the \fB+\fP \fIcommand\fP
+argument of the \fBex\fP, \fBedit\fP, \fBnext\fP,
+\fBvi\fP, and \fBvisual\fP commands, and in the \fIpattern\fP and
+\fIreplacement\fP parts of the \fBs\fP command, did not
+delimit the command, and in the filter cases for \fBread\fP and \fBwrite\fP,
+and the \fB!\fP, \fBglobal\fP, and \fBv\fP
+commands, they did not delimit the command at all. For example, the
+following commands are all valid:
+.sp
+.RS
+.nf
+
+\fB:\fP\fBedit +25 | s/abc/ABC/ file.c
+\fP\fB:\fP\fBs/ | /PIPE/
+\fP\fB:\fP\fBread !spell % | columnate
+\fP\fB:\fP\fBglobal/pattern/p | l
+\fP\fB:\fP\fBs/a/b/ | s/c/d | set
+\fP
+.fi
+.RE
+.LP
+Historically, empty or <blank> filled lines in \fB.exrc\fP files and
+\fBsource\fPd files (as well as \fIEXINIT\fP
+variables and \fIex\fP command scripts) were treated as default commands;
+that is, \fBprint\fP commands.
+IEEE\ Std\ 1003.1-2001 specifically requires that they be ignored
+when encountered in \fB.exrc\fP and \fBsource\fPd files
+to eliminate a common source of new user error.
+.LP
+Historically, \fIex\fP commands with multiple adjacent (or <blank>-separated)
+vertical lines were handled oddly when
+executed from \fIex\fP mode. For example, the command \fB|||\fP <carriage-return>,
+when the cursor was on line 1, displayed
+lines 2, 3, and 5 of the file. In addition, the command \fB|\fP would
+only display the line after the next line, instead of the
+next two lines. The former worked more logically when executed from
+\fIvi\fP mode, and
+displayed lines 2, 3, and 4. IEEE\ Std\ 1003.1-2001 requires the \fIvi\fP
+behavior;
+that is, a single default command and line number increment for each
+command separator, and trailing <newline>s after
+vertical-line separators are discarded.
+.LP
+Historically, \fIex\fP permitted a single extra colon as a leading
+command character; for example, \fB:g/pattern/:p\fP was a
+valid command. IEEE\ Std\ 1003.1-2001 generalizes this to require
+that any number of leading colon characters be
+stripped.
+.LP
+Historically, any prefix of the \fBdelete\fP command could be followed
+without intervening <blank>s by a flag character
+because in the command \fBd\ p\fP, \fIp\fP is interpreted as the buffer
+\fIp\fP. IEEE\ Std\ 1003.1-2001 requires
+conformance to historical practice.
+.LP
+Historically, the \fBk\fP command could be followed by the mark name
+without intervening <blank>s.
+IEEE\ Std\ 1003.1-2001 requires conformance to historical practice.
+.LP
+Historically, the \fBs\fP command could be immediately followed by
+flag and option characters; for example,
+\fBs/e/E/|s|sgc3p\fP was a valid command. However, flag characters
+could not stand alone; for example, the commands \fBsp\fP and
+\fBs\ l\fP would fail, while the command \fBsgp\fP and \fBs\ gl\fP
+would succeed. (Obviously, the \fB'#'\fP flag
+character was used as a delimiter character if it followed the command.)
+Another issue was that option characters had to precede
+flag characters even when the command was fully specified; for example,
+the command \fBs/e/E/pg\fP would fail, while the command
+\fBs/e/E/gp\fP would succeed. IEEE\ Std\ 1003.1-2001 requires conformance
+to historical practice.
+.LP
+Historically, the first command name that had a prefix matching the
+input from the user was the executed command; for example,
+\fBve\fP, \fBver\fP, and \fBvers\fP all executed the \fBversion\fP
+command. Commands were in a specific order, however, so that
+\fBa\fP matched \fBappend\fP, not \fBabbreviate\fP. IEEE\ Std\ 1003.1-2001
+requires conformance to historical practice.
+The restriction on command search order for implementations with extensions
+is to avoid the addition of commands such that the
+historical prefixes would fail to work portably.
+.LP
+Historical implementations of \fIex\fP and \fIvi\fP did not correctly
+handle multiple
+\fIex\fP commands, separated by vertical-line characters, that entered
+or exited visual mode or the editor. Because
+implementations of \fIvi\fP exist that do not exhibit this failure
+mode,
+IEEE\ Std\ 1003.1-2001 does not permit it.
+.LP
+The requirement that alphabetic command names consist of all following
+alphabetic characters up to the next non-alphabetic
+character means that alphabetic command names must be separated from
+their arguments by one or more non-alphabetic characters,
+normally a <blank> or \fB'!'\fP character, except as specified for
+the exceptions, the \fBdelete\fP, \fBk\fP, and
+\fBs\fP commands.
+.LP
+Historically, the repeated execution of the \fIex\fP default \fBprint\fP
+commands ( <control>-D, \fIeof\fP,
+<newline>, <carriage-return>) erased any prompting character and displayed
+the next lines without scrolling the
+terminal; that is, immediately below any previously displayed lines.
+This provided a cleaner presentation of the lines in the file
+for the user. IEEE\ Std\ 1003.1-2001 does not require this behavior
+because it may be impossible in some situations;
+however, implementations are strongly encouraged to provide this semantic
+if possible.
+.LP
+Historically, it was possible to change files in the middle of a command,
+and have the rest of the command executed in the new
+file; for example:
+.sp
+.RS
+.nf
+
+\fB:edit +25 file.c | s/abc/ABC/ | 1
+\fP
+.fi
+.RE
+.LP
+was a valid command, and the substitution was attempted in the newly
+edited file. IEEE\ Std\ 1003.1-2001 requires
+conformance to historical practice. The following commands are examples
+that exercise the \fIex\fP parser:
+.sp
+.RS
+.nf
+
+\fBecho 'foo | bar' > file1; echo 'foo/bar' > file2;
+vi
+:edit +1 | s/|/PIPE/ | w file1 | e file2 | 1 | s/\\//SLASH/ | wq
+\fP
+.fi
+.RE
+.LP
+Historically, there was no protection in editor implementations to
+avoid \fIex\fP \fBglobal\fP, \fBv\fP, \fB@\fP, or
+\fB*\fP commands changing edit buffers during execution of their associated
+commands. Because this would almost invariably result
+in catastrophic failure of the editor, and implementations exist that
+do exhibit these problems, IEEE\ Std\ 1003.1-2001
+requires that changing the edit buffer during a \fBglobal\fP or \fBv\fP
+command, or during a \fB@\fP or \fB*\fP command for
+which there will be more than a single execution, be an error. Implementations
+supporting multiple edit buffers simultaneously are
+strongly encouraged to apply the same semantics to switching between
+buffers as well.
+.LP
+The \fIex\fP command quoting required by IEEE\ Std\ 1003.1-2001 is
+a superset of the quoting in historical
+implementations of the editor. For example, it was not historically
+possible to escape a <blank> in a filename; for example,
+\fB:edit\ foo\\\\\\\ bar\fP would report that too many filenames had
+been entered for the edit command, and there was no
+method of escaping a <blank> in the first argument of an \fBedit\fP,
+\fBex\fP, \fBnext\fP, or \fBvisual\fP command at
+all. IEEE\ Std\ 1003.1-2001 extends historical practice, requiring
+that quoting behavior be made consistent across all
+\fIex\fP commands, except for the \fBmap\fP, \fBunmap\fP, \fBabbreviate\fP,
+and \fBunabbreviate\fP commands, which
+historically used <control>-V instead of backslashes for quoting.
+For those four commands, IEEE\ Std\ 1003.1-2001
+requires conformance to historical practice.
+.LP
+Backslash quoting in \fIex\fP is non-intuitive. Backslash escapes
+are ignored unless they escape a special character; for
+example, when performing \fIfile\fP argument expansion, the string
+\fB"\\\\%"\fP is equivalent to \fB'\\%'\fP, not
+\fB"\\<\fP\fIcurrent\ pathname\fP\fB>"\fP. This can be confusing for
+users because backslash is usually one of the
+characters that causes shell expansion to be performed, and therefore
+shell quoting rules must be taken into consideration.
+Generally, quoting characters are only considered if they escape a
+special character, and a quoting character must be provided for
+each layer of parsing for which the character is special. As another
+example, only a single backslash is necessary for the
+\fB'\\l'\fP sequence in substitute replacement patterns, because the
+character \fB'l'\fP is not special to any parsing layer
+above it.
+.LP
+<control>-V quoting in \fIex\fP is slightly different from backslash
+quoting. In the four commands where
+<control>-V quoting applies ( \fBabbreviate\fP, \fBunabbreviate\fP,
+\fBmap\fP, and \fBunmap\fP), any character may be
+escaped by a <control>-V whether it would have a special meaning or
+not. IEEE\ Std\ 1003.1-2001 requires conformance
+to historical practice.
+.LP
+Historical implementations of the editor did not require delimiters
+within character classes to be escaped; for example, the
+command \fB:s/[/]//\fP on the string \fB"xxx/yyy"\fP would delete
+the \fB'/'\fP from the string.
+IEEE\ Std\ 1003.1-2001 disallows this historical practice for consistency
+and because it places a large burden on
+implementations by requiring that knowledge of regular expressions
+be built into the editor parser.
+.LP
+Historically, quoting <newline>s in \fIex\fP commands was handled
+inconsistently. In most cases, the <newline>
+always terminated the command, regardless of any preceding escape
+character, because backslash characters did not escape
+<newline>s for most \fIex\fP commands. However, some \fIex\fP commands
+(for example, \fBs\fP, \fBmap\fP, and
+\fBabbreviation\fP) permitted <newline>s to be escaped (although in
+the case of \fBmap\fP and \fBabbreviation\fP,
+<control>-V characters escaped them instead of backslashes). This
+was true in not only the command line, but also
+\fB\&.exrc\fP and \fBsource\fPd files. For example, the command:
+.sp
+.RS
+.nf
+
+\fBmap = foo<control-V><newline>bar
+\fP
+.fi
+.RE
+.LP
+would succeed, although it was sometimes difficult to get the <control>-V
+and the inserted <newline> passed to the
+\fIex\fP parser. For consistency and simplicity of specification,
+IEEE\ Std\ 1003.1-2001 requires that it be possible to
+escape <newline>s in \fIex\fP commands at all times, using backslashes
+for most \fIex\fP commands, and using
+<control>-V characters for the \fBmap\fP and \fBabbreviation\fP commands.
+For example, the command \fBprint\fP
+<newline> \fBlist\fP is required to be parsed as the single command
+\fBprint\fP <newline> \fBlist\fP. While this
+differs from historical practice, IEEE\ Std\ 1003.1-2001 developers
+believed it unlikely that any script or user depended
+on the historical behavior.
+.LP
+Historically, an error in a command specified using the \fB-c\fP option
+did not cause the rest of the \fB-c\fP commands to be
+discarded. IEEE\ Std\ 1003.1-2001 disallows this for consistency with
+mapped keys, the \fB@\fP, \fBglobal\fP,
+\fBsource\fP, and \fBv\fP commands, the \fIEXINIT\fP environment variable,
+and the \fB.exrc\fP files.
+.SS Input Editing in ex
+.LP
+One of the common uses of the historical \fIex\fP editor is over slow
+network connections. Editors that run in canonical mode
+can require far less traffic to and from, and far less processing
+on, the host machine, as well as more easily supporting
+block-mode terminals. For these reasons, IEEE\ Std\ 1003.1-2001 requires
+that \fIex\fP be implemented using canonical mode
+input processing, as was done historically.
+.LP
+IEEE\ Std\ 1003.1-2001 does not require the historical 4 BSD input
+editing characters "word erase" or "literal
+next". For this reason, it is unspecified how they are handled by
+\fIex\fP, although they must have the required effect.
+Implementations that resolve them after the line has been ended using
+a <newline> or <control>-M character, and
+implementations that rely on the underlying system terminal support
+for this processing, are both conforming. Implementations are
+strongly urged to use the underlying system functionality, if at all
+possible, for compatibility with other system text input
+interfaces.
+.LP
+Historically, when the \fIeof\fP character was used to decrement the
+\fBautoindent\fP level, the cursor moved to display the
+new end of the \fBautoindent\fP characters, but did not move the cursor
+to a new line, nor did it erase the <control>-D
+character from the line. IEEE\ Std\ 1003.1-2001 does not specify that
+the cursor remain on the same line or that the rest
+of the line is erased; however, implementations are strongly encouraged
+to provide the best possible user interface; that is, the
+cursor should remain on the same line, and any <control>-D character
+on the line should be erased.
+.LP
+IEEE\ Std\ 1003.1-2001 does not require the historical 4 BSD input
+editing character "reprint", traditionally
+<control>-R, which redisplayed the current input from the user. For
+this reason, and because the functionality cannot be
+implemented after the line has been terminated by the user, IEEE\ Std\ 1003.1-2001
+makes no requirements about this
+functionality. Implementations are strongly urged to make this historical
+functionality available, if possible.
+.LP
+Historically, <control>-Q did not perform a literal next function
+in \fIex\fP, as it did in \fIvi\fP. IEEE\ Std\ 1003.1-2001 requires
+conformance to historical practice to avoid breaking
+historical \fIex\fP scripts and \fB.exrc\fP files.
+.SS eof
+.LP
+Whether the \fIeof\fP character immediately modifies the \fBautoindent\fP
+characters in the prompt is left unspecified so that
+implementations can conform in the presence of systems that do not
+support this functionality. Implementations are encouraged to
+modify the line and redisplay it immediately, if possible.
+.LP
+The specification of the handling of the \fIeof\fP character differs
+from historical practice only in that \fIeof\fP
+characters are not discarded if they follow normal characters in the
+text input. Historically, they were always discarded.
+.SS Command Descriptions in ex
+.LP
+Historically, several commands (for example, \fBglobal\fP, \fBv\fP,
+\fBvisual\fP, \fBs\fP, \fBwrite\fP, \fBwq\fP,
+\fByank\fP, \fB!\fP, \fB<\fP, \fB>\fP, \fB&\fP, and \fB~\fP) were
+executable in empty files (that is, the
+default address(es) were 0), or permitted explicit addresses of 0
+(for example, 0 was a valid address, or 0,0 was a valid range).
+Addresses of 0, or command execution in an empty file, make sense
+only for commands that add new text to the edit buffer or write
+commands (because users may wish to write empty files). IEEE\ Std\ 1003.1-2001
+requires this behavior for such commands and
+disallows it otherwise, for consistency and simplicity of specification.
+.LP
+A count to an \fIex\fP command has been historically corrected to
+be no greater than the last line in a file; for example, in a
+five-line file, the command \fB1,6print\fP would fail, but the command
+\fB1print300\fP would succeed.
+IEEE\ Std\ 1003.1-2001 requires conformance to historical practice.
+.LP
+Historically, the use of flags in \fIex\fP commands could be obscure.
+General historical practice was as described by
+IEEE\ Std\ 1003.1-2001, but there were some special cases. For instance,
+the \fBlist\fP, \fBnumber\fP, and \fBprint\fP
+commands ignored trailing address offsets; for example, \fB3p\ +++#\fP
+would display line 3, and 3 would be the current line
+after the execution of the command. The \fBopen\fP and \fBvisual\fP
+commands ignored both the trailing offsets and the trailing
+flags. Also, flags specified to the \fBopen\fP and \fBvisual\fP commands
+interacted badly with the \fBlist\fP edit option, and
+setting and then unsetting it during the open/visual session would
+cause \fIvi\fP to stop
+displaying lines in the specified format. For consistency and simplicity
+of specification, IEEE\ Std\ 1003.1-2001 does not
+permit any of these exceptions to the general rule.
+.LP
+IEEE\ Std\ 1003.1-2001 uses the word \fIcopy\fP in several places
+when discussing buffers. This is not intended to
+imply implementation.
+.LP
+Historically, \fIex\fP users could not specify numeric buffers because
+of the ambiguity this would cause; for example, in the
+command \fB3\ delete\ 2\fP, it is unclear whether 2 is a buffer name
+or a \fIcount\fP. IEEE\ Std\ 1003.1-2001
+requires conformance to historical practice by default, but does not
+preclude extensions.
+.LP
+Historically, the contents of the unnamed buffer were frequently discarded
+after commands that did not explicitly affect it; for
+example, when using the \fBedit\fP command to switch files. For consistency
+and simplicity of specification,
+IEEE\ Std\ 1003.1-2001 does not permit this behavior.
+.LP
+The \fIex\fP utility did not historically have access to the numeric
+buffers, and, furthermore, deleting lines in \fIex\fP did
+not modify their contents. For example, if, after doing a delete in
+\fIvi\fP, the user switched
+to \fIex\fP, did another delete, and then switched back to \fIvi\fP,
+the contents of the
+numeric buffers would not have changed. IEEE\ Std\ 1003.1-2001 requires
+conformance to historical practice. Numeric buffers
+are described in the \fIex\fP utility in order to confine the description
+of buffers to a single location in
+IEEE\ Std\ 1003.1-2001.
+.LP
+The metacharacters that trigger shell expansion in \fIfile\fP arguments
+match historical practice, as does the method for doing
+shell expansion. Implementations wishing to provide users with the
+flexibility to alter the set of metacharacters are encouraged to
+provide a \fBshellmeta\fP string edit option.
+.LP
+Historically, \fIex\fP commands executed from \fIvi\fP refreshed the
+screen when it did not
+strictly need to do so; for example, \fB:!date\ >\ /dev/null\fP does
+not require a screen refresh because the output of
+the UNIX \fIdate\fP command requires only a single line of the screen.
+IEEE\ Std\ 1003.1-2001 requires that the screen be refreshed if it
+has been overwritten, but makes no requirements as to
+how an implementation should make that determination. Implementations
+may prompt and refresh the screen regardless.
+.SS Abbreviate
+.LP
+Historical practice was that characters that were entered as part
+of an abbreviation replacement were subject to \fBmap\fP
+expansions, the \fBshowmatch\fP edit option, further abbreviation
+expansions, and so on; that is, they were logically pushed onto
+the terminal input queue, and were not a simple replacement. IEEE\ Std\ 1003.1-2001
+requires conformance to historical
+practice. Historical practice was that whenever a non-word character
+(that had not been escaped by a <control>-V) was entered
+after a word character, \fIvi\fP would check for abbreviations. The
+check was based on the type
+of the character entered before the word character of the word/non-word
+pair that triggered the check. The word character of the
+word/non-word pair that triggered the check and all characters entered
+before the trigger pair that were of that type were included
+in the check, with the exception of <blank>s, which always delimited
+the abbreviation.
+.LP
+This means that, for the abbreviation to work, the \fIlhs\fP must
+end with a word character, there can be no transitions from
+word to non-word characters (or \fIvice versa\fP) other than between
+the last and next-to-last characters in the \fIlhs\fP, and
+there can be no <blank>s in the \fIlhs\fP. In addition, because of
+the historical quoting rules, it was impossible to enter
+a literal <control>-V in the \fIlhs\fP. IEEE\ Std\ 1003.1-2001 requires
+conformance to historical practice.
+Historical implementations did not inform users when abbreviations
+that could never be used were entered; implementations are
+strongly encouraged to do so.
+.LP
+For example, the following abbreviations will work:
+.sp
+.RS
+.nf
+
+\fB:ab (p REPLACE
+:ab p REPLACE
+:ab ((p REPLACE
+\fP
+.fi
+.RE
+.LP
+The following abbreviations will not work:
+.sp
+.RS
+.nf
+
+\fB:ab ( REPLACE
+:ab (pp REPLACE
+\fP
+.fi
+.RE
+.LP
+Historical practice is that words on the \fIvi\fP colon command line
+were subject to
+abbreviation expansion, including the arguments to the \fBabbrev\fP
+(and more interestingly) the \fBunabbrev\fP command. Because
+there are implementations that do not do abbreviation expansion for
+the first argument to those commands, this is permitted, but
+not required, by IEEE\ Std\ 1003.1-2001. However, the following sequence:
+.sp
+.RS
+.nf
+
+\fB:ab foo bar
+:ab foo baz
+\fP
+.fi
+.RE
+.LP
+resulted in the addition of an abbreviation of \fB"baz"\fP for the
+string \fB"bar"\fP in historical \fIex\fP/ \fIvi\fP, and the sequence:
+.sp
+.RS
+.nf
+
+\fB:ab foo1 bar
+:ab foo2 bar
+:unabbreviate foo2
+\fP
+.fi
+.RE
+.LP
+deleted the abbreviation \fB"foo1"\fP, not \fB"foo2"\fP . These behaviors
+are not permitted by
+IEEE\ Std\ 1003.1-2001 because they clearly violate the expectations
+of the user.
+.LP
+It was historical practice that <control>-V, not backslash, characters
+be interpreted as escaping subsequent characters in
+the \fBabbreviate\fP command. IEEE\ Std\ 1003.1-2001 requires conformance
+to historical practice; however, it should be
+noted that an abbreviation containing a <blank> will never work.
+.SS Append
+.LP
+Historically, any text following a vertical-line command separator
+after an \fBappend\fP, \fBchange\fP, or \fBinsert\fP
+command became part of the insert text. For example, in the command:
+.sp
+.RS
+.nf
+
+\fB:g/pattern/append|stuff1
+\fP
+.fi
+.RE
+.LP
+a line containing the text \fB"stuff1"\fP would be appended to each
+line matching pattern. It was also historically valid to
+enter:
+.sp
+.RS
+.nf
+
+\fB:append|stuff1
+stuff2
+\&.
+\fP
+.fi
+.RE
+.LP
+and the text on the \fIex\fP command line would be appended along
+with the text inserted after it. There was an historical bug,
+however, that the user had to enter two terminating lines (the \fB'.'\fP
+lines) to terminate text input mode in this case.
+IEEE\ Std\ 1003.1-2001 requires conformance to historical practice,
+but disallows the historical need for multiple
+terminating lines.
+.SS Change
+.LP
+See the RATIONALE for the \fBappend\fP command. Historical practice
+for cursor positioning after the change command when no
+text is input, is as described in IEEE\ Std\ 1003.1-2001. However,
+one System V implementation is known to have been
+modified such that the cursor is positioned on the first address specified,
+and not on the line before the first address.
+IEEE\ Std\ 1003.1-2001 disallows this modification for consistency.
+.LP
+Historically, the \fBchange\fP command did not support buffer arguments,
+although some implementations allow the specification
+of an optional buffer. This behavior is neither required nor disallowed
+by IEEE\ Std\ 1003.1-2001.
+.SS Change Directory
+.LP
+A common extension in \fIex\fP implementations is to use the elements
+of a \fBcdpath\fP edit option as prefix directories for
+\fIpath\fP arguments to \fBchdir\fP that are relative pathnames and
+that do not have \fB'.'\fP or \fB".."\fP as their first
+component. Elements in the \fBcdpath\fP edit option are colon-separated.
+The initial value of the \fBcdpath\fP edit option is the
+value of the shell \fICDPATH\fP environment variable. This feature
+was not included in IEEE\ Std\ 1003.1-2001 because it
+does not exist in any of the implementations considered historical
+practice.
+.SS Copy
+.LP
+Historical implementations of \fIex\fP permitted copies to lines inside
+of the specified range; for example, \fB:2,5copy3\fP
+was a valid command. IEEE\ Std\ 1003.1-2001 requires conformance to
+historical practice.
+.SS Delete
+.LP
+IEEE\ Std\ 1003.1-2001 requires support for the historical parsing
+of a \fBdelete\fP command followed by flags, without
+any intervening <blank>s. For example:
+.TP 7
+\fB1dp\fP
+Deletes the first line and prints the line that was second.
+.TP 7
+\fB1delep\fP
+As for \fB1dp\fP.
+.TP 7
+\fB1d\fP
+Deletes the first line, saving it in buffer \fIp\fP.
+.TP 7
+\fB1d\ p1l\fP
+(Pee-one-ell.) Deletes the first line, saving it in buffer \fIp\fP,
+and listing the line that was second.
+.sp
+.SS Edit
+.LP
+Historically, any \fIex\fP command could be entered as a \fB+\fP \fIcommand\fP
+argument to the \fBedit\fP command, although
+some (for example, \fBinsert\fP and \fBappend\fP) were known to confuse
+historical implementations. For consistency and
+simplicity of specification, IEEE\ Std\ 1003.1-2001 requires that
+any command be supported as an argument to the
+\fBedit\fP command.
+.LP
+Historically, the command argument was executed with the current line
+set to the last line of the file, regardless of whether
+the \fBedit\fP command was executed from visual mode or not. IEEE\ Std\ 1003.1-2001
+requires conformance to historical
+practice.
+.LP
+Historically, the \fB+\fP \fIcommand\fP specified to the \fBedit\fP
+and \fBnext\fP commands was delimited by the first
+<blank>, and there was no way to quote them. For consistency, IEEE\ Std\ 1003.1-2001
+requires that the usual
+\fIex\fP backslash quoting be provided.
+.LP
+Historically, specifying the \fB+\fP \fIcommand\fP argument to the
+edit command required a filename to be specified as well;
+for example, \fB:edit\ +100\fP would always fail. For consistency
+and simplicity of specification,
+IEEE\ Std\ 1003.1-2001 does not permit this usage to fail for that
+reason.
+.LP
+Historically, only the cursor position of the last file edited was
+remembered by the editor. IEEE\ Std\ 1003.1-2001
+requires that this be supported; however, implementations are permitted
+to remember and restore the cursor position for any file
+previously edited.
+.SS File
+.LP
+Historical versions of the \fIex\fP editor \fBfile\fP command displayed
+a current line and number of lines in the edit buffer
+of 0 when the file was empty, while the \fIvi\fP <control>-G command
+displayed a current
+line and number of lines in the edit buffer of 1 in the same situation.
+IEEE\ Std\ 1003.1-2001 does not permit this
+discrepancy, instead requiring that a message be displayed indicating
+that the file is empty.
+.SS Global
+.LP
+The two-pass operation of the \fBglobal\fP and \fBv\fP commands is
+not intended to imply implementation, only the required
+result of the operation.
+.LP
+The current line and column are set as specified for the individual
+\fIex\fP commands. This requirement is cumulative; that is,
+the current line and column must track across all the commands executed
+by the \fBglobal\fP or \fBv\fP commands.
+.SS Insert
+.LP
+See the RATIONALE for the \fBappend\fP command.
+.LP
+Historically, \fBinsert\fP could not be used with an address of zero;
+that is, not when the edit buffer was empty.
+IEEE\ Std\ 1003.1-2001 requires that this command behave consistently
+with the \fBappend\fP command.
+.SS Join
+.LP
+The action of the \fBjoin\fP command in relation to the special characters
+is only defined for the POSIX locale because the
+correct amount of white space after a period varies; in Japanese none
+is required, in French only a single space, and so on.
+.SS List
+.LP
+The historical output of the \fBlist\fP command was potentially ambiguous.
+The standard developers believed correcting this to
+be more important than adhering to historical practice, and IEEE\ Std\ 1003.1-2001
+requires unambiguous output.
+.SS Map
+.LP
+Historically, command mode maps only applied to command names; for
+example, if the character \fB'x'\fP was mapped to
+\fB'y'\fP, the command \fBfx\fP searched for the \fB'x'\fP character,
+not the \fB'y'\fP character.
+IEEE\ Std\ 1003.1-2001 requires this behavior. Historically, entering
+<control>-V as the first character of a \fIvi\fP command was an error.
+Several implementations have extended the semantics of \fIvi\fP such
+that <control>-V means that the subsequent command character is not
+mapped. This is
+permitted, but not required, by IEEE\ Std\ 1003.1-2001. Regardless,
+using <control>-V to escape the second or later
+character in a sequence of characters that might match a \fBmap\fP
+command, or any character in text input mode, is historical
+practice, and stops the entered keys from matching a map. IEEE\ Std\ 1003.1-2001
+requires conformance to historical
+practice.
+.LP
+Historical implementations permitted digits to be used as a \fBmap\fP
+command \fIlhs\fP, but then ignored the map.
+IEEE\ Std\ 1003.1-2001 requires that the mapped digits not be ignored.
+.LP
+The historical implementation of the \fBmap\fP command did not permit
+\fBmap\fP commands that were more than a single
+character in length if the first character was printable. This behavior
+is permitted, but not required, by
+IEEE\ Std\ 1003.1-2001.
+.LP
+Historically, mapped characters were remapped unless the \fBremap\fP
+edit option was not set, or the prefix of the mapped
+characters matched the mapping characters; for example, in the \fBmap\fP:
+.sp
+.RS
+.nf
+
+\fB:map ab abcd
+\fP
+.fi
+.RE
+.LP
+the characters \fB"ab"\fP were used as is and were not remapped, but
+the characters \fB"cd"\fP were mapped if appropriate.
+This can cause infinite loops in the \fIvi\fP mapping mechanisms.
+IEEE\ Std\ 1003.1-2001 requires conformance to historical practice,
+and that such loops be interruptible.
+.LP
+Text input maps had the same problems with expanding the \fIlhs\fP
+for the \fIex\fP \fBmap!\fP and \fBunmap!\fP command as
+did the \fIex\fP \fBabbreviate\fP and \fBunabbreviate\fP commands.
+See the RATIONALE for the \fIex\fP \fBabbreviate\fP
+command. IEEE\ Std\ 1003.1-2001 requires similar modification of some
+historical practice for the \fBmap\fP and
+\fBunmap\fP commands, as described for the \fBabbreviate\fP and \fBunabbreviate\fP
+commands.
+.LP
+Historically, \fBmap\fPs that were subsets of other \fBmap\fPs behaved
+differently depending on the order in which they were
+defined. For example:
+.sp
+.RS
+.nf
+
+\fB:map! ab short
+:map! abc long
+\fP
+.fi
+.RE
+.LP
+would always translate the characters \fB"ab"\fP to \fB"short"\fP,
+regardless of how fast the characters \fB"abc"\fP
+were entered. If the entry order was reversed:
+.sp
+.RS
+.nf
+
+\fB:map! abc long
+:map! ab short
+\fP
+.fi
+.RE
+.LP
+the characters \fB"ab"\fP would cause the editor to pause, waiting
+for the completing \fB'c'\fP character, and the
+characters might never be mapped to \fB"short"\fP . For consistency
+and simplicity of specification,
+IEEE\ Std\ 1003.1-2001 requires that the shortest match be used at
+all times.
+.LP
+The length of time the editor spends waiting for the characters to
+complete the \fIlhs\fP is unspecified because the timing
+capabilities of systems are often inexact and variable, and it may
+depend on other factors such as the speed of the connection. The
+time should be long enough for the user to be able to complete the
+sequence, but not long enough for the user to have to wait. Some
+implementations of \fIvi\fP have added a \fBkeytime\fP option, which
+permits users to set the
+number of 0,1 seconds the editor waits for the completing characters.
+Because mapped terminal function and cursor keys tend to
+start with an <ESC> character, and <ESC> is the key ending \fIvi\fP
+text input
+mode, \fBmap\fPs starting with <ESC> characters are generally exempted
+from this timeout period, or, at least timed out
+differently.
+.SS Mark
+.LP
+Historically, users were able to set the "previous context" marks
+explicitly. In addition, the \fIex\fP commands \fB"\fP
+and \fB'`\fP and the \fIvi\fP commands \fB"\fP, \fB``\fP, \fB`'\fP,
+and \fB'`\fP all
+referred to the same mark. In addition, the previous context marks
+were not set if the command, with which the address setting the
+mark was associated, failed. IEEE\ Std\ 1003.1-2001 requires conformance
+to historical practice. Historically, if marked
+lines were deleted, the mark was also deleted, but would reappear
+if the change was undone. IEEE\ Std\ 1003.1-2001 requires
+conformance to historical practice.
+.LP
+The description of the special events that set the \fB`\fP and \fB'\fP
+marks matches historical practice. For example,
+historically the command \fB/a/,/b/\fP did not set the \fB`\fP and
+\fB'\fP marks, but the command \fB/a/,/b/delete\fP did.
+.SS Next
+.LP
+Historically, any \fIex\fP command could be entered as a \fB+\fP \fIcommand\fP
+argument to the \fBnext\fP command, although
+some (for example, \fBinsert\fP and \fBappend\fP) were known to confuse
+historical implementations.
+IEEE\ Std\ 1003.1-2001 requires that any command be permitted and
+that it behave as specified. The \fBnext\fP command can
+accept more than one file, so usage such as:
+.sp
+.RS
+.nf
+
+\fBnext `ls [abc] `
+\fP
+.fi
+.RE
+.LP
+is valid; it need not be valid for the \fBedit\fP or \fBread\fP commands,
+for example, because they expect only one
+filename.
+.LP
+Historically, the \fBnext\fP command behaved differently from the
+\fB:rewind\fP command in that it ignored the force flag if
+the \fBautowrite\fP flag was set. For consistency, IEEE\ Std\ 1003.1-2001
+does not permit this behavior.
+.LP
+Historically, the \fBnext\fP command positioned the cursor as if the
+file had never been edited before, regardless.
+IEEE\ Std\ 1003.1-2001 does not permit this behavior, for consistency
+with the \fBedit\fP command.
+.LP
+Implementations wanting to provide a counterpart to the \fBnext\fP
+command that edited the previous file have used the command
+\fBprev[ious],\fP which takes no \fIfile\fP argument. IEEE\ Std\ 1003.1-2001
+does not require this command.
+.SS Open
+.LP
+Historically, the \fBopen\fP command would fail if the \fBopen\fP
+edit option was not set. IEEE\ Std\ 1003.1-2001 does
+not mention the \fBopen\fP edit option and does not require this behavior.
+Some historical implementations do not permit entering
+open mode from open or visual mode, only from \fIex\fP mode. For consistency,
+IEEE\ Std\ 1003.1-2001 does not permit this
+behavior.
+.LP
+Historically, entering open mode from the command line (that is, \fIvi\fP
+\fB+open\fP)
+resulted in anomalous behaviors; for example, the \fIex\fP file and
+\fIset\fP
+commands, and the \fIvi\fP command <control>-G did not work. For consistency,
+IEEE\ Std\ 1003.1-2001 does not permit this behavior.
+.LP
+Historically, the \fBopen\fP command only permitted \fB'/'\fP characters
+to be used as the search pattern delimiter. For
+consistency, IEEE\ Std\ 1003.1-2001 requires that the search delimiters
+used by the \fBs\fP, \fBglobal\fP, and \fBv\fP
+commands be accepted as well.
+.SS Preserve
+.LP
+The \fBpreserve\fP command does not historically cause the file to
+be considered unmodified for the purposes of future commands
+that may exit the editor. IEEE\ Std\ 1003.1-2001 requires conformance
+to historical practice.
+.LP
+Historical documentation stated that mail was not sent to the user
+when preserve was executed; however, historical
+implementations did send mail in this case. IEEE\ Std\ 1003.1-2001
+requires conformance to the historical
+implementations.
+.SS Print
+.LP
+The writing of NUL by the \fBprint\fP command is not specified as
+a special case because the standard developers did not want
+to require \fIex\fP to support NUL characters. Historically, characters
+were displayed using the ARPA standard mappings, which are
+as follows:
+.IP " 1." 4
+Printable characters are left alone.
+.LP
+.IP " 2." 4
+Control characters less than \\177 are represented as \fB'^'\fP followed
+by the character offset from the \fB'@'\fP
+character in the ASCII map; for example, \\007 is represented as \fB'^G'\fP
+\&.
+.LP
+.IP " 3." 4
+\\177 is represented as \fB'^'\fP followed by \fB'?'\fP .
+.LP
+.LP
+The display of characters having their eighth bit set was less standard.
+Existing implementations use hex (0x00), octal (\\000),
+and a meta-bit display. (The latter displayed bytes that had their
+eighth bit set as the two characters \fB"M-"\fP followed by
+the seven-bit display as described above.) The latter probably has
+the best claim to historical practice because it was used for
+the \fB-v\fP option of 4 BSD and 4 BSD-derived versions of the \fIcat\fP
+utility since
+1980.
+.LP
+No specific display format is required by IEEE\ Std\ 1003.1-2001.
+.LP
+Explicit dependence on the ASCII character set has been avoided where
+possible, hence the use of the phrase an
+"implementation-defined multi-character sequence" for the display
+of non-printable characters in preference to the historical
+usage of, for instance, \fB"^I"\fP for the <tab>. Implementations
+are encouraged to conform to historical practice in the
+absence of any strong reason to diverge.
+.LP
+Historically, all \fIex\fP commands beginning with the letter \fB'p'\fP
+could be entered using capitalized versions of the
+commands; for example, \fBP[rint]\fP, \fBPre[serve]\fP, and \fBPu[t]\fP
+were all valid command names.
+IEEE\ Std\ 1003.1-2001 permits, but does not require, this historical
+practice because capital forms of the commands are
+used by some implementations for other purposes.
+.SS Put
+.LP
+Historically, an \fIex\fP \fBput\fP command, executed from open or
+visual mode, was the same as the open or visual mode
+\fBP\fP command, if the buffer was named and was cut in character
+mode, and the same as the \fBp\fP command if the buffer was
+named and cut in line mode. If the unnamed buffer was the source of
+the text, the entire line from which the text was taken was
+usually \fBput\fP, and the buffer was handled as if in line mode,
+but it was possible to get extremely anomalous behavior. In
+addition, using the \fBQ\fP command to switch into \fIex\fP mode,
+and then doing a \fBput\fP often resulted in errors as well,
+such as appending text that was unrelated to the (supposed) contents
+of the buffer. For consistency and simplicity of
+specification, IEEE\ Std\ 1003.1-2001 does not permit these behaviors.
+All \fIex\fP \fBput\fP commands are required to
+operate in line mode, and the contents of the buffers are not altered
+by changing the mode of the editor.
+.SS Read
+.LP
+Historically, an \fIex\fP \fBread\fP command executed from open or
+visual mode, executed in an empty file, left an empty line
+as the first line of the file. For consistency and simplicity of specification,
+IEEE\ Std\ 1003.1-2001 does not permit this
+behavior. Historically, a \fBread\fP in open or visual mode from a
+program left the cursor at the last line read in, not the
+first. For consistency, IEEE\ Std\ 1003.1-2001 does not permit this
+behavior.
+.LP
+Historical implementations of \fIex\fP were unable to undo \fBread\fP
+commands that read from the output of a program. For
+consistency, IEEE\ Std\ 1003.1-2001 does not permit this behavior.
+.LP
+Historically, the \fIex\fP and \fIvi\fP message after a successful
+\fBread\fP or
+\fBwrite\fP command specified "characters", not "bytes". IEEE\ Std\ 1003.1-2001
+requires that the number of bytes be
+displayed, not the number of characters, because it may be difficult
+in multi-byte implementations to determine the number of
+characters read. Implementations are encouraged to clarify the message
+displayed to the user.
+.LP
+Historically, reads were not permitted on files other than type regular,
+except that FIFO files could be read (probably only
+because they did not exist when \fIex\fP and \fIvi\fP were originally
+written). Because the
+historical \fIex\fP evaluated \fBread!\fP and \fBread\ !\fP equivalently,
+there can be no optional way to force the read.
+IEEE\ Std\ 1003.1-2001 permits, but does not require, this behavior.
+.SS Recover
+.LP
+Some historical implementations of the editor permitted users to recover
+the edit buffer contents from a previous edit session,
+and then exit without saving those contents (or explicitly discarding
+them). The intent of IEEE\ Std\ 1003.1-2001 in
+requiring that the edit buffer be treated as already modified is to
+prevent this user error.
+.SS Rewind
+.LP
+Historical implementations supported the \fBrewind\fP command when
+the user was editing the first file in the list; that is,
+the file that the \fBrewind\fP command would edit. IEEE\ Std\ 1003.1-2001
+requires conformance to historical practice.
+.SS Substitute
+.LP
+Historically, \fIex\fP accepted an \fBr\fP option to the \fBs\fP command.
+The effect of the \fBr\fP option was to use the
+last regular expression used in any command as the pattern, the same
+as the \fB~\fP command. The \fBr\fP option is not
+required by IEEE\ Std\ 1003.1-2001. Historically, the \fBc\fP and
+\fBg\fP options were toggled; for example, the command
+\fB:s/abc/def/\fP was the same as \fBs/abc/def/ccccgggg\fP. For simplicity
+of specification, IEEE\ Std\ 1003.1-2001 does
+not permit this behavior.
+.LP
+The tilde command is often used to replace the last search RE. For
+example, in the sequence:
+.sp
+.RS
+.nf
+
+\fBs/red/blue/
+/green
+~
+\fP
+.fi
+.RE
+.LP
+the \fB~\fP command is equivalent to:
+.sp
+.RS
+.nf
+
+\fBs/green/blue/
+\fP
+.fi
+.RE
+.LP
+Historically, \fIex\fP accepted all of the following forms:
+.sp
+.RS
+.nf
+
+\fBs/abc/def/
+s/abc/def
+s/abc/
+s/abc
+\fP
+.fi
+.RE
+.LP
+IEEE\ Std\ 1003.1-2001 requires conformance to this historical practice.
+.LP
+The \fBs\fP command presumes that the \fB'^'\fP character only occupies
+a single column in the display. Much of the
+\fIex\fP and \fIvi\fP specification presumes that the <space> only
+occupies a single
+column in the display. There are no known character sets for which
+this is not true.
+.LP
+Historically, the final column position for the substitute commands
+was based on previous column movements; a search for a
+pattern followed by a substitution would leave the column position
+unchanged, while a 0 command followed by a substitution would
+change the column position to the first non- <blank>. For consistency
+and simplicity of specification,
+IEEE\ Std\ 1003.1-2001 requires that the final column position always
+be set to the first non- <blank>.
+.SS Set
+.LP
+Historical implementations redisplayed all of the options for each
+occurrence of the \fBall\fP keyword.
+IEEE\ Std\ 1003.1-2001 permits, but does not require, this behavior.
+.SS Tag
+.LP
+No requirement is made as to where \fIex\fP and \fIvi\fP shall look
+for the file referenced
+by the tag entry. Historical practice has been to look for the path
+found in the \fBtags\fP file, based on the current directory.
+A useful extension found in some implementations is to look based
+on the directory containing the tags file that held the entry, as
+well. No requirement is made as to which reference for the tag in
+the tags file is used. This is deliberate, in order to permit
+extensions such as multiple entries in a tags file for a tag.
+.LP
+Because users often specify many different tags files, some of which
+need not be relevant or exist at any particular time,
+IEEE\ Std\ 1003.1-2001 requires that error messages about problem
+tags files be displayed only if the requested tag is not
+found, and then, only once for each time that the \fBtag\fP edit option
+is changed.
+.LP
+The requirement that the current edit buffer be unmodified is only
+necessary if the file indicated by the tag entry is not the
+same as the current file (as defined by the current pathname). Historically,
+the file would be reloaded if the filename had
+changed, as well as if the filename was different from the current
+pathname. For consistency and simplicity of specification,
+IEEE\ Std\ 1003.1-2001 does not permit this behavior, requiring that
+the name be the only factor in the decision.
+.LP
+Historically, \fIvi\fP only searched for tags in the current file
+from the current cursor to
+the end of the file, and therefore, if the \fBwrapscan\fP option was
+not set, tags occurring before the current cursor were not
+found. IEEE\ Std\ 1003.1-2001 considers this a bug, and implementations
+are required to search for the first occurrence in
+the file, regardless.
+.SS Undo
+.LP
+The \fBundo\fP description deliberately uses the word "modified".
+The \fBundo\fP command is not intended to undo commands
+that replace the contents of the edit buffer, such as \fBedit\fP,
+\fBnext\fP, \fBtag\fP, or \fBrecover\fP.
+.LP
+Cursor positioning after the \fBundo\fP command was inconsistent in
+the historical \fIvi\fP, sometimes attempting to restore the original
+cursor position ( \fBglobal\fP, \fBundo\fP,
+and \fBv\fP commands), and sometimes, in the presence of maps, placing
+the cursor on the last line added or changed instead of the
+first. IEEE\ Std\ 1003.1-2001 requires a simplified behavior for consistency
+and simplicity of specification.
+.SS Version
+.LP
+The \fBversion\fP command cannot be exactly specified since there
+is no widely-accepted definition of what the version
+information should contain. Implementations are encouraged to do something
+reasonably intelligent.
+.SS Write
+.LP
+Historically, the \fIex\fP and \fIvi\fP message after a successful
+\fBread\fP or
+\fBwrite\fP command specified "characters", not "bytes". IEEE\ Std\ 1003.1-2001
+requires that the number of bytes be
+displayed, not the number of characters because it may be difficult
+in multi-byte implementations to determine the number of
+characters written. Implementations are encouraged to clarify the
+message displayed to the user.
+.LP
+Implementation-defined tests are permitted so that implementations
+can make additional checks; for example, for locks or file
+modification times.
+.LP
+Historically, attempting to append to a nonexistent file caused an
+error. It has been left unspecified in
+IEEE\ Std\ 1003.1-2001 to permit implementations to let the \fBwrite\fP
+succeed, so that the append semantics are similar
+to those of the historical \fIcsh\fP.
+.LP
+Historical \fIvi\fP permitted empty edit buffers to be written. However,
+since the way \fIvi\fP got around dealing with "empty" files was to
+always have a line in the edit buffer, no
+matter what, it wrote them as files of a single, empty line. IEEE\ Std\ 1003.1-2001
+does not permit this behavior.
+.LP
+Historically, \fIex\fP restored standard output and standard error
+to their values as of when \fIex\fP was invoked, before
+writes to programs were performed. This could disturb the terminal
+configuration as well as be a security issue for some terminals.
+IEEE\ Std\ 1003.1-2001 does not permit this, requiring that the program
+output be captured and displayed as if by the
+\fIex\fP \fBprint\fP command.
+.SS Adjust Window
+.LP
+Historically, the line count was set to the value of the \fBscroll\fP
+option if the type character was end-of-file. This
+feature was broken on most historical implementations long ago, however,
+and is not documented anywhere. For this reason,
+IEEE\ Std\ 1003.1-2001 is resolutely silent.
+.LP
+Historically, the \fBz\fP command was <blank>-sensitive and \fBz\ +\fP
+and \fBz\ -\fP did different things than
+\fBz+\fP and \fBz-\fP because the type could not be distinguished
+from a flag. (The commands \fBz\\fP. and \fBz\ =\fP
+were historically invalid.) IEEE\ Std\ 1003.1-2001 requires conformance
+to this historical practice.
+.LP
+Historically, the \fBz\fP command was further <blank>-sensitive in
+that the \fIcount\fP could not be
+<blank>-delimited; for example, the commands \fBz=\ 5\fP and \fBz-\ 5\fP
+were also invalid. Because the
+\fIcount\fP is not ambiguous with respect to either the type character
+or the flags, this is not permitted by
+IEEE\ Std\ 1003.1-2001.
+.SS Escape
+.LP
+Historically, \fIex\fP filter commands only read the standard output
+of the commands, letting standard error appear on the
+terminal as usual. The \fIvi\fP utility, however, read both standard
+output and standard error.
+IEEE\ Std\ 1003.1-2001 requires the latter behavior for both \fIex\fP
+and \fIvi\fP,
+for consistency.
+.SS Shift Left and Shift Right
+.LP
+Historically, it was possible to add shift characters to increase
+the effect of the command; for example, \fB<<<\fP
+outdented (or \fB>>>\fP indented) the lines 3 levels of indentation
+instead of the default 1.
+IEEE\ Std\ 1003.1-2001 requires conformance to historical practice.
+.SS <control>-D
+.LP
+Historically, the <control>-D command erased the prompt, providing
+the user with an unbroken presentation of lines from
+the edit buffer. This is not required by IEEE\ Std\ 1003.1-2001; implementations
+are encouraged to provide it if possible.
+Historically, the <control>-D command took, and then ignored, a \fIcount\fP.
+IEEE\ Std\ 1003.1-2001 does not permit
+this behavior.
+.SS Write Line Number
+.LP
+Historically, the \fIex\fP \fB=\fP command, when executed in \fIex\fP
+mode in an empty edit buffer, reported 0, and from open
+or visual mode, reported 1. For consistency and simplicity of specification,
+IEEE\ Std\ 1003.1-2001 does not permit this
+behavior.
+.SS Execute
+.LP
+Historically, \fIex\fP did not correctly handle the inclusion of text
+input commands (that is, \fBappend\fP, \fBinsert\fP,
+and \fBchange\fP) in executed buffers. IEEE\ Std\ 1003.1-2001 does
+not permit this exclusion for consistency.
+.LP
+Historically, the logical contents of the buffer being executed did
+not change if the buffer itself were modified by the
+commands being executed; that is, buffer execution did not support
+self-modifying code. IEEE\ Std\ 1003.1-2001 requires
+conformance to historical practice.
+.LP
+Historically, the \fB@\fP command took a range of lines, and the \fB@\fP
+buffer was executed once per line, with the current
+line ( \fB'.'\fP ) set to each specified line. IEEE\ Std\ 1003.1-2001
+requires conformance to historical practice.
+.LP
+Some historical implementations did not notice if errors occurred
+during buffer execution. This, coupled with the ability to
+specify a range of lines for the \fIex\fP \fB@\fP command, makes it
+trivial to cause them to drop \fBcore\fP.
+IEEE\ Std\ 1003.1-2001 requires that implementations stop buffer execution
+if any error occurs, if the specified line
+doesn't exist, or if the contents of the edit buffer itself are replaced
+(for example, the buffer executes the \fIex\fP
+\fB:edit\fP command).
+.SS Regular Expressions in ex
+.LP
+Historical practice is that the characters in the replacement part
+of the last \fBs\fP command-that is, those matched by
+entering a \fB'~'\fP in the regular expression-were not further expanded
+by the regular expression engine. So, if the
+characters contained the string \fB"a.,"\fP they would match \fB'a'\fP
+followed by \fB".,"\fP and not \fB'a'\fP
+followed by any character. IEEE\ Std\ 1003.1-2001 requires conformance
+to historical practice.
+.SS Edit Options in ex
+.LP
+The following paragraphs describe the historical behavior of some
+edit options that were not, for whatever reason, included in
+IEEE\ Std\ 1003.1-2001. Implementations are strongly encouraged to
+only use these names if the functionality described here
+is fully supported.
+.TP 7
+\fBextended\fP
+The \fBextended\fP edit option has been used in some implementations
+of \fIvi\fP to
+provide extended regular expressions instead of basic regular expressions
+This option was omitted from
+IEEE\ Std\ 1003.1-2001 because it is not widespread historical practice.
+.TP 7
+\fBflash\fP
+The \fBflash\fP edit option historically caused the screen to flash
+instead of beeping on error. This option was omitted from
+IEEE\ Std\ 1003.1-2001 because it is not found in some historical
+implementations.
+.TP 7
+\fBhardtabs\fP
+The \fBhardtabs\fP edit option historically defined the number of
+columns between hardware tab settings. This option was
+omitted from IEEE\ Std\ 1003.1-2001 because it was believed to no
+longer be generally useful.
+.TP 7
+\fBmodeline\fP
+The \fBmodeline\fP (sometimes named \fBmodelines\fP) edit option historically
+caused \fIex\fP or \fIvi\fP to read the five first and last lines
+of the file for editor commands. This option is a
+security problem, and vendors are strongly encouraged to delete it
+from historical implementations.
+.TP 7
+\fBopen\fP
+The \fBopen\fP edit option historically disallowed the \fIex\fP \fBopen\fP
+and \fBvisual\fP commands. This edit option was
+omitted because these commands are required by IEEE\ Std\ 1003.1-2001.
+.TP 7
+\fBoptimize\fP
+The \fBoptimize\fP edit option historically expedited text throughput
+by setting the terminal to not do automatic
+<carriage-return>s when printing more than one logical line of output.
+This option was omitted from
+IEEE\ Std\ 1003.1-2001 because it was intended for terminals without
+addressable cursors, which are rarely, if ever, still
+used.
+.TP 7
+\fBruler\fP
+The \fBruler\fP edit option has been used in some implementations
+of \fIvi\fP to present a
+current row/column ruler for the user. This option was omitted from
+IEEE\ Std\ 1003.1-2001 because it is not widespread
+historical practice.
+.TP 7
+\fBsourceany\fP
+The \fBsourceany\fP edit option historically caused \fIex\fP or \fIvi\fP
+to source
+start-up files that were owned by users other than the user running
+the editor. This option is a security problem, and vendors are
+strongly encouraged to remove it from their implementations.
+.TP 7
+\fBtimeout\fP
+The \fBtimeout\fP edit option historically enabled the (now standard)
+feature of only waiting for a short period before
+returning keys that could be part of a macro. This feature was omitted
+from IEEE\ Std\ 1003.1-2001 because its behavior is
+now standard, it is not widely useful, and it was rarely documented.
+.TP 7
+\fBverbose\fP
+The \fBverbose\fP edit option has been used in some implementations
+of \fIvi\fP to cause
+\fIvi\fP to output error messages for common errors; for example,
+attempting to move the cursor
+past the beginning or end of the line instead of only alerting the
+screen. (The historical \fIvi\fP only alerted the terminal and presented
+no message for such errors. The historical editor
+option \fBterse\fP did not select when to present error messages,
+it only made existing error messages more or less verbose.) This
+option was omitted from IEEE\ Std\ 1003.1-2001 because it is not widespread
+historical practice; however, implementors are
+encouraged to use it if they wish to provide error messages for naive
+users.
+.TP 7
+\fBwraplen\fP
+The \fBwraplen\fP edit option has been used in some implementations
+of \fIvi\fP to specify
+an automatic margin measured from the left margin instead of from
+the right margin. This is useful when multiple screen sizes are
+being used to edit a single file. This option was omitted from IEEE\ Std\ 1003.1-2001
+because it is not widespread
+historical practice; however, implementors are encouraged to use it
+if they add this functionality.
+.sp
+.SS autoindent, ai
+.LP
+Historically, the command \fB0a\fP did not do any autoindentation,
+regardless of the current indentation of line 1.
+IEEE\ Std\ 1003.1-2001 requires that any indentation present in line
+1 be used.
+.SS autoprint, ap
+.LP
+Historically, the \fBautoprint\fP edit option was not completely consistent
+or based solely on modifications to the edit
+buffer. Exceptions were the \fBread\fP command (when reading from
+a file, but not from a filter), the \fBappend\fP,
+\fBchange\fP, \fBinsert\fP, \fBglobal\fP, and \fBv\fP commands, all
+of which were not affected by \fBautoprint\fP, and the
+\fBtag\fP command, which was affected by \fBautoprint\fP. IEEE\ Std\ 1003.1-2001
+requires conformance to historical
+practice.
+.LP
+Historically, the \fBautoprint\fP option only applied to the last
+of multiple commands entered using vertical-bar delimiters;
+for example, \fBdelete\fP <newline> was affected by \fBautoprint\fP,
+but \fBdelete|version\fP <newline> was not.
+IEEE\ Std\ 1003.1-2001 requires conformance to historical practice.
+.SS autowrite, aw
+.LP
+Appending the \fB'!'\fP character to the \fIex\fP \fBnext\fP command
+to avoid performing an automatic write was not
+supported in historical implementations. IEEE\ Std\ 1003.1-2001 requires
+that the behavior match the other \fIex\fP
+commands for consistency.
+.SS ignorecase, ic
+.LP
+Historical implementations of case-insensitive matching (the \fBignorecase\fP
+edit option) lead to counterintuitive situations
+when uppercase characters were used in range expressions. Historically,
+the process was as follows:
+.IP " 1." 4
+Take a line of text from the edit buffer.
+.LP
+.IP " 2." 4
+Convert uppercase to lowercase in text line.
+.LP
+.IP " 3." 4
+Convert uppercase to lowercase in regular expressions, except in character
+class specifications.
+.LP
+.IP " 4." 4
+Match regular expressions against text.
+.LP
+.LP
+This would mean that, with \fBignorecase\fP in effect, the text:
+.sp
+.RS
+.nf
+
+\fBThe cat sat on the mat
+\fP
+.fi
+.RE
+.LP
+would be matched by
+.sp
+.RS
+.nf
+
+\fB/^the/
+\fP
+.fi
+.RE
+.LP
+but not by:
+.sp
+.RS
+.nf
+
+\fB/^[A-Z]he/
+\fP
+.fi
+.RE
+.LP
+For consistency with other commands implementing regular expressions,
+IEEE\ Std\ 1003.1-2001 does not permit this
+behavior.
+.SS paragraphs, para
+.LP
+The ISO\ POSIX-2:1993 standard made the default \fBparagraphs\fP and
+\fBsections\fP edit options implementation-defined,
+arguing they were historically oriented to the UNIX system \fItroff\fP
+text formatter, and a "portable user" could use the
+\fB{\fP, \fB}\fP, \fB[[\fP, \fB]]\fP, \fB(\fP, and \fB)\fP commands
+in open or visual mode and have the cursor stop in
+unexpected places. IEEE\ Std\ 1003.1-2001 specifies their values in
+the POSIX locale because the unusual grouping (they
+only work when grouped into two characters at a time) means that they
+cannot be used for general-purpose movement, regardless.
+.SS readonly
+.LP
+Implementations are encouraged to provide the best possible information
+to the user as to the read-only status of the file, with
+the exception that they should not consider the current special privileges
+of the process. This provides users with a safety net
+because they must force the overwrite of read-only files, even when
+running with additional privileges.
+.LP
+The \fBreadonly\fP edit option specification largely conforms to historical
+practice. The only difference is that historical
+implementations did not notice that the user had set the \fBreadonly\fP
+edit option in cases where the file was already marked
+read-only for some reason, and would therefore reinitialize the \fBreadonly\fP
+edit option the next time the contents of the edit
+buffer were replaced. This behavior is disallowed by IEEE\ Std\ 1003.1-2001.
+.SS report
+.LP
+The requirement that lines copied to a buffer interact differently
+than deleted lines is historical practice. For example, if
+the \fBreport\fP edit option is set to 3, deleting 3 lines will cause
+a report to be written, but 4 lines must be copied before a
+report is written.
+.LP
+The requirement that the \fIex\fP \fBglobal\fP, \fBv\fP, \fBopen\fP,
+\fBundo\fP, and \fBvisual\fP commands present reports
+based on the total number of lines added or deleted during the command
+execution, and that commands executed by the \fBglobal\fP
+and \fBv\fP commands not present reports, is historical practice.
+IEEE\ Std\ 1003.1-2001 extends historical practice by
+requiring that buffer execution be treated similarly. The reasons
+for this are two-fold. Historically, only the report by the last
+command executed from the buffer would be seen by the user, as each
+new report would overwrite the last. In addition, the standard
+developers believed that buffer execution had more in common with
+\fBglobal\fP and \fBv\fP commands than it did with other
+\fIex\fP commands, and should behave similarly, for consistency and
+simplicity of specification.
+.SS showmatch, sm
+.LP
+The length of time the cursor spends on the matching character is
+unspecified because the timing capabilities of systems are
+often inexact and variable. The time should be long enough for the
+user to notice, but not long enough for the user to become
+annoyed. Some implementations of \fIvi\fP have added a \fBmatchtime\fP
+option that permits
+users to set the number of 0,1 second intervals the cursor pauses
+on the matching character.
+.SS showmode
+.LP
+The \fBshowmode\fP option has been used in some historical implementations
+of \fIex\fP and \fIvi\fP to display the current editing mode when
+in open or visual mode. The editing modes have
+generally included "command" and "input", and sometimes other modes
+such as "replace" and "change". The string was usually
+displayed on the bottom line of the screen at the far right-hand corner.
+In addition, a preceding \fB'*'\fP character often
+denoted whether the contents of the edit buffer had been modified.
+The latter display has sometimes been part of the
+\fBshowmode\fP option, and sometimes based on another option. This
+option was not available in the 4 BSD historical implementation
+of \fIvi\fP, but was viewed as generally useful, particularly to novice
+users, and is required
+by IEEE\ Std\ 1003.1-2001.
+.LP
+The \fBsmd\fP shorthand for the \fBshowmode\fP option was not present
+in all historical implementations of the editor.
+IEEE\ Std\ 1003.1-2001 requires it, for consistency.
+.LP
+Not all historical implementations of the editor displayed a mode
+string for command mode, differentiating command mode from
+text input mode by the absence of a mode string. IEEE\ Std\ 1003.1-2001
+permits this behavior for consistency with
+historical practice, but implementations are encouraged to provide
+a display string for both modes.
+.SS slowopen
+.LP
+Historically the \fBslowopen\fP option was automatically set if the
+terminal baud rate was less than 1200 baud, or if the baud
+rate was 1200 baud and the \fBredraw\fP option was not set. The \fBslowopen\fP
+option had two effects. First, when inserting
+characters in the middle of a line, characters after the cursor would
+not be pushed ahead, but would appear to be overwritten.
+Second, when creating a new line of text, lines after the current
+line would not be scrolled down, but would appear to be
+overwritten. In both cases, ending text input mode would cause the
+screen to be refreshed to match the actual contents of the edit
+buffer. Finally, terminals that were sufficiently intelligent caused
+the editor to ignore the \fBslowopen\fP option.
+IEEE\ Std\ 1003.1-2001 permits most historical behavior, extending
+historical practice to require \fBslowopen\fP behaviors
+if the edit option is set by the user.
+.SS tags
+.LP
+The default path for tags files is left unspecified as implementations
+may have their own \fBtags\fP implementations that do
+not correspond to the historical ones. The default \fBtags\fP option
+value should probably at least include the file
+\fB\&./tags\fP.
+.SS term
+.LP
+Historical implementations of \fIex\fP and \fIvi\fP ignored changes
+to the \fBterm\fP edit
+option after the initial terminal information was loaded. This is
+permitted by IEEE\ Std\ 1003.1-2001; however,
+implementations are encouraged to permit the user to modify their
+terminal type at any time.
+.SS terse
+.LP
+Historically, the \fBterse\fP edit option optionally provided a shorter,
+less descriptive error message, for some error
+messages. This is permitted, but not required, by IEEE\ Std\ 1003.1-2001.
+Historically, most common visual mode errors (for
+example, trying to move the cursor past the end of a line) did not
+result in an error message, but simply alerted the terminal.
+Implementations wishing to provide messages for novice users are urged
+to do so based on the \fBedit\fP option \fBverbose\fP, and
+not \fBterse\fP.
+.SS window
+.LP
+In historical implementations, the default for the \fBwindow\fP edit
+option was based on the baud rate as follows:
+.IP " 1." 4
+If the baud rate was less than 1200, the \fBedit\fP option \fBw300\fP
+set the window value; for example, the line:
+.sp
+.RS
+.nf
+
+\fBset w300=12
+\fP
+.fi
+.RE
+.LP
+would set the window option to 12 if the baud rate was less than 1200.
+.LP
+.IP " 2." 4
+If the baud rate was equal to 1200, the \fBedit\fP option \fBw1200\fP
+set the window value.
+.LP
+.IP " 3." 4
+If the baud rate was greater than 1200, the \fBedit\fP option \fBw9600\fP
+set the window value.
+.LP
+.LP
+The \fBw300\fP, \fBw1200\fP, and \fBw9600\fP options do not appear
+in IEEE\ Std\ 1003.1-2001 because of their
+dependence on specific baud rates.
+.LP
+In historical implementations, the size of the window displayed by
+various commands was related to, but not necessarily the same
+as, the \fBwindow\fP edit option. For example, the size of the window
+was set by the \fIex\fP command \fBvisual 10\fP, but it
+did not change the value of the \fBwindow\fP edit option. However,
+changing the value of the \fBwindow\fP edit option did change
+the number of lines that were displayed when the screen was repainted.
+IEEE\ Std\ 1003.1-2001 does not permit this behavior
+in the interests of consistency and simplicity of specification, and
+requires that all commands that change the number of lines
+that are displayed do it by setting the value of the \fBwindow\fP
+edit option.
+.SS wrapmargin, wm
+.LP
+Historically, the \fBwrapmargin\fP option did not affect maps inserting
+characters that also had associated \fIcount\fPs; for
+example \fB:map\ K\ 5aABC\ DEF\fP. Unfortunately, there are widely
+used maps that depend on this behavior. For
+consistency and simplicity of specification, IEEE\ Std\ 1003.1-2001
+does not permit this behavior.
+.LP
+Historically, \fBwrapmargin\fP was calculated using the column display
+width of all characters on the screen. For example, an
+implementation using \fB"^I"\fP to represent <tab>s when the \fBlist\fP
+edit option was set, where \fB'^'\fP and
+\fB'I'\fP each took up a single column on the screen, would calculate
+the \fBwrapmargin\fP based on a value of 2 for each
+<tab>. The \fBnumber\fP edit option similarly changed the effective
+length of the line as well.
+IEEE\ Std\ 1003.1-2001 requires conformance to historical practice.
+.SH FUTURE DIRECTIONS
+.LP
+None.
+.SH SEE ALSO
+.LP
+\fICommand Search and Execution\fP, \fIctags\fP, \fIed\fP, \fIsed\fP,
+\fIsh\fP, \fIstty\fP, \fIvi\fP, the System Interfaces volume
+of IEEE\ Std\ 1003.1-2001, \fIaccess\fP()
+.SH COPYRIGHT
+Portions of this text are reprinted and reproduced in electronic form
+from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
+-- Portable Operating System Interface (POSIX), The Open Group Base
+Specifications Issue 6, Copyright (C) 2001-2003 by the Institute of
+Electrical and Electronics Engineers, Inc and The Open Group. In the
+event of any discrepancy between this version and the original IEEE and
+The Open Group Standard, the original IEEE and The Open Group Standard
+is the referee document. The original Standard can be obtained online at
+http://www.opengroup.org/unix/online.html .