aboutsummaryrefslogtreecommitdiffstats
path: root/man-pages-posix-2003/man1p/vi.1p
diff options
context:
space:
mode:
Diffstat (limited to 'man-pages-posix-2003/man1p/vi.1p')
-rw-r--r--man-pages-posix-2003/man1p/vi.1p4968
1 files changed, 4968 insertions, 0 deletions
diff --git a/man-pages-posix-2003/man1p/vi.1p b/man-pages-posix-2003/man1p/vi.1p
new file mode 100644
index 0000000..361936b
--- /dev/null
+++ b/man-pages-posix-2003/man1p/vi.1p
@@ -0,0 +1,4968 @@
+.\" Copyright (c) 2001-2003 The Open Group, All Rights Reserved
+.TH "VI" 1P 2003 "IEEE/The Open Group" "POSIX Programmer's Manual"
+.\" vi
+.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
+vi \- screen-oriented (visual) display editor
+.SH SYNOPSIS
+.LP
+\fBvi\fP \fB[\fP\fB-rR\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
+This utility shall be provided on systems that both support the User
+Portability Utilities option and define the
+POSIX2_CHAR_TERM symbol. On other systems it is optional.
+.LP
+The \fIvi\fP (visual) utility is a screen-oriented text editor. Only
+the open and visual modes of the editor are described in
+IEEE\ Std\ 1003.1-2001; see the line editor \fIex\fP for additional
+editing
+capabilities used in \fIvi\fP. The user can switch back and forth
+between \fIvi\fP and \fIex\fP and execute \fIex\fP commands from within
+\fIvi\fP.
+.LP
+This reference page 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
+When using \fIvi\fP, the terminal screen acts as a window into the
+editing buffer. Changes made to the editing buffer shall be
+reflected in the screen display; the position of the cursor on the
+screen shall indicate the position within the editing
+buffer.
+.LP
+Certain terminals do not have all the capabilities necessary to support
+the complete \fIvi\fP definition. 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 \fIvi\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
+See the \fIex\fP command description of the \fB-c\fP option.
+.TP 7
+\fB-r\fP
+See the \fIex\fP command description of the \fB-r\fP option.
+.TP 7
+\fB-R\fP
+See the \fIex\fP command description of the \fB-R\fP option.
+.TP 7
+\fB-t\ \fP \fItagstring\fP
+See the \fIex\fP command description of the \fB-t\fP option.
+.TP 7
+\fB-w\ \fP \fIsize\fP
+See the \fIex\fP command description of the \fB-w\fP option.
+.sp
+.SH OPERANDS
+.LP
+See the OPERANDS section of the \fIex\fP command for a description
+of the operands supported
+by the \fIvi\fP command.
+.SH STDIN
+.LP
+If standard input is not a terminal device, the results are undefined.
+The standard input consists of a series of commands and
+input text, as described in the EXTENDED DESCRIPTION section.
+.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
+See the INPUT FILES section of the \fIex\fP command for a description
+of the input files
+supported by the \fIvi\fP command.
+.SH ENVIRONMENT VARIABLES
+.LP
+See the ENVIRONMENT VARIABLES section of the \fIex\fP command for
+the environment variables
+that affect the execution of the \fIvi\fP command.
+.SH ASYNCHRONOUS EVENTS
+.LP
+See the ASYNCHRONOUS EVENTS section of the \fIex\fP for the asynchronous
+events that affect
+the execution of the \fIvi\fP command.
+.SH STDOUT
+.LP
+If standard output is not a terminal device, undefined results occur.
+.LP
+Standard output may be used for writing prompts to the user, for informational
+messages, and for writing lines from the
+file.
+.SH STDERR
+.LP
+If standard output is not a terminal device, undefined results occur.
+.LP
+The standard error shall be used only for diagnostic messages.
+.SH OUTPUT FILES
+.LP
+See the OUTPUT FILES section of the \fIex\fP command for a description
+of the output files
+supported by the \fIvi\fP command.
+.SH EXTENDED DESCRIPTION
+.LP
+If the terminal does not have the capabilities necessary to support
+an unspecified portion of the \fIvi\fP definition,
+implementations shall start initially in \fIex\fP mode or open mode.
+Otherwise, after
+initialization, \fIvi\fP shall be in command mode; text input mode
+can be entered by one of several commands used to insert or
+change text. In text input mode, <ESC> can be used to return to command
+mode; other uses of <ESC> are described later
+in this section; see Terminate Command or Input Mode .
+.SS Initialization in ex and vi
+.LP
+See \fIInitialization in ex and vi\fP for a description of \fIex\fP
+and \fIvi\fP initialization for the \fIvi\fP utility.
+.SS Command Descriptions in vi
+.LP
+The following symbols are used in this reference page to represent
+arguments to commands.
+.TP 7
+\fIbuffer\fP
+See the description of \fIbuffer\fP in the EXTENDED DESCRIPTION section
+of the \fIex\fP
+utility; see \fICommand Descriptions in ex\fP .
+.LP
+In open and visual mode, when a command synopsis shows both [ \fIbuffer\fP]
+and [ \fIcount\fP] preceding the command name,
+they can be specified in either order.
+.TP 7
+\fIcount\fP
+A positive integer used as an optional argument to most commands,
+either to give a repeat count or as a size. This argument is
+optional and shall default to 1 unless otherwise specified.
+.LP
+The Synopsis lines for the \fIvi\fP commands <control>-G, <control>-L,
+<control>-R, <control>-],
+\fB%\fP, \fB&\fP, \fB^\fP, \fBD\fP, \fBm\fP, \fBM\fP, \fBQ\fP, \fBu\fP,
+\fBU\fP, and \fBZZ\fP do not have
+\fIcount\fP as an optional argument. Regardless, it shall not be an
+error to specify a \fIcount\fP to these commands, and any
+specified \fIcount\fP shall be ignored.
+.TP 7
+\fImotion\fP
+An optional trailing argument used by the \fB!\fP, \fB<\fP, \fB>\fP,
+\fBc\fP, \fBd\fP, and \fBy\fP commands, which
+is used to indicate the region of text that shall be affected by the
+command. The motion can be either one of the command
+characters repeated or one of several other \fIvi\fP commands (listed
+in the following table). Each of the applicable commands
+specifies the region of text matched by repeating the command; each
+command that can be used as a motion command specifies the
+region of text it affects.
+.LP
+Commands that take \fImotion\fP arguments operate on either lines
+or characters, depending on the circumstances. When operating
+on lines, all lines that fall partially or wholly within the text
+region specified for the command shall be affected. When
+operating on characters, only the exact characters in the specified
+text region shall be affected. Each motion command specifies
+this individually.
+.LP
+When commands that may be motion commands are not used as motion commands,
+they shall set the current position to the current
+line and column as specified.
+.LP
+The following commands shall be valid cursor motion commands:
+.sp
+.RS
+.nf
+
+\fB<apostrophe> ( - j H
+<carriage-return> ) $ k L
+<comma> [[ % l M
+<control>-H ]] _ n N
+<control>-N { ; t T
+<control>-P } ? w W
+<grave accent> ^ b B
+<newline> + e E
+<space> | f F
+<zero> / h G
+\fP
+.fi
+.RE
+.LP
+Any \fIcount\fP that is specified to a command that has an associated
+motion command shall be applied to the motion command. If
+a \fIcount\fP is applied to both the command and its associated motion
+command, the effect shall be multiplicative.
+.sp
+.LP
+The following symbols are used in this section to specify locations
+in the edit buffer:
+.TP 7
+\fIcurrent\ character\fP
+.sp
+The character that is currently indicated by the cursor.
+.TP 7
+\fIend\ of\ a\ line\fP
+.sp
+The point located between the last non- <newline> (if any) and the
+terminating <newline> of a line. For an empty line,
+this location coincides with the beginning of the line.
+.TP 7
+\fIend\ of\ the\ edit\ buffer\fP
+.sp
+The location corresponding to the end of the last line in the edit
+buffer.
+.sp
+.LP
+The following symbols are used in this section to specify command
+actions:
+.TP 7
+\fIbigword\fP
+In the POSIX locale, \fIvi\fP shall recognize four kinds of \fIbigwords\fP:
+.RS
+.IP " 1." 4
+A maximal sequence of non- <blank>s preceded and followed by <blank>s
+or the beginning or end of a line or the edit
+buffer
+.LP
+.IP " 2." 4
+One or more sequential blank lines
+.LP
+.IP " 3." 4
+The first character in the edit buffer
+.LP
+.IP " 4." 4
+The last non- <newline> in the edit buffer
+.LP
+.RE
+.TP 7
+\fIword\fP
+In the POSIX locale, \fIvi\fP shall recognize five kinds of words:
+.RS
+.IP " 1." 4
+A maximal sequence of letters, digits, and underscores, delimited
+at both ends by:
+.RS
+.IP " *" 3
+Characters other than letters, digits, or underscores
+.LP
+.IP " *" 3
+The beginning or end of a line
+.LP
+.IP " *" 3
+The beginning or end of the edit buffer
+.LP
+.RE
+.LP
+.IP " 2." 4
+A maximal sequence of characters other than letters, digits, underscores,
+or <blank>s, delimited at both ends by:
+.RS
+.IP " *" 3
+A letter, digit, underscore
+.LP
+.IP " *" 3
+<blank>s
+.LP
+.IP " *" 3
+The beginning or end of a line
+.LP
+.IP " *" 3
+The beginning or end of the edit buffer
+.LP
+.RE
+.LP
+.IP " 3." 4
+One or more sequential blank lines
+.LP
+.IP " 4." 4
+The first character in the edit buffer
+.LP
+.IP " 5." 4
+The last non- <newline> in the edit buffer
+.LP
+.RE
+.TP 7
+\fIsection\ boundary\fP
+.sp
+A \fIsection boundary\fP is one of the following:
+.RS
+.IP " 1." 4
+A line whose first character is a <form-feed>
+.LP
+.IP " 2." 4
+A line whose first character is an open curly brace ( \fB'{'\fP )
+.LP
+.IP " 3." 4
+A line whose first character is a period and whose second and third
+characters match a two-character pair in the \fBsections\fP
+edit option (see \fIed\fP)
+.LP
+.IP " 4." 4
+A line whose first character is a period and whose only other character
+matches the first character of a two-character pair in
+the \fBsections\fP edit option, where the second character of the
+two-character pair is a <space>
+.LP
+.IP " 5." 4
+The first line of the edit buffer
+.LP
+.IP " 6." 4
+The last line of the edit buffer if the last line of the edit buffer
+is empty or if it is a \fB]]\fP or \fB}\fP command;
+otherwise, the last non- <newline> of the last line of the edit buffer
+.LP
+.RE
+.TP 7
+\fIparagraph\ boundary\fP
+.sp
+A \fIparagraph boundary\fP is one of the following:
+.RS
+.IP " 1." 4
+A section boundary
+.LP
+.IP " 2." 4
+A line whose first character is a period and whose second and third
+characters match a two-character pair in the
+\fBparagraphs\fP edit option (see \fIed\fP)
+.LP
+.IP " 3." 4
+A line whose first character is a period and whose only other character
+matches the first character of a two-character pair in
+the \fIparagraphs\fP edit option, where the second character of the
+two-character pair is a <space>
+.LP
+.IP " 4." 4
+One or more sequential blank lines
+.LP
+.RE
+.TP 7
+\fIremembered\ search\ direction\fP
+.sp
+See the description of \fIremembered search direction\fP in \fIed\fP.
+.TP 7
+\fIsentence\ boundary\fP
+.sp
+A \fIsentence boundary\fP is one of the following:
+.RS
+.IP " 1." 4
+A paragraph boundary
+.LP
+.IP " 2." 4
+The first non- <blank> that occurs after a paragraph boundary
+.LP
+.IP " 3." 4
+The first non- <blank> that occurs after a period ( \fB'.'\fP ), exclamation
+mark ( \fB'!'\fP ), or question mark (
+\fB'?'\fP ), followed by two <space>s or the end of a line; any number
+of closing parenthesis ( \fB')'\fP ), closing
+brackets ( \fB']'\fP ), double quote ( \fB' ),'\fP or single quote
+( \fB'"\fP ) characters can appear between the
+punctuation mark and the two <space>s or end-of-line
+.LP
+.RE
+.sp
+.LP
+In the remainder of the description of the \fIvi\fP utility, the term
+"buffer line" refers to a line in the edit buffer and
+the term "display line" refers to the line or lines on the display
+screen used to display one buffer line. The term "current
+line" refers to a specific "buffer line".
+.LP
+If there are display lines on the screen for which there are no corresponding
+buffer lines because they correspond to lines that
+would be after the end of the file, they shall be displayed as a single
+tilde ( \fB'~'\fP ) character, plus the terminating
+<newline>.
+.LP
+The last line of the screen shall be used to report errors or display
+informational messages. It shall also be used to display
+the input for "line-oriented commands" ( \fB/\fP, \fB?\fP, \fB:\fP,
+and \fB!\fP). When a line-oriented command is executed,
+the editor shall enter text input mode on the last line on the screen,
+using the respective command characters as prompt
+characters. (In the case of the \fB!\fP command, the associated motion
+shall be entered by the user before the editor enters text
+input mode.) The line entered by the user shall be terminated by a
+<newline>, a non- <control>-V-escaped
+<carriage-return>, or unescaped <ESC>. It is unspecified if more characters
+than require a display width minus one
+column number of screen columns can be entered.
+.LP
+If any command is executed that overwrites a portion of the screen
+other than the last line of the screen (for example, the \fIex\fP
+\fBsuspend\fP or \fB!\fP commands), other than the \fIex\fP \fBshell\fP
+command, the user shall be prompted for a character before the screen
+is
+refreshed and the edit session continued.
+.LP
+<tab>s shall take up the number of columns on the screen set by the
+\fBtabstop\fP edit option (see \fIed\fP), unless there are less than
+that number of columns before the display margin that will cause
+the displayed line to be folded; in this case, they shall only take
+up the number of columns up to that boundary.
+.LP
+The cursor shall be placed on the current line and relative to the
+current column as specified by each command described in the
+following sections.
+.LP
+In open mode, if the current line is not already displayed, then it
+shall be displayed.
+.LP
+In visual mode, if the current line is not displayed, then the lines
+that are displayed shall be expanded, scrolled, or redrawn
+to cause an unspecified portion of the current line to be displayed.
+If the screen is redrawn, no more than the number of display
+lines specified by the value of the \fBwindow\fP edit option shall
+be displayed (unless the current line cannot be completely
+displayed in the number of display lines specified by the \fBwindow\fP
+edit option) and the current line shall be positioned as
+close to the center of the displayed lines as possible (within the
+constraints imposed by the distance of the line from the
+beginning or end of the edit buffer). If the current line is before
+the first line in the display and the screen is scrolled, an
+unspecified portion of the current line shall be placed on the first
+line of the display. If the current line is after the last
+line in the display and the screen is scrolled, an unspecified portion
+of the current line shall be placed on the last line of the
+display.
+.LP
+In visual mode, if a line from the edit buffer (other than the current
+line) does not entirely fit into the lines at the bottom
+of the display that are available for its presentation, the editor
+may choose not to display any portion of the line. The lines of
+the display that do not contain text from the edit buffer for this
+reason shall each consist of a single \fB'@'\fP
+character.
+.LP
+In visual mode, the editor may choose for unspecified reasons to not
+update lines in the display to correspond to the underlying
+edit buffer text. The lines of the display that do not correctly correspond
+to text from the edit buffer for this reason shall
+consist of a single \fB'@'\fP character (plus the terminating <newline>),
+and the <control>-R command shall cause
+the editor to update the screen to correctly represent the edit buffer.
+.LP
+Open and visual mode commands that set the current column set it to
+a column position in the display, and not a character
+position in the line. In this case, however, the column position in
+the display shall be calculated for an infinite width display;
+for example, the column related to a character that is part of a line
+that has been folded onto additional screen lines will be
+offset from the display line column where the buffer line begins,
+not from the beginning of a particular display line.
+.LP
+The display cursor column in the display is based on the value of
+the current column, as follows, with each rule applied in
+turn:
+.IP " 1." 4
+If the current column is after the last display line column used by
+the displayed line, the display cursor column shall be set
+to the last display line column occupied by the last non- <newline>
+in the current line; otherwise, the display cursor column
+shall be set to the current column.
+.LP
+.IP " 2." 4
+If the character of which some portion is displayed in the display
+line column specified by the display cursor column requires
+more than a single display line column:
+.RS
+.IP " a." 4
+If in text input mode, the display cursor column shall be adjusted
+to the first display line column in which any portion of that
+character is displayed.
+.LP
+.IP " b." 4
+Otherwise, the display cursor column shall be adjusted to the last
+display line column in which any portion of that character is
+displayed.
+.LP
+.RE
+.LP
+.LP
+The current column shall not be changed by these adjustments to the
+display cursor column.
+.LP
+If an error occurs during the parsing or execution of a \fIvi\fP command:
+.IP " *" 3
+The terminal shall be alerted. Execution of the \fIvi\fP command shall
+stop, and the cursor (for example, the current line and
+column) shall not be further modified.
+.LP
+.IP " *" 3
+Unless otherwise specified by the following command sections, it is
+unspecified whether an informational message shall be
+displayed.
+.LP
+.IP " *" 3
+Any partially entered \fIvi\fP command shall be discarded.
+.LP
+.IP " *" 3
+If the \fIvi\fP command resulted from a \fBmap\fP expansion, all characters
+from that \fBmap\fP expansion shall be discarded,
+except as otherwise specified by the \fBmap\fP command (see \fIed\fP).
+.LP
+.IP " *" 3
+If the \fIvi\fP command resulted from the execution of a buffer, no
+further commands caused by the execution of the buffer
+shall be executed.
+.LP
+.SS Page Backwards
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB<control>-B
+\fP
+.fi
+.RE
+.sp
+.LP
+If in open mode, the <control>-B command shall behave identically
+to the \fBz\fP command. Otherwise, if the current line
+is the first line of the edit buffer, it shall be an error.
+.LP
+If the \fBwindow\fP edit option is less than 3, display a screen where
+the last line of the display shall be some portion
+of:
+.sp
+.RS
+.nf
+
+\fB(\fP\fIcurrent first line\fP\fB) -1
+\fP
+.fi
+.RE
+.LP
+otherwise, display a screen where the first line of the display shall
+be some portion of:
+.sp
+.RS
+.nf
+
+\fB(\fP\fIcurrent first line\fP\fB) -\fP \fIcount\fP \fBx ((window edit option) -2)
+\fP
+.fi
+.RE
+.LP
+If this calculation would result in a line that is before the first
+line of the edit buffer, the first line of the display shall
+display some portion of the first line of the edit buffer.
+.LP
+\fICurrent line\fP: If no lines from the previous display remain on
+the screen, set to the last line of the display; otherwise,
+set to ( \fIline\fP - the number of new lines displayed on this screen).
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Scroll Forward
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB<control>-D
+\fP
+.fi
+.RE
+.sp
+.LP
+If the current line is the last line of the edit buffer, it shall
+be an error.
+.LP
+If no \fIcount\fP is specified, \fIcount\fP shall default to the \fIcount\fP
+associated with the previous <control>-D
+or <control>-U command. If there was no previous <control>-D or <control>-U
+command, \fIcount\fP shall default
+to the value of the \fBscroll\fP edit option.
+.LP
+If in open mode, write lines starting with the line after the current
+line, until \fIcount\fP lines or the last line of the
+file have been written.
+.LP
+\fICurrent line\fP: If the current line + \fIcount\fP is past the
+last line of the edit buffer, set to the last line of the
+edit buffer; otherwise, set to the current line + \fIcount\fP.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Scroll Forward by Line
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB<control>-E
+\fP
+.fi
+.RE
+.sp
+.LP
+Display the line count lines after the last line currently displayed.
+.LP
+If the last line of the edit buffer is displayed, it shall be an error.
+If there is no line \fIcount\fP lines after the last
+line currently displayed, the last line of the display shall display
+some portion of the last line of the edit buffer.
+.LP
+\fICurrent line\fP: Unchanged if the previous current character is
+displayed; otherwise, set to the first line displayed.
+.LP
+\fICurrent column\fP: Unchanged.
+.SS Page Forward
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB<control>-F
+\fP
+.fi
+.RE
+.sp
+.LP
+If in open mode, the <control>-F command shall behave identically
+to the \fBz\fP command. Otherwise, if the current line
+is the last line of the edit buffer, it shall be an error.
+.LP
+If the \fBwindow\fP edit option is less than 3, display a screen where
+the first line of the display shall be some portion
+of:
+.sp
+.RS
+.nf
+
+\fB(\fP\fIcurrent last line\fP\fB) +1
+\fP
+.fi
+.RE
+.LP
+otherwise, display a screen where the first line of the display shall
+be some portion of:
+.sp
+.RS
+.nf
+
+\fB(\fP\fIcurrent first line\fP\fB) +\fP \fIcount\fP \fBx ((window edit option) -2)
+\fP
+.fi
+.RE
+.LP
+If this calculation would result in a line that is after the last
+line of the edit buffer, the last line of the display shall
+display some portion of the last line of the edit buffer.
+.LP
+\fICurrent line\fP: If no lines from the previous display remain on
+the screen, set to the first line of the display;
+otherwise, set to ( \fIline\fP + the number of new lines displayed
+on this screen).
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Display Information
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB<control>-G
+\fP
+.fi
+.RE
+.sp
+.LP
+This command shall be equivalent to the \fIex\fP \fBfile\fP command.
+.SS Move Cursor Backwards
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB<control>-H
+.sp
+
+\fP\fB[\fP\fIcount\fP\fB]\fP \fBh
+.sp
+
+the current\fP \fIerase\fP \fBcharacter (see stty)
+\fP
+.fi
+.RE
+.sp
+.LP
+If there are no characters before the current character on the current
+line, it shall be an error. If there are less than
+\fIcount\fP previous characters on the current line, \fIcount\fP shall
+be adjusted to the number of previous characters on the
+line.
+.LP
+If used as a motion command:
+.IP " 1." 4
+The text region shall be from the character before the starting cursor
+up to and including the \fIcount\fPth character before
+the starting cursor.
+.LP
+.IP " 2." 4
+Any text copied to a buffer shall be in character mode.
+.LP
+.LP
+If not used as a motion command:
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Set to ( \fIcolumn\fP - the number of columns
+occupied by \fIcount\fP characters ending with the
+previous current column).
+.SS Move Down
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB<newline>
+.sp
+
+\fP\fB[\fP\fIcount\fP\fB]\fP \fB<control>-J
+.sp
+
+\fP\fB[\fP\fIcount\fP\fB]\fP \fB<control>-M
+.sp
+
+\fP\fB[\fP\fIcount\fP\fB]\fP \fB<control>-N
+.sp
+
+\fP\fB[\fP\fIcount\fP\fB]\fP \fBj
+.sp
+
+\fP\fB[\fP\fIcount\fP\fB]\fP \fB<carriage-return>
+.sp
+
+\fP\fB[\fP\fIcount\fP\fB]\fP \fB+
+\fP
+.fi
+.RE
+.sp
+.LP
+If there are less than \fIcount\fP lines after the current line in
+the edit buffer, it shall be an error.
+.LP
+If used as a motion command:
+.IP " 1." 4
+The text region shall include the starting line and the next \fIcount\fP
+- 1 lines.
+.LP
+.IP " 2." 4
+Any text copied to a buffer shall be in line mode.
+.LP
+.LP
+If not used as a motion command:
+.LP
+\fICurrent line\fP: Set to \fIcurrent line\fP+ \fIcount\fP.
+.LP
+\fICurrent column\fP: Set to non- <blank> for the <carriage-return>,
+<control>-M, and \fB+\fP commands;
+otherwise, unchanged.
+.SS Clear and Redisplay
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB<control>-L
+\fP
+.fi
+.RE
+.sp
+.LP
+If in open mode, clear the screen and redisplay the current line.
+Otherwise, clear and redisplay the screen.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Unchanged.
+.SS Move Up
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB<control>-P
+.sp
+
+\fP\fB[\fP\fIcount\fP\fB]\fP \fBk
+.sp
+
+\fP\fB[\fP\fIcount\fP\fB]\fP \fB-
+\fP
+.fi
+.RE
+.sp
+.LP
+If there are less than \fIcount\fP lines before the current line in
+the edit buffer, it shall be an error.
+.LP
+If used as a motion command:
+.IP " 1." 4
+The text region shall include the starting line and the previous \fIcount\fP
+lines.
+.LP
+.IP " 2." 4
+Any text copied to a buffer shall be in line mode.
+.LP
+.LP
+If not used as a motion command:
+.LP
+\fICurrent line\fP: Set to \fIcurrent line\fP - \fIcount\fP.
+.LP
+\fICurrent column\fP: Set to non- <blank> for the \fB-\fP command;
+otherwise, unchanged.
+.SS Redraw Screen
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB<control>-R
+\fP
+.fi
+.RE
+.sp
+.LP
+If any lines have been deleted from the display screen and flagged
+as deleted on the terminal using the \fB@\fP convention (see
+the beginning of the EXTENDED DESCRIPTION section), they shall be
+redisplayed to match the contents of the edit buffer.
+.LP
+It is unspecified whether lines flagged with \fB@\fP because they
+do not fit on the terminal display shall be affected.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Unchanged.
+.SS Scroll Backward
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB<control>-U
+\fP
+.fi
+.RE
+.sp
+.LP
+If the current line is the first line of the edit buffer, it shall
+be an error.
+.LP
+If no \fIcount\fP is specified, \fIcount\fP shall default to the \fIcount\fP
+associated with the previous <control>-D
+or <control>-U command. If there was no previous <control>-D or <control>-U
+command, \fIcount\fP shall default
+to the value of the \fBscroll\fP edit option.
+.LP
+\fICurrent line\fP: If \fIcount\fP is greater than the current line,
+set to 1; otherwise, set to the current line -
+\fIcount\fP.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Scroll Backward by Line
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB<control>-Y
+\fP
+.fi
+.RE
+.sp
+.LP
+Display the line \fIcount\fP lines before the first line currently
+displayed.
+.LP
+If the current line is the first line of the edit buffer, it shall
+be an error. If this calculation would result in a line that
+is before the first line of the edit buffer, the first line of the
+display shall display some portion of the first line of the edit
+buffer.
+.LP
+\fICurrent line\fP: Unchanged if the previous current character is
+displayed; otherwise, set to the first line displayed.
+.LP
+\fICurrent column\fP: Unchanged.
+.SS Edit the Alternate File
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB<control>-^
+\fP
+.fi
+.RE
+.sp
+This command shall be equivalent to the \fIex\fP \fBedit\fP command,
+with the alternate
+pathname as its argument.
+.SS Terminate Command or Input Mode
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB<ESC>
+\fP
+.fi
+.RE
+.sp
+.LP
+If a partial \fIvi\fP command (as defined by at least one, non- \fIcount\fP
+character) has been entered, discard the
+\fIcount\fP and the command character(s).
+.LP
+Otherwise, if no command characters have been entered, and the <ESC>
+was the result of a map expansion, the terminal shall
+be alerted and the <ESC> character shall be discarded, but it shall
+not be an error.
+.LP
+Otherwise, it shall be an error.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Unchanged.
+.SS Search for tagstring
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB<control>-]
+\fP
+.fi
+.RE
+.sp
+.LP
+If the current character is not a word or <blank>, it shall be an
+error.
+.LP
+This command shall be equivalent to the \fIex\fP \fBtag\fP command,
+with the argument to
+that command defined as follows.
+.LP
+If the current character is a <blank>:
+.IP " 1." 4
+Skip all <blank>s after the cursor up to the end of the line.
+.LP
+.IP " 2." 4
+If the end of the line is reached, it shall be an error.
+.LP
+.LP
+Then, the argument to the \fIex\fP \fBtag\fP command shall be the
+current character and all
+subsequent characters, up to the first non-word character or the end
+of the line.
+.SS Move Cursor Forward
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB<space>
+.sp
+
+\fP\fB[\fP\fIcount\fP\fB]\fP \fBl\fP (ell)
+.fi
+.RE
+.sp
+.LP
+If there are less than \fIcount\fP non- <newline>s after the cursor
+on the current line, \fIcount\fP shall be adjusted
+to the number of non- <newline>s after the cursor on the line.
+.LP
+If used as a motion command:
+.IP " 1." 4
+If the current or \fIcount\fPth character after the cursor is the
+last non- <newline> in the line, the text region shall
+be comprised of the current character up to and including the last
+non- <newline> in the line. Otherwise, the text region
+shall be from the current character up to, but not including, the
+\fIcount\fPth character after the cursor.
+.LP
+.IP " 2." 4
+Any text copied to a buffer shall be in character mode.
+.LP
+.LP
+If not used as a motion command:
+.LP
+If there are no non- <newline>s after the current character on the
+current line, it shall be an error.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Set to the last column that displays any portion
+of the \fIcount\fPth character after the current
+character.
+.SS Replace Text with Results from Shell Command
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB!\fP \fImotion shell-commands\fP \fB<newline>
+\fP
+.fi
+.RE
+.sp
+.LP
+If the motion command is the \fB!\fP command repeated:
+.IP " 1." 4
+If the edit buffer is empty and no \fIcount\fP was supplied, the command
+shall be the equivalent of the \fIex\fP \fB:read\fP \fB!\fP command,
+with the text input, and no text shall be copied to any
+buffer.
+.LP
+.IP " 2." 4
+Otherwise:
+.RS
+.IP " a." 4
+If there are less than \fIcount\fP -1 lines after the current line
+in the edit buffer, it shall be an error.
+.LP
+.IP " b." 4
+The text region shall be from the current line up to and including
+the next \fIcount\fP -1 lines.
+.LP
+.RE
+.LP
+.LP
+Otherwise, the text region shall be the lines in which any character
+of the text region specified by the motion command
+appear.
+.LP
+Any text copied to a buffer shall be in line mode.
+.LP
+This command shall be equivalent to the \fIex\fP \fB!\fP command for
+the specified
+lines.
+.SS Move Cursor to End-of-Line
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB$
+\fP
+.fi
+.RE
+.sp
+.LP
+It shall be an error if there are less than ( \fIcount\fP -1) lines
+after the current line in the edit buffer.
+.LP
+If used as a motion command:
+.IP " 1." 4
+If \fIcount\fP is 1:
+.RS
+.IP " a." 4
+It shall be an error if the line is empty.
+.LP
+.IP " b." 4
+Otherwise, the text region shall consist of all characters from the
+starting cursor to the last non- <newline> in the
+line, inclusive, and any text copied to a buffer shall be in character
+mode.
+.LP
+.RE
+.LP
+.IP " 2." 4
+Otherwise, if the starting cursor position is at or before the first
+non- <blank> in the line, the text region shall
+consist of the current and the next \fIcount\fP -1 lines, and any
+text saved to a buffer shall be in line mode.
+.LP
+.IP " 3." 4
+Otherwise, the text region shall consist of all characters from the
+starting cursor to the last non- <newline> in the line
+that is \fIcount\fP -1 lines forward from the current line, and any
+text copied to a buffer shall be in character mode.
+.LP
+.LP
+If not used as a motion command:
+.LP
+\fICurrent line\fP: Set to the \fIcurrent line\fP + \fIcount\fP-1.
+.LP
+\fICurrent column\fP: The current column is set to the last display
+line column of the last non- <newline> in the line,
+or column position 1 if the line is empty.
+.LP
+The current column shall be adjusted to be on the last display line
+column of the last non- <newline> of the current line
+as subsequent commands change the current line, until a command changes
+the current column.
+.SS Move to Matching Character
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB%
+\fP
+.fi
+.RE
+.sp
+.LP
+If the character at the current position is not a parenthesis, bracket,
+or curly brace, search forward in the line to the first
+one of those characters. If no such character is found, it shall be
+an error.
+.LP
+The matching character shall be the parenthesis, bracket, or curly
+brace matching the parenthesis, bracket, or curly brace,
+respectively, that was at the current position or that was found on
+the current line.
+.LP
+Matching shall be determined as follows, for an open parenthesis:
+.IP " 1." 4
+Set a counter to 1.
+.LP
+.IP " 2." 4
+Search forwards until a parenthesis is found or the end of the edit
+buffer is reached.
+.LP
+.IP " 3." 4
+If the end of the edit buffer is reached, it shall be an error.
+.LP
+.IP " 4." 4
+If an open parenthesis is found, increment the counter by 1.
+.LP
+.IP " 5." 4
+If a close parenthesis is found, decrement the counter by 1.
+.LP
+.IP " 6." 4
+If the counter is zero, the current character is the matching character.
+.LP
+.LP
+Matching for a close parenthesis shall be equivalent, except that
+the search shall be backwards, from the starting character to
+the beginning of the buffer, a close parenthesis shall increment the
+counter by 1, and an open parenthesis shall decrement the
+counter by 1.
+.LP
+Matching for brackets and curly braces shall be equivalent, except
+that searching shall be done for open and close brackets or
+open and close curly braces. It is implementation-defined whether
+other characters are searched for and matched as well.
+.LP
+If used as a motion command:
+.IP " 1." 4
+If the matching cursor was after the starting cursor in the edit buffer,
+and the starting cursor position was at or before the
+first non- <blank> non- <newline> in the starting line, and the matching
+cursor position was at or after the last non-
+<blank> non- <newline> in the matching line, the text region shall
+consist of the current line to the matching line,
+inclusive, and any text copied to a buffer shall be in line mode.
+.LP
+.IP " 2." 4
+If the matching cursor was before the starting cursor in the edit
+buffer, and the starting cursor position was at or after the
+last non- <blank> non- <newline> in the starting line, and the matching
+cursor position was at or before the first non-
+<blank> non- <newline> in the matching line, the text region shall
+consist of the current line to the matching line,
+inclusive, and any text copied to a buffer shall be in line mode.
+.LP
+.IP " 3." 4
+Otherwise, the text region shall consist of the starting character
+to the matching character, inclusive, and any text copied to
+a buffer shall be in character mode.
+.LP
+.LP
+If not used as a motion command:
+.LP
+\fICurrent line\fP: Set to the line where the matching character is
+located.
+.LP
+\fICurrent column\fP: Set to the last column where any portion of
+the matching character is displayed.
+.SS Repeat Substitution
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB&
+\fP
+.fi
+.RE
+.sp
+.LP
+Repeat the previous substitution command. This command shall be equivalent
+to the \fIex\fP
+\fB&\fP command with the current line as its addresses, and without
+\fIoptions\fP, \fIcount\fP, or \fIflags\fP.
+.SS Return to Previous Context at Beginning of Line
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB'\fP \fIcharacter\fP
+.fi
+.RE
+.sp
+.LP
+It shall be an error if there is no line in the edit buffer marked
+by \fIcharacter\fP.
+.LP
+If used as a motion command:
+.IP " 1." 4
+If the starting cursor is after the marked cursor, then the locations
+of the starting cursor and the marked cursor in the edit
+buffer shall be logically swapped.
+.LP
+.IP " 2." 4
+The text region shall consist of the starting line up to and including
+the marked line, and any text copied to a buffer shall be
+in line mode.
+.LP
+.LP
+If not used as a motion command:
+.LP
+\fICurrent line\fP: Set to the line referenced by the mark.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Return to Previous Context
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB`\fP \fIcharacter\fP
+.fi
+.RE
+.sp
+.LP
+It shall be an error if the marked line is no longer in the edit buffer.
+If the marked line no longer contains a character in
+the saved numbered character position, it shall be as if the marked
+position is the first non- <blank>.
+.LP
+If used as a motion command:
+.IP " 1." 4
+It shall be an error if the marked cursor references the same character
+in the edit buffer as the starting cursor.
+.LP
+.IP " 2." 4
+If the starting cursor is after the marked cursor, then the locations
+of the starting cursor and the marked cursor in the edit
+buffer shall be logically swapped.
+.LP
+.IP " 3." 4
+If the starting line is empty or the starting cursor is at or before
+the first non- <blank> non- <newline> of the
+starting line, and the marked cursor line is empty or the marked cursor
+references the first character of the marked cursor line,
+the text region shall consist of all lines containing characters from
+the starting cursor to the line before the marked cursor
+line, inclusive, and any text copied to a buffer shall be in line
+mode.
+.LP
+.IP " 4." 4
+Otherwise, if the marked cursor line is empty or the marked cursor
+references a character at or before the first non-
+<blank> non- <newline> of the marked cursor line, the region of text
+shall be from the starting cursor to the last non-
+<newline> of the line before the marked cursor line, inclusive, and
+any text copied to a buffer shall be in character
+mode.
+.LP
+.IP " 5." 4
+Otherwise, the region of text shall be from the starting cursor (inclusive),
+to the marked cursor (exclusive), and any text
+copied to a buffer shall be in character mode.
+.LP
+.LP
+If not used as a motion command:
+.LP
+\fICurrent line\fP: Set to the line referenced by the mark.
+.LP
+\fICurrent column\fP: Set to the last column in which any portion
+of the character referenced by the mark is displayed.
+.SS Return to Previous Section
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB[[
+\fP
+.fi
+.RE
+.sp
+.LP
+Move the cursor backward through the edit buffer to the first character
+of the previous section boundary, \fIcount\fP
+times.
+.LP
+If used as a motion command:
+.IP " 1." 4
+If the starting cursor was at the first character of the starting
+line or the starting line was empty, and the first character
+of the boundary was the first character of the boundary line, the
+text region shall consist of the current line up to and including
+the line where the \fIcount\fPth next boundary starts, and any text
+copied to a buffer shall be in line mode.
+.LP
+.IP " 2." 4
+If the boundary was the last line of the edit buffer or the last non-
+<newline> of the last line of the edit buffer, the
+text region shall consist of the last character in the edit buffer
+up to and including the starting character, and any text saved
+to a buffer shall be in character mode.
+.LP
+.IP " 3." 4
+Otherwise, the text region shall consist of the starting character
+up to but not including the first character in the
+\fIcount\fPth next boundary, and any text copied to a buffer shall
+be in character mode.
+.LP
+.LP
+If not used as a motion command:
+.LP
+\fICurrent line\fP: Set to the line where the \fIcount\fPth next boundary
+in the edit buffer starts.
+.LP
+\fICurrent column\fP: Set to the last column in which any portion
+of the first character of the \fIcount\fPth next boundary is
+displayed, or column position 1 if the line is empty.
+.SS Move to Next Section
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB]]
+\fP
+.fi
+.RE
+.sp
+.LP
+Move the cursor forward through the edit buffer to the first character
+of the next section boundary, \fIcount\fP times.
+.LP
+If used as a motion command:
+.IP " 1." 4
+If the starting cursor was at the first character of the starting
+line or the starting line was empty, and the first character
+of the boundary was the first character of the boundary line, the
+text region shall consist of the current line up to and including
+the line where the \fIcount\fPth previous boundary starts, and any
+text copied to a buffer shall be in line mode.
+.LP
+.IP " 2." 4
+If the boundary was the first line of the edit buffer, the text region
+shall consist of the first character in the edit buffer
+up to but not including the starting character, and any text copied
+to a buffer shall be in character mode.
+.LP
+.IP " 3." 4
+Otherwise, the text region shall consist of the first character in
+the \fIcount\fPth previous section boundary up to but not
+including the starting character, and any text copied to a buffer
+shall be in character mode.
+.LP
+.LP
+If not used as a motion command:
+.LP
+\fICurrent line\fP: Set to the line where the \fIcount\fPth previous
+boundary in the edit buffer starts.
+.LP
+\fICurrent column\fP: Set to the last column in which any portion
+of the first character of the \fIcount\fPth previous
+boundary is displayed, or column position 1 if the line is empty.
+.SS Move to First Non-<blank> Position on Current Line
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB^
+\fP
+.fi
+.RE
+.sp
+If used as a motion command:
+.IP " 1." 4
+If the line has no non- <blank> non- <newline>s, or if the cursor
+is at the first non- <blank> non-
+<newline> of the line, it shall be an error.
+.LP
+.IP " 2." 4
+If the cursor is before the first non- <blank> non- <newline> of the
+line, the text region shall be comprised of the
+current character, up to, but not including, the first non- <blank>
+non- <newline> of the line.
+.LP
+.IP " 3." 4
+If the cursor is after the first non- <blank> non- <newline> of the
+line, the text region shall be from the
+character before the starting cursor up to and including the first
+non- <blank> non- <newline> of the line.
+.LP
+.IP " 4." 4
+Any text copied to a buffer shall be in character mode.
+.LP
+.LP
+If not used as a motion command:
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Current and Line Above
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB_
+\fP
+.fi
+.RE
+.sp
+.LP
+If there are less than \fIcount\fP -1 lines after the current line
+in the edit buffer, it shall be an error.
+.LP
+If used as a motion command:
+.IP " 1." 4
+If \fIcount\fP is less than 2, the text region shall be the current
+line.
+.LP
+.IP " 2." 4
+Otherwise, the text region shall include the starting line and the
+next \fIcount\fP -1 lines.
+.LP
+.IP " 3." 4
+Any text copied to a buffer shall be in line mode.
+.LP
+.LP
+If not used as a motion command:
+.LP
+\fICurrent line\fP: Set to current line + \fIcount\fP -1.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Move Back to Beginning of Sentence
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB(
+\fP
+.fi
+.RE
+.sp
+.LP
+Move backward to the beginning of a sentence. This command shall be
+equivalent to the \fB[[\fP command, with the exception that
+sentence boundaries shall be used instead of section boundaries.
+.SS Move Forward to Beginning of Sentence
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB)
+\fP
+.fi
+.RE
+.sp
+.LP
+Move forward to the beginning of a sentence. This command shall be
+equivalent to the \fB]]\fP command, with the exception that
+sentence boundaries shall be used instead of section boundaries.
+.SS Move Back to Preceding Paragraph
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB{
+\fP
+.fi
+.RE
+.sp
+.LP
+Move back to the beginning of the preceding paragraph. This command
+shall be equivalent to the \fB[[\fP command, with the
+exception that paragraph boundaries shall be used instead of section
+boundaries.
+.SS Move Forward to Next Paragraph
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB}
+\fP
+.fi
+.RE
+.sp
+.LP
+Move forward to the beginning of the next paragraph. This command
+shall be equivalent to the \fB]]\fP command, with the
+exception that paragraph boundaries shall be used instead of section
+boundaries.
+.SS Move to Specific Column Position
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB|
+\fP
+.fi
+.RE
+.sp
+.LP
+For the purposes of this command, lines that are too long for the
+current display and that have been folded shall be treated as
+having a single, 1-based, number of columns.
+.LP
+If there are less than \fIcount\fP columns in which characters from
+the current line are displayed on the screen, \fIcount\fP
+shall be adjusted to be the last column in which any portion of the
+line is displayed on the screen.
+.LP
+If used as a motion command:
+.IP " 1." 4
+If the line is empty, or the cursor character is the same as the character
+on the \fIcount\fPth column of the line, it shall be
+an error.
+.LP
+.IP " 2." 4
+If the cursor is before the \fIcount\fPth column of the line, the
+text region shall be comprised of the current character, up
+to but not including the character on the \fIcount\fPth column of
+the line.
+.LP
+.IP " 3." 4
+If the cursor is after the \fIcount\fPth column of the line, the text
+region shall be from the character before the starting
+cursor up to and including the character on the \fIcount\fPth column
+of the line.
+.LP
+.IP " 4." 4
+Any text copied to a buffer shall be in character mode.
+.LP
+.LP
+If not used as a motion command:
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Set to the last column in which any portion
+of the character that is displayed in the \fIcount\fP column
+of the line is displayed.
+.SS Reverse Find Character
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB,
+\fP
+.fi
+.RE
+.sp
+.LP
+If the last \fBF\fP, \fBf\fP, \fBT\fP, or \fBt\fP command was \fBF\fP,
+\fBf\fP, \fBT\fP, or \fBt\fP, this command shall
+be equivalent to an \fBf\fP, \fBF\fP, \fBt\fP, or \fBT\fP command,
+respectively, with the specified \fIcount\fP and the same
+search character.
+.LP
+If there was no previous \fBF\fP, \fBf\fP, \fBT\fP, or \fBt\fP command,
+it shall be an error.
+.SS Repeat
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB.
+\fP
+.fi
+.RE
+.sp
+.LP
+Repeat the last \fB!\fP, \fB<\fP, \fB>\fP, \fBA\fP, \fBC\fP, \fBD\fP,
+\fBI\fP, \fBJ\fP, \fBO\fP, \fBP\fP,
+\fBR\fP, \fBS\fP, \fBX\fP, \fBY\fP, \fBa\fP, \fBc\fP, \fBd\fP, \fBi\fP,
+\fBo\fP, \fBp\fP, \fBr\fP, \fBs\fP, \fBx\fP,
+\fBy\fP, or \fB~\fP command. It shall be an error if none of these
+commands have been executed. Commands (other than
+commands that enter text input mode) executed as a result of map expansions,
+shall not change the value of the last repeatable
+command.
+.LP
+Repeated commands with associated motion commands shall repeat the
+motion command as well; however, any specified \fIcount\fP
+shall replace the \fIcount\fP(s) that were originally specified to
+the repeated command or its associated motion command.
+.LP
+If the motion component of the repeated command is \fBf\fP, \fBF\fP,
+\fBt\fP, or \fBT\fP, the repeated command shall not set
+the remembered search character for the \fB;\fP and \fB,\fP commands.
+.LP
+If the repeated command is \fBp\fP or \fBP\fP, and the buffer associated
+with that command was a numeric buffer named with a
+number less than 9, the buffer associated with the repeated command
+shall be set to be the buffer named by the name of the previous
+buffer logically incremented by 1.
+.LP
+If the repeated character is a text input command, the input text
+associated with that command is repeated literally:
+.IP " *" 3
+Input characters are neither macro or abbreviation-expanded.
+.LP
+.IP " *" 3
+Input characters are not interpreted in any special way with the exception
+that <newline>, <carriage-return>, and
+<control>-T behave as described in Input Mode Commands in vi .
+.LP
+.LP
+\fICurrent line\fP: Set as described for the repeated command.
+.LP
+\fICurrent column\fP: Set as described for the repeated command.
+.SS Find Regular Expression
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB/
+\fP
+.fi
+.RE
+.sp
+.LP
+If the input line contains no non- <newline>s, it shall be equivalent
+to a line containing only the last regular
+expression encountered. The enhanced regular expressions supported
+by \fIvi\fP are described in \fIRegular Expressions in ex\fP .
+.LP
+Otherwise, the line shall be interpreted as one or more regular expressions,
+optionally followed by an address offset or a
+\fIvi\fP \fBz\fP command.
+.LP
+If the regular expression is not the last regular expression on the
+line, or if a line offset or \fBz\fP command is specified,
+the regular expression shall be terminated by an unescaped \fB'/'\fP
+character, which shall not be used as part of the regular
+expression. If the regular expression is not the first regular expression
+on the line, it shall be preceded by zero or more
+<blank>s, a semicolon, zero or more <blank>s, and a leading \fB'/'\fP
+character, which shall not be interpreted as
+part of the regular expression. It shall be an error to precede any
+regular expression with any characters other than these.
+.LP
+Each search shall begin from the character after the first character
+of the last match (or, if it is the first search, after the
+cursor). If the \fBwrapscan\fP edit option is set, the search shall
+continue to the character before the starting cursor
+character; otherwise, to the end of the edit buffer. It shall be an
+error if any search fails to find a match, and an informational
+message to this effect shall be displayed.
+.LP
+An optional address offset (see \fIAddressing in ex\fP ) can be specified
+after the last
+regular expression by including a trailing \fB'/'\fP character after
+the regular expression and specifying the address offset.
+This offset will be from the line containing the match for the last
+regular expression specified. It shall be an error if the line
+offset would indicate a line address less than 1 or greater than the
+last line in the edit buffer. An address offset of zero shall
+be supported. It shall be an error to follow the address offset with
+any other characters than <blank>s.
+.LP
+If not used as a motion command, an optional \fBz\fP command (see
+Redraw Window ) can be
+specified after the last regular expression by including a trailing
+\fB'/'\fP character after the regular expression, zero or
+more <blank>s, a \fB'z'\fP, zero or more <blank>s, an optional new
+\fBwindow\fP edit option value, zero or more
+<blank>s, and a location character. The effect shall be as if the
+\fBz\fP command was executed after the \fB/\fP command.
+It shall be an error to follow the \fBz\fP command with any other
+characters than <blank>s.
+.LP
+The remembered search direction shall be set to forward.
+.LP
+If used as a motion command:
+.IP " 1." 4
+It shall be an error if the last match references the same character
+in the edit buffer as the starting cursor.
+.LP
+.IP " 2." 4
+If any address offset is specified, the last match shall be adjusted
+by the specified offset as described previously.
+.LP
+.IP " 3." 4
+If the starting cursor is after the last match, then the locations
+of the starting cursor and the last match in the edit buffer
+shall be logically swapped.
+.LP
+.IP " 4." 4
+If any address offset is specified, the text region shall consist
+of all lines containing characters from the starting cursor to
+the last match line, inclusive, and any text copied to a buffer shall
+be in line mode.
+.LP
+.IP " 5." 4
+Otherwise, if the starting line is empty or the starting cursor is
+at or before the first non- <blank> non-
+<newline> of the starting line, and the last match line is empty or
+the last match starts at the first character of the last
+match line, the text region shall consist of all lines containing
+characters from the starting cursor to the line before the last
+match line, inclusive, and any text copied to a buffer shall be in
+line mode.
+.LP
+.IP " 6." 4
+Otherwise, if the last match line is empty or the last match begins
+at a character at or before the first non- <blank>
+non- <newline> of the last match line, the region of text shall be
+from the current cursor to the last non- <newline>
+of the line before the last match line, inclusive, and any text copied
+to a buffer shall be in character mode.
+.LP
+.IP " 7." 4
+Otherwise, the region of text shall be from the current cursor (inclusive),
+to the first character of the last match
+(exclusive), and any text copied to a buffer shall be in character
+mode.
+.LP
+.LP
+If not used as a motion command:
+.LP
+\fICurrent line\fP: If a match is found, set to the last matched line
+plus the address offset, if any; otherwise,
+unchanged.
+.LP
+\fICurrent column\fP: Set to the last column on which any portion
+of the first character in the last matched string is
+displayed, if a match is found; otherwise, unchanged.
+.SS Move to First Character in Line
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB0 \fP (zero)
+.fi
+.RE
+.sp
+.LP
+Move to the first character on the current line. The character \fB'0'\fP
+shall not be interpreted as a command if it is
+immediately preceded by a digit.
+.LP
+If used as a motion command:
+.IP " 1." 4
+If the cursor character is the first character in the line, it shall
+be an error.
+.LP
+.IP " 2." 4
+The text region shall be from the character before the cursor character
+up to and including the first character in the line.
+.LP
+.IP " 3." 4
+Any text copied to a buffer shall be in character mode.
+.LP
+.LP
+If not used as a motion command:
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: The last column in which any portion of the
+first character in the line is displayed, or if the line is
+empty, unchanged.
+.SS Execute an ex Command
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB:
+\fP
+.fi
+.RE
+.sp
+.LP
+Execute one or more \fIex\fP commands.
+.LP
+If any portion of the screen other than the last line of the screen
+was overwritten by any \fIex\fP command (except \fBshell\fP), \fIvi\fP
+shall display a message indicating that it is waiting
+for an input from the user, and shall then read a character. This
+action may also be taken for other, unspecified reasons.
+.LP
+If the next character entered is a \fB':'\fP, another \fIex\fP command
+shall be accepted
+and executed. Any other character shall cause the screen to be refreshed
+and \fIvi\fP shall return to command mode.
+.LP
+\fICurrent line\fP: As specified for the \fIex\fP command.
+.LP
+\fICurrent column\fP: As specified for the \fIex\fP command.
+.SS Repeat Find
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB;
+\fP
+.fi
+.RE
+.sp
+.LP
+This command shall be equivalent to the last \fBF\fP, \fBf\fP, \fBT\fP,
+or \fBt\fP command, with the specified \fIcount\fP,
+and with the same search character used for the last \fBF\fP, \fBf\fP,
+\fBT\fP, or \fBt\fP command. If there was no previous
+\fBF\fP, \fBf\fP, \fBT\fP, or \fBt\fP command, it shall be an error.
+.SS Shift Left
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB<\fP \fImotion\fP
+.fi
+.RE
+.sp
+.LP
+If the motion command is the \fB<\fP command repeated:
+.IP " 1." 4
+If there are less than \fIcount\fP -1 lines after the current line
+in the edit buffer, it shall be an error.
+.LP
+.IP " 2." 4
+The text region shall be from the current line, up to and including
+the next \fIcount\fP -1 lines.
+.LP
+.LP
+Shift any line in the text region specified by the \fIcount\fP and
+motion command one shiftwidth (see the \fIex\fP \fBshiftwidth\fP option)
+toward the start of the line, as described by the \fIex\fP \fB<\fP
+command. The unshifted lines shall be copied to the unnamed buffer
+in line
+mode.
+.LP
+\fICurrent line\fP: If the motion was from the current cursor position
+toward the end of the edit buffer, unchanged. Otherwise,
+set to the first line in the edit buffer that is part of the text
+region specified by the motion command.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Shift Right
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB>\fP \fImotion\fP
+.fi
+.RE
+.sp
+.LP
+If the motion command is the \fB>\fP command repeated:
+.IP " 1." 4
+If there are less than \fIcount\fP -1 lines after the current line
+in the edit buffer, it shall be an error.
+.LP
+.IP " 2." 4
+The text region shall be from the current line, up to and including
+the next \fIcount\fP -1 lines.
+.LP
+.LP
+Shift any line with characters in the text region specified by the
+\fIcount\fP and motion command one shiftwidth (see the \fIex\fP \fBshiftwidth\fP
+option) away from the start of the line, as described by the \fIex\fP
+\fB>\fP command. The unshifted lines shall be copied into the unnamed
+buffer in line
+mode.
+.LP
+\fICurrent line\fP: If the motion was from the current cursor position
+toward the end of the edit buffer, unchanged. Otherwise,
+set to the first line in the edit buffer that is part of the text
+region specified by the motion command.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Scan Backwards for Regular Expression
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB?
+\fP
+.fi
+.RE
+.sp
+.LP
+Scan backwards; the \fB?\fP command shall be equivalent to the \fB/\fP
+command (see Find Regular
+Expression ) with the following exceptions:
+.IP " 1." 4
+The input prompt shall be a \fB'?'\fP .
+.LP
+.IP " 2." 4
+Each search shall begin from the character before the first character
+of the last match (or, if it is the first search, the
+character before the cursor character).
+.LP
+.IP " 3." 4
+The search direction shall be from the cursor toward the beginning
+of the edit buffer, and the \fBwrapscan\fP edit option shall
+affect whether the search wraps to the end of the edit buffer and
+continues.
+.LP
+.IP " 4." 4
+The remembered search direction shall be set to backward.
+.LP
+.SS Execute
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB@\fP\fIbuffer\fP
+.fi
+.RE
+.sp
+.LP
+If the \fIbuffer\fP is specified as \fB@\fP, the last buffer executed
+shall be used. If no previous buffer has been executed,
+it shall be an error.
+.LP
+Behave as if the contents of the named buffer were entered as standard
+input. After each line of a line-mode buffer, and all but
+the last line of a character mode buffer, behave as if a <newline>
+were entered as standard input.
+.LP
+If an error occurs during this process, an error message shall be
+written, and no more characters resulting from the execution
+of this command shall be processed.
+.LP
+If a \fIcount\fP is specified, behave as if that count were entered
+as user input before the characters from the \fB@\fP
+buffer were entered.
+.LP
+\fICurrent line\fP: As specified for the individual commands.
+.LP
+\fICurrent column\fP: As specified for the individual commands.
+.SS Reverse Case
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fB~
+\fP
+.fi
+.RE
+.sp
+.LP
+Reverse the case of the current character and the next \fIcount\fP
+-1 characters, such that lowercase characters that have
+uppercase counterparts shall be changed to uppercase characters, and
+uppercase characters that have lowercase counterparts shall be
+changed to lowercase characters, as prescribed by the current locale.
+No other characters shall be affected by this command.
+.LP
+If there are less than \fIcount\fP -1 characters after the cursor
+in the edit buffer, \fIcount\fP shall be adjusted to the
+number of characters after the cursor in the edit buffer minus 1.
+.LP
+For the purposes of this command, the next character after the last
+non- <newline> on the line shall be the next character
+in the edit buffer.
+.LP
+\fICurrent line\fP: Set to the line including the ( \fIcount\fP-1)th
+character after the cursor.
+.LP
+\fICurrent column\fP: Set to the last column in which any portion
+of the ( \fIcount\fP-1)th character after the cursor is
+displayed.
+.SS Append
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fBa
+\fP
+.fi
+.RE
+.sp
+.LP
+Enter text input mode after the current cursor position. No characters
+already in the edit buffer shall be affected by this
+command. A \fIcount\fP shall cause the input text to be appended \fIcount\fP
+-1 more times to the end of the input.
+.LP
+\fICurrent line/column\fP: As specified for the text input commands
+(see Input Mode Commands in
+vi ).
+.SS Append at End-of-Line
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fBA
+\fP
+.fi
+.RE
+.sp
+.LP
+This command shall be equivalent to the \fIvi\fP command:
+.sp
+.RS
+.nf
+
+\fB$\fP \fB[\fP \fIcount\fP \fB]\fP \fBa
+\fP
+.fi
+.RE
+.LP
+(see Append ).
+.SS Move Backward to Preceding Word
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fBb
+\fP
+.fi
+.RE
+.sp
+.LP
+With the exception that words are used as the delimiter instead of
+bigwords, this command shall be equivalent to the \fBB\fP
+command.
+.SS Move Backward to Preceding Bigword
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fBB
+\fP
+.fi
+.RE
+.sp
+.LP
+If the edit buffer is empty or the cursor is on the first character
+of the edit buffer, it shall be an error. If less than
+\fIcount\fP bigwords begin between the cursor and the start of the
+edit buffer, \fIcount\fP shall be adjusted to the number of
+bigword beginnings between the cursor and the start of the edit buffer.
+.LP
+If used as a motion command:
+.IP " 1." 4
+The text region shall be from the first character of the \fIcount\fPth
+previous bigword beginning up to but not including the
+cursor character.
+.LP
+.IP " 2." 4
+Any text copied to a buffer shall be in character mode.
+.LP
+.LP
+If not used as a motion command:
+.LP
+\fICurrent line\fP: Set to the line containing the \fIcurrent column\fP.
+.LP
+\fICurrent column\fP: Set to the last column upon which any part of
+the first character of the \fIcount\fPth previous bigword
+is displayed.
+.SS Change
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIbuffer\fP\fB][\fP\fIcount\fP\fB]\fP \fBc\fP \fImotion\fP
+.fi
+.RE
+.sp
+.LP
+If the motion command is the \fBc\fP command repeated:
+.IP " 1." 4
+The buffer text shall be in line mode.
+.LP
+.IP " 2." 4
+If there are less than \fIcount\fP -1 lines after the current line
+in the edit buffer, it shall be an error.
+.LP
+.IP " 3." 4
+The text region shall be from the current line up to and including
+the next \fIcount\fP -1 lines.
+.LP
+.LP
+Otherwise, the buffer text mode and text region shall be as specified
+by the motion command.
+.LP
+The replaced text shall be copied into \fIbuffer\fP, if specified,
+and into the unnamed buffer. If the text to be replaced
+contains characters from more than a single line, or the buffer text
+is in line mode, the replaced text shall be copied into the
+numeric buffers as well.
+.LP
+If the buffer text is in line mode:
+.IP " 1." 4
+Any lines that contain characters in the region shall be deleted,
+and the editor shall enter text input mode at the beginning of
+a new line which shall replace the first line deleted.
+.LP
+.IP " 2." 4
+If the \fBautoindent\fP edit option is set, \fBautoindent\fP characters
+equal to the \fBautoindent\fP characters on the first
+line deleted shall be inserted as if entered by the user.
+.LP
+.LP
+Otherwise, if characters from more than one line are in the region
+of text:
+.IP " 1." 4
+The text shall be deleted.
+.LP
+.IP " 2." 4
+Any text remaining in the last line in the text region shall be appended
+to the first line in the region, and the last line in
+the region shall be deleted.
+.LP
+.IP " 3." 4
+The editor shall enter text input mode after the last character not
+deleted from the first line in the text region, if any;
+otherwise, on the first column of the first line in the region.
+.LP
+.LP
+Otherwise:
+.IP " 1." 4
+If the glyph for \fB'$'\fP is smaller than the region, the end of
+the region shall be marked with a \fB'$'\fP .
+.LP
+.IP " 2." 4
+The editor shall enter text input mode, overwriting the region of
+text.
+.LP
+.LP
+\fICurrent line/column\fP: As specified for the text input commands
+(see Input Mode Commands in
+vi ).
+.SS Change to End-of-Line
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIbuffer\fP\fB][\fP\fIcount\fP\fB]\fP \fBC
+\fP
+.fi
+.RE
+.sp
+.LP
+This command shall be equivalent to the \fIvi\fP command:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIbuffer\fP\fB][\fP\fIcount\fP\fB]\fP \fBc$
+\fP
+.fi
+.RE
+.LP
+See the \fBc\fP command.
+.SS Delete
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIbuffer\fP\fB][\fP\fIcount\fP\fB]\fP \fBd\fP \fImotion\fP
+.fi
+.RE
+.sp
+.LP
+If the motion command is the \fBd\fP command repeated:
+.IP " 1." 4
+The buffer text shall be in line mode.
+.LP
+.IP " 2." 4
+If there are less than \fIcount\fP -1 lines after the current line
+in the edit buffer, it shall be an error.
+.LP
+.IP " 3." 4
+The text region shall be from the current line up to and including
+the next \fIcount\fP -1 lines.
+.LP
+.LP
+Otherwise, the buffer text mode and text region shall be as specified
+by the motion command.
+.LP
+If in open mode, and the current line is deleted, and the line remains
+on the display, an \fB'@'\fP character shall be
+displayed as the first glyph of that line.
+.LP
+Delete the region of text into \fIbuffer\fP, if specified, and into
+the unnamed buffer. If the text to be deleted contains
+characters from more than a single line, or the buffer text is in
+line mode, the deleted text shall be copied into the numeric
+buffers, as well.
+.LP
+\fICurrent line\fP: Set to the first text region line that appears
+in the edit buffer, unless that line has been deleted, in
+which case it shall be set to the last line in the edit buffer, or
+line 1 if the edit buffer is empty.
+.LP
+\fICurrent column\fP:
+.IP " 1." 4
+If the line is empty, set to column position 1.
+.LP
+.IP " 2." 4
+Otherwise, if the buffer text is in line mode or the motion was from
+the cursor toward the end of the edit buffer:
+.RS
+.IP " a." 4
+If a character from the current line is displayed in the current column,
+set to the last column that displays any portion of
+that character.
+.LP
+.IP " b." 4
+Otherwise, set to the last column in which any portion of any character
+in the line is displayed.
+.LP
+.RE
+.LP
+.IP " 3." 4
+Otherwise, if a character is displayed in the column that began the
+text region, set to the last column that displays any
+portion of that character.
+.LP
+.IP " 4." 4
+Otherwise, set to the last column in which any portion of any character
+in the line is displayed.
+.LP
+.SS Delete to End-of-Line
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIbuffer\fP\fB]\fP \fBD
+\fP
+.fi
+.RE
+.sp
+.LP
+Delete the text from the current position to the end of the current
+line; equivalent to the \fIvi\fP command:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIbuffer\fP\fB]\fP \fBd$
+\fP
+.fi
+.RE
+.SS Move to End-of-Word
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fBe
+\fP
+.fi
+.RE
+.sp
+.LP
+With the exception that words are used instead of bigwords as the
+delimiter, this command shall be equivalent to the \fBE\fP
+command.
+.SS Move to End-of-Bigword
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fBE
+\fP
+.fi
+.RE
+.sp
+.LP
+If the edit buffer is empty it shall be an error. If less than \fIcount\fP
+bigwords end between the cursor and the end of the
+edit buffer, \fIcount\fP shall be adjusted to the number of bigword
+endings between the cursor and the end of the edit buffer.
+.LP
+If used as a motion command:
+.IP " 1." 4
+The text region shall be from the last character of the \fIcount\fPth
+next bigword up to and including the cursor
+character.
+.LP
+.IP " 2." 4
+Any text copied to a buffer shall be in character mode.
+.LP
+.LP
+If not used as a motion command:
+.LP
+\fICurrent line\fP: Set to the line containing the current column.
+.LP
+\fICurrent column\fP: Set to the last column upon which any part of
+the last character of the \fIcount\fPth next bigword is
+displayed.
+.SS Find Character in Current Line (Forward)
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fBf\fP \fIcharacter\fP
+.fi
+.RE
+.sp
+.LP
+It shall be an error if \fIcount\fP occurrences of the character do
+not occur after the cursor in the line.
+.LP
+If used as a motion command:
+.IP " 1." 4
+The text range shall be from the cursor character up to and including
+the \fIcount\fPth occurrence of the specified character
+after the cursor.
+.LP
+.IP " 2." 4
+Any text copied to a buffer shall be in character mode.
+.LP
+.LP
+If not used as a motion command:
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Set to the last column in which any portion
+of the \fIcount\fPth occurrence of the specified character
+after the cursor appears in the line.
+.SS Find Character in Current Line (Reverse)
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fBF\fP \fIcharacter\fP
+.fi
+.RE
+.sp
+.LP
+It shall be an error if \fIcount\fP occurrences of the character do
+not occur before the cursor in the line.
+.LP
+If used as a motion command:
+.IP " 1." 4
+The text region shall be from the \fIcount\fPth occurrence of the
+specified character before the cursor, up to, but not
+including the cursor character.
+.LP
+.IP " 2." 4
+Any text copied to a buffer shall be in character mode.
+.LP
+.LP
+If not used as a motion command:
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Set to the last column in which any portion
+of the \fIcount\fPth occurrence of the specified character
+before the cursor appears in the line.
+.SS Move to Line
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fBG
+\fP
+.fi
+.RE
+.sp
+.LP
+If \fIcount\fP is not specified, it shall default to the last line
+of the edit buffer. If \fIcount\fP is greater than the last
+line of the edit buffer, it shall be an error.
+.LP
+If used as a motion command:
+.IP " 1." 4
+The text region shall be from the cursor line up to and including
+the specified line.
+.LP
+.IP " 2." 4
+Any text copied to a buffer shall be in line mode.
+.LP
+.LP
+If not used as a motion command:
+.LP
+\fICurrent line\fP: Set to \fIcount\fP if \fIcount\fP is specified;
+otherwise, the last line.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Move to Top of Screen
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fBH
+\fP
+.fi
+.RE
+.sp
+.LP
+If the beginning of the line \fIcount\fP greater than the first line
+of which any portion appears on the display does not
+exist, it shall be an error.
+.LP
+If used as a motion command:
+.IP " 1." 4
+If in open mode, the text region shall be the current line.
+.LP
+.IP " 2." 4
+Otherwise, the text region shall be from the starting line up to and
+including (the first line of the display + \fIcount\fP
+-1).
+.LP
+.IP " 3." 4
+Any text copied to a buffer shall be in line mode.
+.LP
+.LP
+If not used as a motion command:
+.LP
+If in open mode, this command shall set the current column to non-
+<blank> and do nothing else.
+.LP
+Otherwise, it shall set the current line and current column as follows.
+.LP
+\fICurrent line\fP: Set to (the first line of the display + \fIcount\fP
+-1).
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Insert Before Cursor
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fBi
+\fP
+.fi
+.RE
+.sp
+.LP
+Enter text input mode before the current cursor position. No characters
+already in the edit buffer shall be affected by this
+command. A \fIcount\fP shall cause the input text to be appended \fIcount\fP
+-1 more times to the end of the input.
+.LP
+\fICurrent line/column\fP: As specified for the text input commands
+(see Input Mode Commands in
+vi ).
+.SS Insert at Beginning of Line
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fBI
+\fP
+.fi
+.RE
+.sp
+.LP
+This command shall be equivalent to the \fIvi\fP command ^[ \fIcount\fP]
+\fBi\fP.
+.SS Join
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fBJ
+\fP
+.fi
+.RE
+.sp
+.LP
+If the current line is the last line in the edit buffer, it shall
+be an error.
+.LP
+This command shall be equivalent to the \fIex\fP \fBjoin\fP command
+with no addresses, and
+an \fIex\fP command \fIcount\fP value of 1 if \fIcount\fP was not
+specified or if a
+\fIcount\fP of 1 was specified, and an \fIex\fP command \fIcount\fP
+value of \fIcount\fP -1
+for any other value of \fIcount\fP, except that the current line and
+column shall be set as follows.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: The last column in which any portion of the
+character following the last character in the initial line is
+displayed, or the last non- <newline> in the line if no characters
+were appended.
+.SS Move to Bottom of Screen
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fBL
+\fP
+.fi
+.RE
+.sp
+.LP
+If the beginning of the line \fIcount\fP less than the last line of
+which any portion appears on the display does not exist, it
+shall be an error.
+.LP
+If used as a motion command:
+.IP " 1." 4
+If in open mode, the text region shall be the current line.
+.LP
+.IP " 2." 4
+Otherwise, the text region shall include all lines from the starting
+cursor line to (the last line of the display -(
+\fIcount\fP -1)).
+.LP
+.IP " 3." 4
+Any text copied to a buffer shall be in line mode.
+.LP
+.LP
+If not used as a motion command:
+.IP " 1." 4
+If in open mode, this command shall set the current column to non-
+<blank> and do nothing else.
+.LP
+.IP " 2." 4
+Otherwise, it shall set the current line and current column as follows.
+.LP
+.LP
+\fICurrent line\fP: Set to (the last line of the display -( \fIcount\fP
+-1)).
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Mark Position
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBm\fP \fIletter\fP
+.fi
+.RE
+.sp
+.LP
+This command shall be equivalent to the \fIex\fP \fBmark\fP command
+with the specified
+character as an argument.
+.SS Move to Middle of Screen
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBM
+\fP
+.fi
+.RE
+.sp
+.LP
+The middle line of the display shall be calculated as follows:
+.sp
+.RS
+.nf
+
+\fB(the top line of the display) + (((number of lines displayed) +1) /2) -1
+\fP
+.fi
+.RE
+.LP
+If used as a motion command:
+.IP " 1." 4
+If in open mode, the text region shall be the current line.
+.LP
+.IP " 2." 4
+Otherwise, the text region shall include all lines from the starting
+cursor line up to and including the middle line of the
+display.
+.LP
+.IP " 3." 4
+Any text copied to a buffer shall be in line mode.
+.LP
+.LP
+If not used as a motion command:
+.LP
+If in open mode, this command shall set the current column to non-
+<blank> and do nothing else.
+.LP
+Otherwise, it shall set the current line and current column as follows.
+.LP
+\fICurrent line\fP: Set to the middle line of the display.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Repeat Regular Expression Find (Forward)
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBn
+\fP
+.fi
+.RE
+.sp
+.LP
+If the remembered search direction was forward, the \fBn\fP command
+shall be equivalent to the \fIvi\fP \fB/\fP command with
+no characters entered by the user. Otherwise, it shall be equivalent
+to the \fIvi\fP \fB?\fP command with no characters entered
+by the user.
+.LP
+If the \fBn\fP command is used as a motion command for the \fB!\fP
+command, the editor shall not enter text input mode on the
+last line on the screen, and shall behave as if the user entered a
+single \fB'!'\fP character as the text input.
+.SS Repeat Regular Expression Find (Reverse)
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBN
+\fP
+.fi
+.RE
+.sp
+.LP
+Scan for the next match of the last pattern given to \fB/\fP or \fB?\fP,
+but in the reverse direction; this is the reverse of
+\fBn\fP.
+.LP
+If the remembered search direction was forward, the \fBN\fP command
+shall be equivalent to the \fIvi\fP \fB?\fP command with
+no characters entered by the user. Otherwise, it shall be equivalent
+to the \fIvi\fP \fB/\fP command with no characters entered
+by the user. If the \fBN\fP command is used as a motion command for
+the \fB!\fP command, the editor shall not enter text input
+mode on the last line on the screen, and shall behave as if the user
+entered a single \fB!\fP character as the text input.
+.SS Insert Empty Line Below
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBo
+\fP
+.fi
+.RE
+.sp
+.LP
+Enter text input mode in a new line appended after the current line.
+A \fIcount\fP shall cause the input text to be appended
+\fIcount\fP -1 more times to the end of the already added text, each
+time starting on a new, appended line.
+.LP
+\fICurrent line/column\fP: As specified for the text input commands
+(see Input Mode Commands in
+vi ).
+.SS Insert Empty Line Above
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBO
+\fP
+.fi
+.RE
+.sp
+.LP
+Enter text input mode in a new line inserted before the current line.
+A \fIcount\fP shall cause the input text to be appended
+\fIcount\fP -1 more times to the end of the already added text, each
+time starting on a new, appended line.
+.LP
+\fICurrent line/column\fP: As specified for the text input commands
+(see Input Mode Commands in
+vi ).
+.SS Put from Buffer Following
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIbuffer\fP\fB]\fP \fBp
+\fP
+.fi
+.RE
+.sp
+.LP
+If no \fIbuffer\fP is specified, the unnamed buffer shall be used.
+.LP
+If the buffer text is in line mode, the text shall be appended below
+the current line, and each line of the buffer shall become
+a new line in the edit buffer. A \fIcount\fP shall cause the buffer
+text to be appended \fIcount\fP -1 more times to the end of
+the already added text, each time starting on a new, appended line.
+.LP
+If the buffer text is in character mode, the text shall be appended
+into the current line after the cursor, and each line of the
+buffer other than the first and last shall become a new line in the
+edit buffer. A \fIcount\fP shall cause the buffer text to be
+appended \fIcount\fP -1 more times to the end of the already added
+text, each time starting after the last added character.
+.LP
+\fICurrent line\fP: If the buffer text is in line mode, set the line
+to line +1; otherwise, unchanged.
+.LP
+\fICurrent column\fP: If the buffer text is in line mode:
+.IP " 1." 4
+If there is a non- <blank> in the first line of the buffer, set to
+the last column on which any portion of the first non-
+<blank> in the line is displayed.
+.LP
+.IP " 2." 4
+If there is no non- <blank> in the first line of the buffer, set to
+the last column on which any portion of the last non-
+<newline> in the first line of the buffer is displayed.
+.LP
+.LP
+If the buffer text is in character mode:
+.IP " 1." 4
+If the text in the buffer is from more than a single line, then set
+to the last column on which any portion of the first
+character from the buffer is displayed.
+.LP
+.IP " 2." 4
+Otherwise, if the buffer is the unnamed buffer, set to the last column
+on which any portion of the last character from the
+buffer is displayed.
+.LP
+.IP " 3." 4
+Otherwise, set to the first column on which any portion of the first
+character from the buffer is displayed.
+.LP
+.SS Put from Buffer Before
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIbuffer\fP\fB]\fP \fBP
+\fP
+.fi
+.RE
+.sp
+.LP
+If no \fIbuffer\fP is specified, the unnamed buffer shall be used.
+.LP
+If the buffer text is in line mode, the text shall be inserted above
+the current line, and each line of the buffer shall become
+a new line in the edit buffer. A \fIcount\fP shall cause the buffer
+text to be appended \fIcount\fP -1 more times to the end of
+the already added text, each time starting on a new, appended line.
+.LP
+If the buffer text is in character mode, the text shall be inserted
+into the current line before the cursor, and each line of
+the buffer other than the first and last shall become a new line in
+the edit buffer. A \fIcount\fP shall cause the buffer text to
+be appended \fIcount\fP -1 more times to the end of the already added
+text, each time starting after the last added character.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: If the buffer text is in line mode:
+.IP " 1." 4
+If there is a non- <blank> in the first line of the buffer, set to
+the last column on which any portion of that character
+is displayed.
+.LP
+.IP " 2." 4
+If there is no non- <blank> in the first line of the buffer, set to
+the last column on which any portion of the last non-
+<newline> in the first line of the buffer is displayed.
+.LP
+.LP
+If the buffer text is in character mode:
+.IP " 1." 4
+If the buffer is the unnamed buffer, set to the last column on which
+any portion of the last character from the buffer is
+displayed.
+.LP
+.IP " 2." 4
+Otherwise, set to the first column on which any portion of the first
+character from the buffer is displayed.
+.LP
+.SS Enter ex Mode
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBQ
+\fP
+.fi
+.RE
+.sp
+.LP
+Leave visual or open mode and enter \fIex\fP command mode.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Unchanged.
+.SS Replace Character
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fBr\fP \fIcharacter\fP
+.fi
+.RE
+.sp
+.LP
+Replace the \fIcount\fP characters at and after the cursor with the
+specified character. If there are less than \fIcount\fP
+non- <newline>s at and after the cursor on the line, it shall be an
+error.
+.LP
+If character is <control>-V, any next character other than the <newline>
+shall be stripped of any special meaning
+and used as a literal character.
+.LP
+If character is <ESC>, no replacement shall be made and the current
+line and current column shall be unchanged.
+.LP
+If character is <carriage-return> or <newline>, \fIcount\fP new lines
+shall be appended to the current line. All
+but the last of these lines shall be empty. \fIcount\fP characters
+at and after the cursor shall be discarded, and any remaining
+characters after the cursor in the current line shall be moved to
+the last of the new lines. If the \fBautoindent\fP edit option
+is set, they shall be preceded by the same number of \fBautoindent\fP
+characters found on the line from which the command was
+executed.
+.LP
+\fICurrent line\fP: Unchanged unless the replacement character is
+a <carriage-return> or <newline>, in which case
+it shall be set to line + \fIcount\fP.
+.LP
+\fICurrent column\fP: Set to the last column position on which a portion
+of the last replaced character is displayed, or if the
+replacement character caused new lines to be created, set to non-
+<blank>.
+.SS Replace Characters
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBR
+\fP
+.fi
+.RE
+.sp
+.LP
+Enter text input mode at the current cursor position possibly replacing
+text on the current line. A \fIcount\fP shall cause the
+input text to be appended \fIcount\fP -1 more times to the end of
+the input.
+.LP
+\fICurrent line/column\fP: As specified for the text input commands
+(see Input Mode Commands in
+vi ).
+.SS Substitute Character
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIbuffer\fP\fB][\fP\fIcount\fP\fB]\fP \fBs
+\fP
+.fi
+.RE
+.sp
+.LP
+This command shall be equivalent to the \fIvi\fP command:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIbuffer\fP\fB][\fP\fIcount\fP\fB]\fP \fBc<space>
+\fP
+.fi
+.RE
+.SS Substitute Lines
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIbuffer\fP\fB][\fP\fIcount\fP\fB]\fP \fBS
+\fP
+.fi
+.RE
+.sp
+.LP
+This command shall be equivalent to the \fIvi\fP command:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIbuffer\fP\fB][\fP\fIcount\fP\fB]\fP \fBc_
+\fP
+.fi
+.RE
+.SS Move Cursor to Before Character (Forward)
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fBt\fP \fIcharacter\fP
+.fi
+.RE
+.sp
+.LP
+It shall be an error if \fIcount\fP occurrences of the character do
+not occur after the cursor in the line.
+.LP
+If used as a motion command:
+.IP " 1." 4
+The text region shall be from the cursor up to but not including the
+\fIcount\fPth occurrence of the specified character after
+the cursor.
+.LP
+.IP " 2." 4
+Any text copied to a buffer shall be in character mode.
+.LP
+.LP
+If not used as a motion command:
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Set to the last column in which any portion
+of the character before the \fIcount\fPth occurrence of the
+specified character after the cursor appears in the line.
+.SS Move Cursor to After Character (Reverse)
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fBT\fP \fIcharacter\fP
+.fi
+.RE
+.sp
+.LP
+It shall be an error if \fIcount\fP occurrences of the character do
+not occur before the cursor in the line.
+.LP
+If used as a motion command:
+.IP " 1." 4
+If the character before the cursor is the specified character, it
+shall be an error.
+.LP
+.IP " 2." 4
+The text region shall be from the character before the cursor up to
+but not including the \fIcount\fPth occurrence of the
+specified character before the cursor.
+.LP
+.IP " 3." 4
+Any text copied to a buffer shall be in character mode.
+.LP
+.LP
+If not used as a motion command:
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Set to the last column in which any portion
+of the character after the \fIcount\fPth occurrence of the
+specified character before the cursor appears in the line.
+.SS Undo
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBu
+\fP
+.fi
+.RE
+.sp
+.LP
+This command shall be equivalent to the \fIex\fP \fBundo\fP command
+except that the current
+line and current column shall be set as follows:
+.LP
+\fICurrent line\fP: Set to the first line added or changed if any;
+otherwise, move to the line preceding any deleted text if
+one exists; otherwise, move to line 1.
+.LP
+\fICurrent column\fP: If undoing an \fIex\fP command, set to the first
+non-
+<blank>.
+.LP
+Otherwise, if undoing a text input command:
+.IP " 1." 4
+If the command was a \fBC\fP, \fBc\fP, \fBO\fP, \fBo\fP, \fBR\fP,
+\fBS\fP, or \fBs\fP command, the current column shall
+be set to the value it held when the text input command was entered.
+.LP
+.IP " 2." 4
+Otherwise, set to the last column in which any portion of the first
+character after the deleted text is displayed, or, if no
+non- <newline>s follow the text deleted from this line, set to the
+last column in which any portion of the last non-
+<newline> in the line is displayed, or 1 if the line is empty.
+.LP
+.LP
+Otherwise, if a single line was modified (that is, not added or deleted)
+by the \fBu\fP command:
+.IP " 1." 4
+If text was added or changed, set to the last column in which any
+portion of the first character added or changed is
+displayed.
+.LP
+.IP " 2." 4
+If text was deleted, set to the last column in which any portion of
+the first character after the deleted text is displayed, or,
+if no non- <newline>s follow the deleted text, set to the last column
+in which any portion of the last non- <newline>
+in the line is displayed, or 1 if the line is empty.
+.LP
+.LP
+Otherwise, set to non- <blank>.
+.SS Undo Current Line
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBU
+\fP
+.fi
+.RE
+.sp
+.LP
+Restore the current line to its state immediately before the most
+recent time that it became the current line.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Set to the first column in the line in which
+any portion of the first character in the line is
+displayed.
+.SS Move to Beginning of Word
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fBw
+\fP
+.fi
+.RE
+.sp
+.LP
+With the exception that words are used as the delimiter instead of
+bigwords, this command shall be equivalent to the \fBW\fP
+command.
+.SS Move to Beginning of Bigword
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fBW
+\fP
+.fi
+.RE
+.sp
+.LP
+If the edit buffer is empty, it shall be an error. If there are less
+than \fIcount\fP bigwords between the cursor and the end
+of the edit buffer, \fIcount\fP shall be adjusted to move the cursor
+to the last bigword in the edit buffer.
+.LP
+If used as a motion command:
+.IP " 1." 4
+If the associated command is \fBc\fP, \fIcount\fP is 1, and the cursor
+is on a <blank>, the region of text shall be the
+current character and no further action shall be taken.
+.LP
+.IP " 2." 4
+If there are less than \fIcount\fP bigwords between the cursor and
+the end of the edit buffer, then the command shall succeed,
+and the region of text shall include the last character of the edit
+buffer.
+.LP
+.IP " 3." 4
+If there are <blank>s or an end-of-line that precede the \fIcount\fPth
+bigword, and the associated command is \fBc\fP,
+the region of text shall be up to and including the last character
+before the preceding <blank>s or end-of-line.
+.LP
+.IP " 4." 4
+If there are <blank>s or an end-of-line that precede the bigword,
+and the associated command is \fBd\fP or \fBy\fP, the
+region of text shall be up to and including the last <blank> before
+the start of the bigword or end-of-line.
+.LP
+.IP " 5." 4
+Any text copied to a buffer shall be in character mode.
+.LP
+.LP
+If not used as a motion command:
+.IP " 1." 4
+If the cursor is on the last character of the edit buffer, it shall
+be an error.
+.LP
+.LP
+\fICurrent line\fP: Set to the line containing the current column.
+.LP
+\fICurrent column\fP: Set to the last column in which any part of
+the first character of the \fIcount\fPth next bigword is
+displayed.
+.SS Delete Character at Cursor
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIbuffer\fP\fB][\fP\fIcount\fP\fB]\fP \fBx
+\fP
+.fi
+.RE
+.sp
+.LP
+Delete the \fIcount\fP characters at and after the current character
+into \fIbuffer\fP, if specified, and into the unnamed
+buffer.
+.LP
+If the line is empty, it shall be an error. If there are less than
+\fIcount\fP non- <newline>s at and after the cursor on
+the current line, \fIcount\fP shall be adjusted to the number of non-
+<newline>s at and after the cursor.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: If the line is empty, set to column position
+1. Otherwise, if there were \fIcount\fP or less non-
+<newline>s at and after the cursor on the current line, set to the
+last column that displays any part of the last non-
+<newline> of the line. Otherwise, unchanged.
+.SS Delete Character Before Cursor
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIbuffer\fP\fB][\fP\fIcount\fP\fB]\fP \fBX
+\fP
+.fi
+.RE
+.sp
+.LP
+Delete the \fIcount\fP characters before the current character into
+\fIbuffer\fP, if specified, and into the unnamed
+buffer.
+.LP
+If there are no characters before the current character on the current
+line, it shall be an error. If there are less than
+\fIcount\fP previous characters on the current line, \fIcount\fP shall
+be adjusted to the number of previous characters on the
+line.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Set to (current column - the width of the deleted
+characters).
+.SS Yank
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIbuffer\fP\fB][\fP\fIcount\fP\fB]\fP \fBy\fP \fImotion\fP
+.fi
+.RE
+.sp
+.LP
+Copy (yank) the region of text into \fIbuffer\fP, if specified, and
+into the unnamed buffer.
+.LP
+If the motion command is the \fBy\fP command repeated:
+.IP " 1." 4
+The buffer shall be in line mode.
+.LP
+.IP " 2." 4
+If there are less than \fIcount\fP -1 lines after the current line
+in the edit buffer, it shall be an error.
+.LP
+.IP " 3." 4
+The text region shall be from the current line up to and including
+the next \fIcount\fP -1 lines.
+.LP
+.LP
+Otherwise, the buffer text mode and text region shall be as specified
+by the motion command.
+.LP
+\fICurrent line\fP: If the motion was from the current cursor position
+toward the end of the edit buffer, unchanged. Otherwise,
+set to the first line in the edit buffer that is part of the text
+region specified by the motion command.
+.LP
+\fICurrent column\fP:
+.IP " 1." 4
+If the motion was from the current cursor position toward the end
+of the edit buffer, unchanged.
+.LP
+.IP " 2." 4
+Otherwise, if the current line is empty, set to column position 1.
+.LP
+.IP " 3." 4
+Otherwise, set to the last column that displays any part of the first
+character in the file that is part of the text region
+specified by the motion command.
+.LP
+.SS Yank Current Line
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIbuffer\fP\fB][\fP\fIcount\fP\fB]\fP \fBY
+\fP
+.fi
+.RE
+.sp
+.LP
+This command shall be equivalent to the \fIvi\fP command:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIbuffer\fP\fB][\fP\fIcount\fP\fB]\fP \fBy_
+\fP
+.fi
+.RE
+.SS Redraw Window
+.LP
+If in open mode, the \fBz\fP command shall have the Synopsis:
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIcount\fP\fB]\fP \fBz
+\fP
+.fi
+.RE
+.sp
+.LP
+If \fIcount\fP is not specified, it shall default to the \fBwindow\fP
+edit option -1. The \fBz\fP command shall be equivalent
+to the \fIex\fP \fBz\fP command, with a type character of \fB=\fP
+and a \fIcount\fP of
+\fIcount\fP -2, except that the current line and current column shall
+be set as follows, and the \fBwindow\fP edit option shall
+not be affected. If the calculation for the \fIcount\fP argument would
+result in a negative number, the \fIcount\fP argument to
+the \fIex\fP \fBz\fP command shall be zero. A blank line shall be
+written after the last line
+is written.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Unchanged.
+.LP
+If not in open mode, the \fBz\fP command shall have the following
+Synopsis:
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIline\fP\fB]\fP \fBz\fP \fB[\fP\fIcount\fP\fB]\fP \fIcharacter\fP
+.fi
+.RE
+.sp
+.LP
+If \fIline\fP is not specified, it shall default to the current line.
+If \fIline\fP is specified, but is greater than the
+number of lines in the edit buffer, it shall default to the number
+of lines in the edit buffer.
+.LP
+If \fIcount\fP is specified, the value of the \fBwindow\fP edit option
+shall be set to \fIcount\fP (as described in the \fIex\fP \fBwindow\fP
+command), and the screen shall be redrawn.
+.LP
+\fIline\fP shall be placed as specified by the following characters:
+.TP 7
+<newline>,\ <carriage-return>
+.sp
+Place the beginning of the line on the first line of the display.
+.TP 7
+\fB\&.\fP
+Place the beginning of the line in the center of the display. The
+middle line of the display shall be calculated as described
+for the \fBM\fP command.
+.TP 7
+\fB-\fP
+Place an unspecified portion of the line on the last line of the display.
+.TP 7
+\fB+\fP
+If \fIline\fP was specified, equivalent to the <newline> case. If
+\fIline\fP was not specified, display a screen where
+the first line of the display shall be (current last line) +1. If
+there are no lines after the last line in the display, it shall
+be an error.
+.TP 7
+\fB^\fP
+If \fIline\fP was specified, display a screen where the last line
+of the display shall contain an unspecified portion of the
+first line of a display that had an unspecified portion of the specified
+line on the last line of the display. If this calculation
+results in a line before the beginning of the edit buffer, display
+the first screen of the edit buffer.
+.LP
+Otherwise, display a screen where the last line of the display shall
+contain an unspecified portion of (current first line -1).
+If this calculation results in a line before the beginning of the
+edit buffer, it shall be an error.
+.sp
+.LP
+\fICurrent line\fP: If \fIline\fP and the \fB'^'\fP character were
+specified:
+.IP " 1." 4
+If the first screen was displayed as a result of the command attempting
+to display lines before the beginning of the edit
+buffer: if the first screen was already displayed, unchanged; otherwise,
+set to (current first line -1).
+.LP
+.IP " 2." 4
+Otherwise, set to the last line of the display.
+.LP
+.LP
+If \fIline\fP and the \fB'+'\fP character were specified, set to the
+first line of the display.
+.LP
+Otherwise, if \fIline\fP was specified, set to \fIline\fP.
+.LP
+Otherwise, unchanged.
+.LP
+\fICurrent column\fP: Set to non- <blank>.
+.SS Exit
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBZZ
+\fP
+.fi
+.RE
+.sp
+.LP
+This command shall be equivalent to the \fIex\fP \fBxit\fP command
+with no addresses,
+trailing \fB!\fP, or filename (see the \fIex\fP \fBxit\fP command).
+.SS Input Mode Commands in vi
+.LP
+In text input mode, the current line shall consist of zero or more
+of the following categories, plus the terminating
+<newline>:
+.IP " 1." 4
+Characters preceding the text input entry point
+.LP
+Characters in this category shall not be modified during text input
+mode.
+.LP
+.IP " 2." 4
+\fBautoindent\fP characters
+.LP
+\fBautoindent\fP characters shall be automatically inserted into each
+line that is created in text input mode, either as a
+result of entering a <newline> or <carriage-return> while in text
+input mode, or as an effect of the command itself;
+for example, \fBO\fP or \fBo\fP (see the \fIex\fP \fBautoindent\fP
+command), as if entered
+by the user.
+.LP
+It shall be possible to erase \fBautoindent\fP characters with the
+<control>-D command; it is unspecified whether they
+can be erased by <control>-H, <control>-U, and <control>-W characters.
+Erasing any \fBautoindent\fP character
+turns the glyph into erase-columns and deletes the character from
+the edit buffer, but does not change its representation on the
+screen.
+.LP
+.IP " 3." 4
+Text input characters
+.LP
+Text input characters are the characters entered by the user. Erasing
+any text input character turns the glyph into
+erase-columns and deletes the character from the edit buffer, but
+does not change its representation on the screen.
+.LP
+Each text input character entered by the user (that does not have
+a special meaning) shall be treated as follows:
+.RS
+.IP " a." 4
+The text input character shall be appended to the last character in
+the edit buffer from the first, second, or third
+categories.
+.LP
+.IP " b." 4
+If there are no erase-columns on the screen, the text input command
+was the \fBR\fP command, and characters in the fifth
+category from the original line follow the cursor, the next such character
+shall be deleted from the edit buffer. If the
+\fBslowopen\fP edit option is not set, the corresponding glyph on
+the screen shall become erase-columns.
+.LP
+.IP " c." 4
+If there are erase-columns on the screen, as many columns as they
+occupy, or as are necessary, shall be overwritten to display
+the text input character. (If only part of a multi-column glyph is
+overwritten, the remainder shall be left on the screen, and
+continue to be treated as erase-columns; it is unspecified whether
+the remainder of the glyph is modified in any way.)
+.LP
+.IP " d." 4
+If additional display line columns are needed to display the text
+input character:
+.RS
+.IP " 1." 4
+If the \fBslowopen\fP edit option is set, the text input characters
+shall be displayed on subsequent display line columns,
+overwriting any characters displayed in those columns.
+.LP
+.IP " 2." 4
+Otherwise, any characters currently displayed on or after the column
+on the display line where the text input character is to be
+displayed shall be pushed ahead the number of display line columns
+necessary to display the rest of the text input character.
+.LP
+.RE
+.LP
+.RE
+.LP
+.IP " 4." 4
+Erase-columns
+.LP
+Erase-columns are not logically part of the edit buffer, appearing
+only on the screen, and may be overwritten on the screen by
+subsequent text input characters. When text input mode ends, all erase-columns
+shall no longer appear on the screen.
+.LP
+Erase-columns are initially the region of text specified by the \fBc\fP
+command (see Change );
+however, erasing \fBautoindent\fP or text input characters causes
+the glyphs of the erased characters to be treated as
+erase-columns.
+.LP
+.IP " 5." 4
+Characters following the text region for the \fBc\fP command, or the
+text input entry point for all other commands
+.LP
+Characters in this category shall not be modified during text input
+mode, except as specified in category 3.b. for the \fBR\fP
+text input command, or as <blank>s deleted when a <newline> or <carriage-return>
+is entered.
+.LP
+.LP
+It is unspecified whether it is an error to attempt to erase past
+the beginning of a line that was created by the entry of a
+<newline> or <carriage-return> during text input mode. If it is not
+an error, the editor shall behave as if the erasing
+character was entered immediately after the last text input character
+entered on the previous line, and all of the non-
+<newline>s on the current line shall be treated as erase-columns.
+.LP
+When text input mode is entered, or after a text input mode character
+is entered (except as specified for the special characters
+below), the cursor shall be positioned as follows:
+.IP " 1." 4
+On the first column that displays any part of the first erase-column,
+if one exists
+.LP
+.IP " 2." 4
+Otherwise, if the \fBslowopen\fP edit option is set, on the first
+display line column after the last character in the first,
+second, or third categories, if one exists
+.LP
+.IP " 3." 4
+Otherwise, the first column that displays any part of the first character
+in the fifth category, if one exists
+.LP
+.IP " 4." 4
+Otherwise, the display line column after the last character in the
+first, second, or third categories, if one exists
+.LP
+.IP " 5." 4
+Otherwise, on column position 1
+.LP
+.LP
+The characters that are updated on the screen during text input mode
+are unspecified, other than that the last text input
+character shall always be updated, and, if the \fBslowopen\fP edit
+option is not set, the current cursor character shall always be
+updated.
+.LP
+The following specifications are for command characters entered during
+text input mode.
+.SS NUL
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fBNUL
+\fP
+.fi
+.RE
+.sp
+.LP
+If the first character of the text input is a NUL, the most recently
+input text shall be input as if entered by the user, and
+then text input mode shall be exited. The text shall be input literally;
+that is, characters are neither macro or abbreviation
+expanded, nor are any characters interpreted in any special manner.
+It is unspecified whether implementations shall support more
+than 256 bytes of remembered input text.
+.SS <control>-D
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB<control>-D
+\fP
+.fi
+.RE
+.sp
+.LP
+The <control>-D character shall have no special meaning when in text
+input mode for a line-oriented command (see Command Descriptions in
+vi ).
+.LP
+This command need not be supported on block-mode terminals.
+.LP
+If the cursor does not follow an \fBautoindent\fP character, or an
+\fBautoindent\fP character and a \fB'0'\fP or
+\fB'^'\fP character:
+.IP " 1." 4
+If the cursor is in column position 1, the <control>-D character shall
+be discarded and no further action taken.
+.LP
+.IP " 2." 4
+Otherwise, the <control>-D character shall have no special meaning.
+.LP
+.LP
+If the last input character was a \fB'0'\fP, the cursor shall be
+moved to column position 1.
+.LP
+Otherwise, if the last input character was a \fB'^'\fP, the cursor
+shall be moved to column position 1. 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, the cursor shall be moved back to the column after the
+previous shiftwidth (see the \fIex\fP \fBshiftwidth\fP command) boundary.
+.LP
+All of the glyphs on columns between the starting cursor position
+and (inclusively) the ending cursor position shall become
+erase-columns as described in Input Mode Commands in vi .
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Set to 1 if the <control>-D was preceded by
+a \fB'^'\fP or \fB'0'\fP ; otherwise, set to
+(column -1) -((column -2) % \fBshiftwidth\fP).
+.SS <control>-H
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB<control>-H
+\fP
+.fi
+.RE
+.sp
+.LP
+If in text input mode for a line-oriented command, and there are no
+characters to erase, text input mode shall be terminated, no
+further action shall be done for this command, and the current line
+and column shall be unchanged.
+.LP
+If there are characters other than \fBautoindent\fP characters that
+have been input on the current line before the cursor, the
+cursor shall move back one character.
+.LP
+Otherwise, if there are \fBautoindent\fP characters on the current
+line before the cursor, it is implementation-defined whether
+the <control>-H command is an error or if the cursor moves back one
+\fBautoindent\fP character.
+.LP
+Otherwise, if the cursor is in column position 1 and there are previous
+lines that have been input, it is implementation-defined
+whether the <control>-H command is an error or if it is equivalent
+to entering <control>-H after the last input
+character on the previous input line.
+.LP
+Otherwise, it shall be an error.
+.LP
+All of the glyphs on columns between the starting cursor position
+and (inclusively) the ending cursor position shall become
+erase-columns as described in Input Mode Commands in vi .
+.LP
+The current erase character (see \fIstty\fP) shall cause an equivalent
+action to the
+<control>-H command, unless the previously inserted character was
+a backslash, in which case it shall be as if the literal
+current erase character had been inserted instead of the backslash.
+.LP
+\fICurrent line\fP: Unchanged, unless previously input lines are erased,
+in which case it shall be set to line -1.
+.LP
+\fICurrent column\fP: Set to the first column that displays any portion
+of the character backed up over.
+.SS <newline>
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB<newline>
+.sp
+
+<carriage-return>
+.sp
+
+<control>-J
+.sp
+
+<control>-M
+\fP
+.fi
+.RE
+.sp
+.LP
+If input was part of a line-oriented command, text input mode shall
+be terminated and the command shall continue execution with
+the input provided.
+.LP
+Otherwise, 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. Otherwise, it is unspecified
+whether the \fBautoindent\fP characters in the line are
+modified by entering these characters.
+.LP
+Continue text input mode on a new line appended after the current
+line. If the \fBslowopen\fP edit option is set, the lines on
+the screen below the current line shall not be pushed down, but the
+first of them shall be cleared and shall appear to be
+overwritten. Otherwise, the lines of the screen below the current
+line shall be pushed down.
+.LP
+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.
+.LP
+All columns after the cursor that are erase-columns (as described
+in Input Mode Commands in vi )
+shall be discarded.
+.LP
+If the \fBautoindent\fP edit option is set, all <blank>s immediately
+following the cursor shall be discarded.
+.LP
+All remaining characters after the cursor shall be transferred to
+the new line, positioned after any \fBautoindent\fP
+characters.
+.LP
+\fICurrent line\fP: Set to current line +1.
+.LP
+\fICurrent column\fP: Set to the first column that displays any portion
+of the first character after the \fBautoindent\fP
+characters on the new line, if any, or the first column position after
+the last \fBautoindent\fP character, if any, or column
+position 1.
+.SS <control>-T
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB<control>-T
+\fP
+.fi
+.RE
+.sp
+.LP
+The <control>-T character shall have no special meaning when in text
+input mode for a line-oriented command (see Command Descriptions in
+vi ).
+.LP
+This command need not be supported on block-mode terminals.
+.LP
+Behave as if the user entered the minimum number of <blank>s necessary
+to move the cursor forward to the column position
+after the next \fBshiftwidth\fP (see the \fIex\fP \fBshiftwidth\fP
+command) boundary.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Set to \fIcolumn\fP + \fBshiftwidth\fP - ((column
+-1) % \fBshiftwidth\fP).
+.SS <control>-U
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB<control>-U
+\fP
+.fi
+.RE
+.sp
+.LP
+If there are characters other than \fBautoindent\fP characters that
+have been input on the current line before the cursor, the
+cursor shall move to the first character input after the \fBautoindent\fP
+characters.
+.LP
+Otherwise, if there are \fBautoindent\fP characters on the current
+line before the cursor, it is implementation-defined whether
+the <control>-U command is an error or if the cursor moves to the
+first column position on the line.
+.LP
+Otherwise, if the cursor is in column position 1 and there are previous
+lines that have been input, it is implementation-defined
+whether the <control>-U command is an error or if it is equivalent
+to entering <control>-U after the last input
+character on the previous input line.
+.LP
+Otherwise, it shall be an error.
+.LP
+All of the glyphs on columns between the starting cursor position
+and (inclusively) the ending cursor position shall become
+erase-columns as described in Input Mode Commands in vi .
+.LP
+The current \fIkill\fP character (see \fIstty\fP) shall cause an equivalent
+action to the
+<control>-U command, unless the previously inserted character was
+a backslash, in which case it shall be as if the literal
+current \fIkill\fP character had been inserted instead of the backslash.
+.LP
+\fICurrent line\fP: Unchanged, unless previously input lines are erased,
+in which case it shall be set to line -1.
+.LP
+\fICurrent column\fP: Set to the first column that displays any portion
+of the last character backed up over.
+.SS <control>-V
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB<control>-V
+.sp
+
+<control>-Q
+\fP
+.fi
+.RE
+.sp
+.LP
+Allow the entry of any subsequent character, other than <control>-J
+or the <newline>, as a literal character,
+removing any special meaning that it may have to the editor in text
+input mode. If a <control>-V or <control>-Q is
+entered before a <control>-J or <newline>, the <control>-V or <control>-Q
+character shall be discarded, and
+the <control>-J or <newline> shall behave as described in the <newline>
+command character during input mode.
+.LP
+For purposes of the display only, the editor shall behave as if a
+\fB'^'\fP character was entered, and the cursor shall be
+positioned as if overwriting the \fB'^'\fP character. When a subsequent
+character is entered, the editor shall behave as if that
+character was entered instead of the original <control>-V or <control>-Q
+character.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP: Unchanged.
+.SS <control>-W
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB<control>-W
+\fP
+.fi
+.RE
+.sp
+.LP
+If there are characters other than \fBautoindent\fP characters that
+have been input on the current line before the cursor, the
+cursor shall move back over the last word preceding the cursor (including
+any <blank>s between the end of the last word and
+the current cursor); the cursor shall not move to before the first
+character after the end of any \fBautoindent\fP characters.
+.LP
+Otherwise, if there are \fBautoindent\fP characters on the current
+line before the cursor, it is implementation-defined whether
+the <control>-W command is an error or if the cursor moves to the
+first column position on the line.
+.LP
+Otherwise, if the cursor is in column position 1 and there are previous
+lines that have been input, it is implementation-defined
+whether the <control>-W command is an error or if it is equivalent
+to entering <control>-W after the last input
+character on the previous input line.
+.LP
+Otherwise, it shall be an error.
+.LP
+All of the glyphs on columns between the starting cursor position
+and (inclusively) the ending cursor position shall become
+erase-columns as described in Input Mode Commands in vi .
+.LP
+\fICurrent line\fP: Unchanged, unless previously input lines are erased,
+in which case it shall be set to line -1.
+.LP
+\fICurrent column\fP: Set to the first column that displays any portion
+of the last character backed up over.
+.SS <ESC>
+.TP 7
+\fISynopsis\fP:
+.sp
+.RS
+.nf
+
+\fB<ESC>
+\fP
+.fi
+.RE
+.sp
+.LP
+If input was part of a line-oriented command:
+.IP " 1." 4
+If \fIinterrupt\fP was entered, text input mode shall be terminated
+and the editor shall return to command mode. The terminal
+shall be alerted.
+.LP
+.IP " 2." 4
+If <ESC> was entered, text input mode shall be terminated and the
+command shall continue execution with the input
+provided.
+.LP
+.LP
+Otherwise, terminate text input mode and return to command mode.
+.LP
+Any \fBautoindent\fP characters entered on newly created lines that
+have no other non- <newline>s shall be deleted.
+.LP
+Any leading \fBautoindent\fP and <blank>s on newly created lines shall
+be rewritten to be the minimum number of
+<blank>s possible.
+.LP
+The screen shall be redisplayed as necessary to match the contents
+of the edit buffer.
+.LP
+\fICurrent line\fP: Unchanged.
+.LP
+\fICurrent column\fP:
+.IP " 1." 4
+If there are text input characters on the current line, the column
+shall be set to the last column where any portion of the last
+text input character is displayed.
+.LP
+.IP " 2." 4
+Otherwise, if a character is displayed in the current column, unchanged.
+.LP
+.IP " 3." 4
+Otherwise, set to column position 1.
+.LP
+.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, \fIvi\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
+Descriptions in vi .
+.LP
+\fIThe following sections are informative.\fP
+.SH APPLICATION USAGE
+.LP
+None.
+.SH EXAMPLES
+.LP
+None.
+.SH RATIONALE
+.LP
+See the RATIONALE for \fIex\fP for more information on \fIvi\fP. Major
+portions of the \fIvi\fP utility
+specification point to \fIex\fP to avoid inadvertent divergence. While
+\fIex\fP and \fIvi\fP have historically been implemented as a single
+utility, this is not required by
+IEEE\ Std\ 1003.1-2001.
+.LP
+It is recognized that portions of \fIvi\fP 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 a \fIvi\fP
+implementation should provide the full set of capabilities on
+all terminals capable of supporting them.
+.LP
+Historically, \fIvi\fP exited immediately if the standard input was
+not a terminal. IEEE\ Std\ 1003.1-2001 permits, but
+does not require, this behavior. An end-of-file condition is not equivalent
+to an end-of-file character. A common end-of-file
+character, <control>-D, is historically a \fIvi\fP command.
+.LP
+The text in the STDOUT section reflects the usage of the verb \fIdisplay\fP
+in this section; some implementations of \fIvi\fP
+use standard output to write to the terminal, but IEEE\ Std\ 1003.1-2001
+does not require that to be the case.
+.LP
+Historically, implementations reverted to open mode if the terminal
+was incapable of supporting full visual mode.
+IEEE\ Std\ 1003.1-2001 requires this behavior. Historically, the open
+mode of \fIvi\fP behaved roughly equivalently to the
+visual mode, with the exception that only a single line from the edit
+buffer (one "buffer line") was kept current at any time.
+This line was normally displayed on the next-to-last line of a terminal
+with cursor addressing (and the last line performed its
+normal visual functions for line-oriented commands and messages).
+In addition, some few commands behaved differently in open mode
+than in visual mode. IEEE\ Std\ 1003.1-2001 requires conformance to
+historical practice.
+.LP
+Historically, \fIex\fP and \fIvi\fP implementations have expected
+text to proceed in the
+usual European/Latin order of left to right, top to bottom. There
+is no requirement in IEEE\ Std\ 1003.1-2001 that this be
+the case. The specification was deliberately written using words like
+"before", "after", "first", and "last" in order to
+permit implementations to support the natural text order of the language.
+.LP
+Historically, lines past the end of the edit buffer were marked with
+single tilde ( \fB'~'\fP ) characters; that is, if
+the one-based display was 20 lines in length, and the last line of
+the file was on line one, then lines 2-20 would contain only a
+single \fB'~'\fP character.
+.LP
+Historically, the \fIvi\fP editor attempted to display only complete
+lines at the bottom of the screen (it did display partial
+lines at the top of the screen). If a line was too long to fit in
+its entirety at the bottom of the screen, the screen lines where
+the line would have been displayed were displayed as single \fB'@'\fP
+characters, instead of displaying part of the line.
+IEEE\ Std\ 1003.1-2001 permits, but does not require, this behavior.
+Implementations are encouraged to attempt always to
+display a complete line at the bottom of the screen when doing scrolling
+or screen positioning by buffer lines.
+.LP
+Historically, lines marked with \fB'@'\fP were also used to minimize
+output to dumb terminals over slow lines; that is,
+changes local to the cursor were updated, but changes to lines on
+the screen that were not close to the cursor were simply marked
+with an \fB'@'\fP sign instead of being updated to match the current
+text. IEEE\ Std\ 1003.1-2001 permits, but does not
+require this feature because it is used ever less frequently as terminals
+become smarter and connections are faster.
+.SS Initialization in ex and vi
+.LP
+Historically, \fIvi\fP always had a line in the edit buffer, even
+if the edit buffer was "empty". For example:
+.IP " 1." 4
+The \fIex\fP command \fB=\fP executed from visual mode wrote "1" when
+the buffer was
+empty.
+.LP
+.IP " 2." 4
+Writes from visual mode of an empty edit buffer wrote files of a single
+character (a <newline>), while writes from \fIex\fP mode of an empty
+edit buffer wrote empty files.
+.LP
+.IP " 3." 4
+Put and read commands into an empty edit buffer left an empty line
+at the top of the edit buffer.
+.LP
+.LP
+For consistency, IEEE\ Std\ 1003.1-2001 does not permit any of these
+behaviors.
+.LP
+Historically, \fIvi\fP did not always return the terminal to its original
+modes; for example, ICRNL was modified if it was not
+originally set. IEEE\ Std\ 1003.1-2001 does not permit this behavior.
+.SS Command Descriptions in vi
+.LP
+Motion commands are among the most complicated aspects of \fIvi\fP
+to describe. With some exceptions, the text region and
+buffer type effect of a motion command on a \fIvi\fP command are described
+on a case-by-case basis. The descriptions of text
+regions in IEEE\ Std\ 1003.1-2001 are not intended to imply direction;
+that is, an inclusive region from line \fIn\fP to
+line \fIn\fP+5 is identical to a region from line \fIn\fP+5 to line
+\fIn\fP. This is of more than academic interest-movements to
+marks can be in either direction, and, if the \fBwrapscan\fP option
+is set, so can movements to search points. Historically, lines
+are always stored into buffers in text order; that is, from the start
+of the edit buffer to the end. IEEE\ Std\ 1003.1-2001
+requires conformance to historical practice.
+.LP
+Historically, command counts were applied to any associated motion,
+and were multiplicative to any supplied motion count. For
+example, \fB2cw\fP is the same as \fBc2w\fP, and \fB2c3w\fP is the
+same as \fBc6w\fP. IEEE\ Std\ 1003.1-2001 requires
+this behavior. Historically, \fIvi\fP commands that used bigwords,
+words, paragraphs, and sentences as objects treated groups of
+empty lines, or lines that contained only <blank>s, inconsistently.
+Some commands treated them as a single entity, while
+others treated each line separately. For example, the \fBw\fP, \fBW\fP,
+and \fBB\fP commands treated groups of empty lines as
+individual words; that is, the command would move the cursor to each
+new empty line. The \fBe\fP and \fBE\fP commands treated
+groups of empty lines as a single word; that is, the first use would
+move past the group of lines. The \fBb\fP command would just
+beep at the user, or if done from the start of the line as a motion
+command, fail in unexpected ways. If the lines contained only
+(or ended with) <blank>s, the \fBw\fP and \fBW\fP commands would just
+beep at the user, the \fBE\fP and \fBe\fP commands
+would treat the group as a single word, and the \fBB\fP and \fBb\fP
+commands would treat the lines as individual words. For
+consistency and simplicity of specification, IEEE\ Std\ 1003.1-2001
+requires that all \fIvi\fP commands treat groups of
+empty or blank lines as a single entity, and that movement through
+lines ending with <blank>s be consistent with other
+movements.
+.LP
+Historically, \fIvi\fP documentation indicated that any number of
+double quotes were skipped after punctuation marks at
+sentence boundaries; however, implementations only skipped single
+quotes. IEEE\ Std\ 1003.1-2001 requires both to be
+skipped.
+.LP
+Historically, the first and last characters in the edit buffer were
+word boundaries. This historical practice is required by
+IEEE\ Std\ 1003.1-2001.
+.LP
+Historically, \fIvi\fP attempted to update the minimum number of columns
+on the screen possible, which could lead to misleading
+information being displayed. IEEE\ Std\ 1003.1-2001 makes no requirements
+other than that the current character being
+entered is displayed correctly, leaving all other decisions in this
+area up to the implementation.
+.LP
+Historically, lines were arbitrarily folded between columns of any
+characters that required multiple column positions on the
+screen, with the exception of tabs, which terminated at the right-hand
+margin. IEEE\ Std\ 1003.1-2001 permits the former
+and requires the latter. Implementations that do not arbitrarily break
+lines between columns of characters that occupy multiple
+column positions should not permit the cursor to rest on a column
+that does not contain any part of a character.
+.LP
+The historical \fIvi\fP had a problem in that all movements were by
+buffer lines, not by display or screen lines. This is often
+the right thing to do; for example, single line movements, such as
+\fBj\fP or \fBk\fP, should work on buffer lines. Commands like
+\fBdj\fP, or \fBj.\fP, where \fB.\fP is a change command, only make
+sense for buffer lines. It is not, however, the right thing
+to do for screen motion or scrolling commands like <control>-D, <control>-F,
+and \fBH\fP. If the window is fairly
+small, using buffer lines in these cases can result in completely
+random motion; for example, \fB1\fP <control>-D can result
+in a completely changed screen, without any overlap. This is clearly
+not what the user wanted. The problem is even worse in the
+case of the \fBH\fP, \fBL\fP, and \fBM\fP commands-as they position
+the cursor at the first non- <blank> of the line, they
+may all refer to the same location in large lines, and will result
+in no movement at all.
+.LP
+In addition, if the line is larger than the screen, using buffer lines
+can make it impossible to display parts of the line-there
+are not any commands that do not display the beginning of the line
+in historical \fIvi\fP, and if both the beginning and end of
+the line cannot be on the screen at the same time, the user suffers.
+Finally, the page and half-page scrolling commands
+historically moved to the first non- <blank> in the new line. If the
+line is approximately the same size as the screen, this
+is inadequate because the cursor before and after a <control>-D command
+will refer to the same location on the screen.
+.LP
+Implementations of \fIex\fP and \fIvi\fP exist that do not have these
+problems because the
+relevant commands ( <control>-B, <control>-D, <control>-F, <control>-U,
+<control>-Y,
+<control>-E, \fBH\fP, \fBL\fP, and \fBM)\fP operate on display (screen)
+lines, not (edit) buffer lines.
+.LP
+IEEE\ Std\ 1003.1-2001 does not permit this behavior by default because
+the standard developers believed that users
+would find it too confusing. However, historical practice has been
+relaxed. For example, \fIex\fP and \fIvi\fP historically attempted,
+albeit sometimes unsuccessfully, to never put part of a
+line on the last lines of a screen; for example, if a line would not
+fit in its entirety, no part of the line was displayed, and
+the screen lines corresponding to the line contained single \fB'@'\fP
+characters. This behavior is permitted, but not required
+by IEEE\ Std\ 1003.1-2001, so that it is possible for implementations
+to support long lines in small screens more
+reasonably without changing the commands to be oriented to the display
+(instead of oriented to the buffer).
+IEEE\ Std\ 1003.1-2001 also permits implementations to refuse to edit
+any edit buffer containing a line that will not fit
+on the screen in its entirety.
+.LP
+The display area (for example, the value of the \fBwindow\fP edit
+option) has historically been "grown", or expanded, to
+display new text when local movements are done in displays where the
+number of lines displayed is less than the maximum possible.
+Expansion has historically been the first choice, when the target
+line is less than the maximum possible expansion value away.
+Scrolling has historically been the next choice, done when the target
+line is less than half a display away, and otherwise, the
+screen was redrawn. There were exceptions, however, in that \fIex\fP
+commands generally always
+caused the screen to be redrawn. IEEE\ Std\ 1003.1-2001 does not specify
+a standard behavior because there may be external
+issues, such as connection speed, the number of characters necessary
+to redraw as opposed to scroll, or terminal capabilities that
+implementations will have to accommodate.
+.LP
+The current line in IEEE\ Std\ 1003.1-2001 maps one-to-one to a buffer
+line in the file. The current column does not.
+There are two different column values that are described by IEEE\ Std\ 1003.1-2001.
+The first is the current column value
+as set by many of the \fIvi\fP commands. This value is remembered
+for the lifetime of the editor. The second column value is the
+actual position on the screen where the cursor rests. The two are
+not always the same. For example, when the cursor is backed by a
+multi-column character, the actual cursor position on the screen has
+historically been the last column of the character in command
+mode, and the first column of the character in input mode.
+.LP
+Commands that set the current line, but that do not set the current
+cursor value (for example, \fBj\fP and \fBk\fP) attempt to
+get as close as possible to the remembered column position, so that
+the cursor tends to restrict itself to a vertical column as the
+user moves around in the edit buffer. IEEE\ Std\ 1003.1-2001 requires
+conformance to historical practice, requiring that
+the display location of the cursor on the display line be adjusted
+from the current column value as necessary to support this
+historical behavior.
+.LP
+Historically, only a single line (and for some terminals, a single
+line minus 1 column) of characters could be entered by the
+user for the line-oriented commands; that is, \fB:\fP, \fB!\fP, \fB/\fP,
+or \fB?\fP. IEEE\ Std\ 1003.1-2001 permits,
+but does not require, this limitation.
+.LP
+Historically, "soft" errors in \fIvi\fP caused the terminal to be
+alerted, but no error message was displayed. As a general
+rule, no error message was displayed for errors in command execution
+in \fIvi\fP, when the error resulted from the user attempting
+an invalid or impossible action, or when a searched-for object was
+not found. Examples of soft errors included \fBh\fP at the left
+margin, <control>-B or \fB[[\fP at the beginning of the file, \fB2G\fP
+at the end of the file, and so on. In addition,
+errors such as \fB%\fP, \fB]]\fP, \fB}\fP, \fB)\fP, \fBN\fP, \fBn\fP,
+\fBf\fP, \fBF\fP, \fBt\fP, and \fBT\fP failing to
+find the searched-for object were soft as well. Less consistently,
+\fB/\fP and \fB?\fP displayed an error message if the pattern
+was not found, \fB/\fP, \fB?\fP, \fBN\fP, and \fBn\fP displayed an
+error message if no previous regular expression had been
+specified, and \fB;\fP did not display an error message if no previous
+\fBf\fP, \fBF\fP, \fBt\fP, or \fBT\fP command had
+occurred. Also, behavior in this area might reasonably be based on
+a runtime evaluation of the speed of a network connection.
+Finally, some implementations have provided error messages for soft
+errors in order to assist naive users, based on the value of a
+verbose edit option. IEEE\ Std\ 1003.1-2001 does not list specific
+errors for which an error message shall be displayed.
+Implementations should conform to historical practice in the absence
+of any strong reason to diverge.
+.SS Page Backwards
+.LP
+The <control>-B and <control>-F commands historically considered it
+an error to attempt to page past the beginning
+or end of the file, whereas the <control>-D and <control>-U commands
+simply moved to the beginning or end of the file.
+For consistency, IEEE\ Std\ 1003.1-2001 requires the latter behavior
+for all four commands. All four commands still
+consider it an error if the current line is at the beginning ( <control>-B,
+<control>-U) or end ( <control>-F,
+<control>-D) of the file. Historically, the <control>-B and <control>-F
+commands skip two lines in order to
+include overlapping lines when a single command is entered. This makes
+less sense in the presence of a \fIcount\fP, as there will
+be, by definition, no overlapping lines. The actual calculation used
+by historical implementations of the \fIvi\fP editor for
+<control>-B was:
+.sp
+.RS
+.nf
+
+\fB((current first line) - count x (window edit option)) +2
+\fP
+.fi
+.RE
+.LP
+and for <control>-F was:
+.sp
+.RS
+.nf
+
+\fB((current first line) + count x (window edit option)) -2
+\fP
+.fi
+.RE
+.LP
+This calculation does not work well when intermixing commands with
+and without counts; for example, \fB3\fP <control>-F
+is not equivalent to entering the <control>-F command three times,
+and is not reversible by entering the <control>-B
+command three times. For consistency with other \fIvi\fP commands
+that take counts, IEEE\ Std\ 1003.1-2001 requires a
+different calculation.
+.SS Scroll Forward
+.LP
+The 4BSD and System V implementations of \fIvi\fP differed on the
+initial value used by the \fBscroll\fP command. 4BSD
+used:
+.sp
+.RS
+.nf
+
+\fB((window edit option) +1) /2
+\fP
+.fi
+.RE
+.LP
+while System V used the value of the \fBscroll\fP edit option. The
+System V version is specified by
+IEEE\ Std\ 1003.1-2001 because the standard developers believed that
+it was more intuitive and permitted the user a method
+of setting the scroll value initially without also setting the number
+of lines that are displayed.
+.SS Scroll Forward by Line
+.LP
+Historically, the <control>-E and <control>-Y commands considered
+it an error if the last and first lines,
+respectively, were already on the screen. IEEE\ Std\ 1003.1-2001 requires
+conformance to historical practice. Historically,
+the <control>-E and <control>-Y commands had no effect in open mode.
+For simplicity and consistency of specification,
+IEEE\ Std\ 1003.1-2001 requires that they behave as usual, albeit
+with a single line screen.
+.SS Clear and Redisplay
+.LP
+The historical <control>-L command refreshed the screen exactly as
+it was supposed to be currently displayed, replacing
+any \fB'@'\fP characters for lines that had been deleted but not updated
+on the screen with refreshed \fB'@'\fP characters.
+The intent of the <control>-L command is to refresh when the screen
+has been accidentally overwritten; for example, by a
+\fBwrite\fP command from another user, or modem noise.
+.SS Redraw Screen
+.LP
+The historical <control>-R command redisplayed only when necessary
+to update lines that had been deleted but not updated
+on the screen and that were flagged with \fB'@'\fP characters. There
+is no requirement that the screen be in any way refreshed
+if no lines of this form are currently displayed. IEEE\ Std\ 1003.1-2001
+permits implementations to extend this command to
+refresh lines on the screen flagged with \fB'@'\fP characters because
+they are too long to be displayed in the current
+framework; however, the current line and column need not be modified.
+.SS Search for tagstring
+.LP
+Historically, the first non- <blank> at or after the cursor was the
+first character, and all subsequent characters that
+were word characters, up to the end of the line, were included. For
+example, with the cursor on the leading space or on the
+\fB'#'\fP character in the text \fB"#bar@"\fP, the tag was \fB"#bar"\fP
+\&. On the character \fB'b'\fP it was
+\fB"bar"\fP, and on the \fB'a'\fP it was \fB"ar"\fP . IEEE\ Std\ 1003.1-2001
+requires this behavior.
+.SS Replace Text with Results from Shell Command
+.LP
+Historically, the \fB<\fP, \fB>\fP, and \fB!\fP commands considered
+most cursor motions other than line-oriented
+motions an error; for example, the command \fB>/foo<CR>\fP succeeded,
+while the command \fB>l\fP failed, even though
+the text region described by the two commands might be identical.
+For consistency, all three commands only consider entire lines
+and not partial lines, and the region is defined as any line that
+contains a character that was specified by the motion.
+.SS Move to Matching Character
+.LP
+Other matching characters have been left implementation-defined in
+order to allow extensions such as matching \fB'<'\fP
+and \fB'>'\fP for searching HTML, or \fB#ifdef\fP, \fB#else\fP, and
+\fB#endif\fP for searching C source.
+.SS Repeat Substitution
+.LP
+IEEE\ Std\ 1003.1-2001 requires that any \fBc\fP and \fBg\fP flags
+specified to the previous substitute command be
+ignored; however, the \fBr\fP flag may still apply, if supported by
+the implementation.
+.SS Return to Previous (Context or Section)
+.LP
+The \fB[[\fP, \fB]]\fP, \fB(\fP, \fB)\fP, \fB{\fP, and \fB}\fP commands
+are all affected by "section boundaries", but in
+some historical implementations not all of the commands recognize
+the same section boundaries. This is a bug, not a feature, and a
+unique section-boundary algorithm was not described for each command.
+One special case that is preserved is that the sentence
+command moves to the end of the last line of the edit buffer while
+the other commands go to the beginning, in order to preserve the
+traditional character cut semantics of the sentence command. Historically,
+\fIvi\fP section boundaries at the beginning and end of
+the edit buffer were the first non- <blank> on the first and last
+lines of the edit buffer if one exists; otherwise, the last
+character of the first and last lines of the edit buffer if one exists.
+To increase consistency with other section locations, this
+has been simplified by IEEE\ Std\ 1003.1-2001 to the first character
+of the first and last lines of the edit buffer, or the
+first and the last lines of the edit buffer if they are empty.
+.LP
+Sentence boundaries were problematic in the historical \fIvi\fP. They
+were not only the boundaries as defined for the section
+and paragraph commands, but they were the first non- <blank> that
+occurred after those boundaries, as well. Historically, the
+\fIvi\fP section commands were documented as taking an optional window
+size as a \fIcount\fP preceding the command. This was not
+implemented in historical versions, so IEEE\ Std\ 1003.1-2001 requires
+that the \fIcount\fP repeat the command, for
+consistency with other \fIvi\fP commands.
+.SS Repeat
+.LP
+Historically, mapped commands other than text input commands could
+not be repeated using the \fBperiod\fP command.
+IEEE\ Std\ 1003.1-2001 requires conformance to historical practice.
+.LP
+The restrictions on the interpretation of special characters (for
+example, <control>-H) in the repetition of text input
+mode commands is intended to match historical practice. For example,
+given the input sequence:
+.sp
+.RS
+.nf
+
+\fBiab<control>-H<control>-H<control>-Hdef<escape>
+\fP
+.fi
+.RE
+.LP
+the user should be informed of an error when the sequence is first
+entered, but not during a command repetition. The character
+<control>-T is specifically exempted from this restriction. Historical
+implementations of \fIvi\fP ignored <control>-T
+characters that were input in the original command during command
+repetition. IEEE\ Std\ 1003.1-2001 prohibits this
+behavior.
+.SS Find Regular Expression
+.LP
+Historically, commands did not affect the line searched to or from
+if the motion command was a search ( \fB/\fP, \fB?\fP,
+\fBN\fP, \fBn\fP) and the final position was the start/end of the
+line. There were some special cases and \fIvi\fP was not
+consistent. IEEE\ Std\ 1003.1-2001 does not permit this behavior,
+for consistency. Historical implementations permitted but
+were unable to handle searches as motion commands that wrapped (that
+is, due to the edit option \fBwrapscan\fP) to the original
+location. IEEE\ Std\ 1003.1-2001 requires that this behavior be treated
+as an error.
+.LP
+Historically, the syntax \fB"/RE/0"\fP was used to force the command
+to cut text in line mode. IEEE\ Std\ 1003.1-2001
+requires conformance to historical practice.
+.LP
+Historically, in open mode, a \fBz\fP specified to a search command
+redisplayed the current line instead of displaying the
+current screen with the current line highlighted. For consistency
+and simplicity of specification, IEEE\ Std\ 1003.1-2001
+does not permit this behavior.
+.LP
+Historically, trailing \fBz\fP commands were permitted and ignored
+if entered as part of a search used as a motion command. For
+consistency and simplicity of specification, IEEE\ Std\ 1003.1-2001
+does not permit this behavior.
+.SS Execute an ex Command
+.LP
+Historically, \fIvi\fP implementations restricted the commands that
+could be entered on the colon command line (for example,
+\fBappend\fP and \fBchange\fP), and some other commands were known
+to cause them to fail catastrophically. For consistency,
+IEEE\ Std\ 1003.1-2001 does not permit these restrictions. When executing
+an \fIex\fP
+command by entering \fB:\fP, it is not possible to enter a <newline>
+as part of the command because it is considered the end
+of the command. A different approach is to enter \fIex\fP command
+mode by using the \fIvi\fP
+\fBQ\fP command (and later resuming visual mode with the \fIex\fP
+\fBvi\fP command). In \fIex\fP command mode, the single-line limitation
+does not exist. So, for example, the following
+is valid:
+.sp
+.RS
+.nf
+
+\fBQ
+s/break here/break\\
+here/
+vi
+\fP
+.fi
+.RE
+.LP
+IEEE\ Std\ 1003.1-2001 requires that, if the \fIex\fP command overwrites
+any part of
+the screen that would be erased by a refresh, \fIvi\fP pauses for
+a character from the user. Historically, this character could be
+any character; for example, a character input by the user before the
+message appeared, or even a mapped character. This is probably
+a bug, but implementations that have tried to be more rigorous by
+requiring that the user enter a specific character, or that the
+user enter a character after the message was displayed, have been
+forced by user indignation back into historical behavior.
+IEEE\ Std\ 1003.1-2001 requires conformance to historical practice.
+.SS Shift Left (Right)
+.LP
+Refer to the Rationale for the \fB!\fP and \fB/\fP commands. Historically,
+the \fB<\fP and \fB>\fP commands sometimes
+moved the cursor to the first non- <blank> (for example if the command
+was repeated or with \fB_\fP as the motion command),
+and sometimes left it unchanged. IEEE\ Std\ 1003.1-2001 does not permit
+this inconsistency, requiring instead that the
+cursor always move to the first non- <blank>. Historically, the \fB<\fP
+and \fB>\fP commands 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 Execute
+.LP
+Historically, buffers could execute other buffers, and loops, infinite
+and otherwise, were possible.
+IEEE\ Std\ 1003.1-2001 requires conformance to historical practice.
+The * \fIbuffer\fP syntax of \fIex\fP is not required in \fIvi\fP,
+because it is not historical practice and has been used in some
+\fIvi\fP implementations to support additional scripting languages.
+.SS Reverse Case
+.LP
+Historically, the \fB~\fP command ignored any associated \fIcount\fP,
+and acted only on the characters in the current
+line. For consistency with other \fIvi\fP commands, IEEE\ Std\ 1003.1-2001
+requires that an associated \fIcount\fP act on
+the next \fIcount\fP characters, and that the command move to subsequent
+lines if warranted by \fIcount\fP, to make it possible
+to modify large pieces of text in a reasonably efficient manner. There
+exist \fIvi\fP implementations that optionally require an
+associated motion command for the \fB~\fP command. Implementations
+supporting this functionality are encouraged to base it on
+the \fBtildedop\fP edit option and handle the text regions and cursor
+positioning identically to the \fByank\fP command.
+.SS Append
+.LP
+Historically, \fIcount\fPs specified to the \fBA\fP, \fBa\fP, \fBI\fP,
+and \fBi\fP commands repeated the input of the first
+line \fIcount\fP times, and did not repeat the subsequent lines of
+the input text. IEEE\ Std\ 1003.1-2001 requires that
+the entire text input be repeated \fIcount\fP times.
+.SS Move Backward to Preceding Word
+.LP
+Historically, \fIvi\fP became confused if word commands were used
+as motion commands in empty files.
+IEEE\ Std\ 1003.1-2001 requires that this be an error. Historical
+implementations of \fIvi\fP had a large number of bugs
+in the word movement commands, and they varied greatly in behavior
+in the presence of empty lines, "words" made up of a single
+character, and lines containing only <blank>s. For consistency and
+simplicity of specification,
+IEEE\ Std\ 1003.1-2001 does not permit this behavior.
+.SS Change to End-of-Line
+.LP
+Some historical implementations of the \fBC\fP command did not behave
+as described by IEEE\ Std\ 1003.1-2001 when the
+\fB$\fP key was remapped because they were implemented by pushing
+the \fB$\fP key onto the input queue and reprocessing it.
+IEEE\ Std\ 1003.1-2001 does not permit this behavior. Historically,
+the \fBC\fP, \fBS\fP, and \fBs\fP commands did not
+copy replaced text into the numeric buffers. For consistency and simplicity
+of specification, IEEE\ Std\ 1003.1-2001
+requires that they behave like their respective \fBc\fP commands in
+all respects.
+.SS Delete
+.LP
+Historically, lines in open mode that were deleted were scrolled up,
+and an \fB@\fP glyph written over the beginning of the
+line. In the case of terminals that are incapable of the necessary
+cursor motions, the editor erased the deleted line from the
+screen. IEEE\ Std\ 1003.1-2001 requires conformance to historical
+practice; that is, if the terminal cannot display the
+\fB'@'\fP character, the line cannot remain on the screen.
+.SS Delete to End-of-Line
+.LP
+Some historical implementations of the \fBD\fP command did not behave
+as described by IEEE\ Std\ 1003.1-2001 when the
+\fB$\fP key was remapped because they were implemented by pushing
+the \fB$\fP key onto the input queue and reprocessing it.
+IEEE\ Std\ 1003.1-2001 does not permit this behavior.
+.SS Join
+.LP
+An historical oddity of \fIvi\fP is that the commands \fBJ\fP, \fB1J\fP,
+and \fB2J\fP are all equivalent.
+IEEE\ Std\ 1003.1-2001 requires conformance to historical practice.
+The \fIvi\fP \fBJ\fP command is specified in terms of
+the \fIex\fP \fBjoin\fP command with an \fIex\fP command
+\fIcount\fP value. The address correction for a \fIcount\fP that is
+past the end of the edit buffer is necessary for historical
+compatibility for both \fIex\fP and \fIvi\fP.
+.SS Mark Position
+.LP
+Historical practice is that only lowercase letters, plus \fB'`'\fP
+and \fB'"\fP, could be used to mark a cursor
+position. IEEE\ Std\ 1003.1-2001 requires conformance to historical
+practice, but encourages implementations to support
+other characters as marks as well.
+.SS Repeat Regular Expression Find (Forward and Reverse)
+.LP
+Historically, the \fBN\fP and \fBn\fP commands could not be used as
+motion components for the \fBc\fP command. With the
+exception of the \fBcN\fP command, which worked if the search crossed
+a line boundary, the text region would be discarded, and the
+user would not be in text input mode. For consistency and simplicity
+of specification, IEEE\ Std\ 1003.1-2001 does not
+permit this behavior.
+.SS Insert Empty Line (Below and Above)
+.LP
+Historically, counts to the \fBO\fP and \fBo\fP commands were used
+as the number of physical lines to open, if the terminal
+was dumb and the \fBslowopen\fP option was not set. This was intended
+to minimize traffic over slow connections and repainting for
+dumb terminals. IEEE\ Std\ 1003.1-2001 does not permit this behavior,
+requiring that a \fIcount\fP to the open command
+behave as for other text input commands. This change to historical
+practice was made for consistency, and because a superset of the
+functionality is provided by the \fBslowopen\fP edit option.
+.SS Put from Buffer (Following and Before)
+.LP
+Historically, \fIcount\fPs to the \fBp\fP and \fBP\fP commands were
+ignored if the buffer was a line mode buffer, but were
+(mostly) implemented as described in IEEE\ Std\ 1003.1-2001 if the
+buffer was a character mode buffer. Because
+implementations exist that do not have this limitation, and because
+pasting lines multiple times is generally useful,
+IEEE\ Std\ 1003.1-2001 requires that \fIcount\fP be supported for
+all \fBp\fP and \fBP\fP commands.
+.LP
+Historical implementations of \fIvi\fP were widely known to have major
+problems in the \fBp\fP and \fBP\fP commands,
+particularly when unusual regions of text were copied into the edit
+buffer. The standard developers viewed these as bugs, and they
+are not permitted for consistency and simplicity of specification.
+.LP
+Historically, a \fBP\fP or \fBp\fP command (or an \fIex\fP \fBput\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.
+.SS Replace Character
+.LP
+Historically, the \fBr\fP command did not correctly handle the \fIerase\fP
+and \fIword erase\fP characters as arguments, nor
+did it handle an associated \fIcount\fP greater than 1 with a <carriage-return>
+argument, for which it replaced \fIcount\fP
+characters with a single <newline>. IEEE\ Std\ 1003.1-2001 does not
+permit these inconsistencies.
+.LP
+Historically, the \fBr\fP command permitted the <control>-V escaping
+of entered characters, such as <ESC> and the
+<carriage-return>; however, it required two leading <control>-V characters
+instead of one.
+IEEE\ Std\ 1003.1-2001 requires that this be changed for consistency
+with the other text input commands of \fIvi\fP.
+.LP
+Historically, it is an error to enter the \fBr\fP command if there
+are less than \fIcount\fP characters at or after the cursor
+in the line. While a reasonable and unambiguous extension would be
+to permit the \fBr\fP command on empty lines, it would require
+that too large a \fIcount\fP be adjusted to match the number of characters
+at or after the cursor for consistency, which is
+sufficiently different from historical practice to be avoided. IEEE\ Std\ 1003.1-2001
+requires conformance to historical
+practice.
+.SS Replace Characters
+.LP
+Historically, if there were \fBautoindent\fP characters in the line
+on which the \fBR\fP command was run, and
+\fBautoindent\fP was set, the first <newline> would be properly indented
+and no characters would be replaced by the
+<newline>. Each additional <newline> would replace \fIn\fP characters,
+where \fIn\fP was the number of characters
+that were needed to indent the rest of the line to the proper indentation
+level. This behavior is a bug and is not permitted by
+IEEE\ Std\ 1003.1-2001.
+.SS Undo
+.LP
+Historical practice for cursor positioning after undoing commands
+was mixed. In most cases, when undoing commands that affected
+a single line, the cursor was moved to the start of added or changed
+text, or immediately after deleted text. However, if the user
+had moved from the line being changed, the column was either set to
+the first non- <blank>, returned to the origin of the
+command, or remained unchanged. When undoing commands that affected
+multiple lines or entire lines, the cursor was moved to the
+first character in the first line restored. As an example of how inconsistent
+this was, a search, followed by an \fBo\fP text
+input command, followed by an \fBundo\fP would return the cursor to
+the location where the \fBo\fP command was entered, but a
+\fBcw\fP command followed by an \fBo\fP command followed by an \fBundo\fP
+would return the cursor to the first non-
+<blank> of the line. IEEE\ Std\ 1003.1-2001 requires the most useful
+of these behaviors, and discards the least
+useful, in the interest of consistency and simplicity of specification.
+.SS Yank
+.LP
+Historically, the \fByank\fP command did not move to the end of the
+motion if the motion was in the forward direction. It moved
+to the end of the motion if the motion was in the backward direction,
+except for the \fB_\fP command, or for the \fBG\fP and
+\fB'\fP commands when the end of the motion was on the current line.
+This was further complicated by the fact that for a number of
+motion commands, the \fByank\fP command moved the cursor but did not
+update the screen; for example, a subsequent command would
+move the cursor from the end of the motion, even though the cursor
+on the screen had not reflected the cursor movement for the
+\fByank\fP command. IEEE\ Std\ 1003.1-2001 requires that all \fByank\fP
+commands associated with backward motions move
+the cursor to the end of the motion for consistency, and specifically,
+to make \fB'\fP commands as motions consistent with search
+patterns as motions.
+.SS Yank Current Line
+.LP
+Some historical implementations of the \fBY\fP command did not behave
+as described by IEEE\ Std\ 1003.1-2001 when the
+\fB'_'\fP key was remapped because they were implemented by pushing
+the \fB'_'\fP key onto the input queue and reprocessing
+it. IEEE\ Std\ 1003.1-2001 does not permit this behavior.
+.SS Redraw Window
+.LP
+Historically, the \fBz\fP command always redrew the screen. This is
+permitted but not required by
+IEEE\ Std\ 1003.1-2001, because of the frequent use of the \fBz\fP
+command in macros such as \fBmap n nz.\fP for screen
+positioning, instead of its use to change the screen size. The standard
+developers believed that expanding or scrolling the screen
+offered a better interface for users. The ability to redraw the screen
+is preserved if the optional new window size is specified,
+and in the <control>-L and <control>-R commands.
+.LP
+The semantics of \fBz^\fP are confusing at best. Historical practice
+is that the screen before the screen that ended with the
+specified line is displayed. IEEE\ Std\ 1003.1-2001 requires conformance
+to historical practice.
+.LP
+Historically, the \fBz\fP command would not display a partial line
+at the top or bottom of the screen. If the partial line
+would normally have been displayed at the bottom of the screen, the
+command worked, but the partial line was replaced with
+\fB'@'\fP characters. If the partial line would normally have been
+displayed at the top of the screen, the command would fail.
+For consistency and simplicity of specification, IEEE\ Std\ 1003.1-2001
+does not permit this behavior.
+.LP
+Historically, the \fBz\fP command with a line specification of 1 ignored
+the command. For consistency and simplicity of
+specification, IEEE\ Std\ 1003.1-2001 does not permit this behavior.
+.LP
+Historically, the \fBz\fP command did not set the cursor column to
+the first non- <blank> for the character if the first
+screen was to be displayed, and was already displayed. For consistency
+and simplicity of specification,
+IEEE\ Std\ 1003.1-2001 does not permit this behavior.
+.SS Input Mode Commands in vi
+.LP
+Historical implementations of \fIvi\fP did not permit the user to
+erase more than a single line of input, or to use normal
+erase characters such as \fIline erase\fP, \fIworderase\fP, and \fIerase\fP
+to erase \fBautoindent\fP characters. As there
+exist implementations of \fIvi\fP that do not have these limitations,
+both behaviors are permitted, but only historical practice
+is required. In the case of these extensions, \fIvi\fP is required
+to pause at the \fBautoindent\fP and previous line
+boundaries.
+.LP
+Historical implementations of \fIvi\fP updated only the portion of
+the screen where the current cursor character was displayed.
+For example, consider the \fIvi\fP input keystrokes:
+.sp
+.RS
+.nf
+
+\fBiabcd<escape>0C<tab>
+\fP
+.fi
+.RE
+.LP
+Historically, the <tab> would overwrite the characters \fB"abcd"\fP
+when it was displayed. Other implementations
+replace only the \fB'a'\fP character with the <tab>, and then push
+the rest of the characters ahead of the cursor. Both
+implementations have problems. The historical implementation is probably
+visually nicer for the above example; however, for the
+keystrokes:
+.sp
+.RS
+.nf
+
+\fBiabcd<ESC>0R<tab><ESC>
+\fP
+.fi
+.RE
+.LP
+the historical implementation results in the string \fB"bcd"\fP disappearing
+and then magically reappearing when the
+<ESC> character is entered. IEEE\ Std\ 1003.1-2001 requires the former
+behavior when overwriting erase-columns-that
+is, overwriting characters that are no longer logically part of the
+edit buffer-and the latter behavior otherwise.
+.LP
+Historical implementations of \fIvi\fP discarded the <control>-D and
+<control>-T characters when they were entered
+at places where their command functionality was not appropriate. IEEE\ Std\ 1003.1-2001
+requires that the <control>-T
+functionality always be available, and that <control>-D be treated
+as any other key when not operating on \fBautoindent\fP
+characters.
+.SS NUL
+.LP
+Some historical implementations of \fIvi\fP limited the number of
+characters entered using the NUL input character to 256
+bytes. IEEE\ Std\ 1003.1-2001 permits this limitation; however, implementations
+are encouraged to remove this limit.
+.SS <control>-D
+.LP
+See also Rationale for the input mode command <newline>. The hidden
+assumptions in the <control>-D command (and in
+the \fIvi\fP \fBautoindent\fP specification in general) is that <space>s
+take up a single column on the screen and that
+<tab>s are comprised of an integral number of <space>s.
+.SS <newline>
+.LP
+Implementations are permitted to rewrite \fBautoindent\fP characters
+in the line when <newline>, <carriage-return>,
+<control>-D, and <control>-T are entered, or when the \fBshift\fP
+commands are used, because historical
+implementations have both done so and found it necessary to do so.
+For example, a <control>-D when the cursor is preceded by
+a single <tab>, with \fBtabstop\fP set to 8, and \fBshiftwidth\fP
+set to 3, will result in the <tab> being replaced
+by several <space>s.
+.SS <control>-T
+.LP
+See also the Rationale for the input mode command <newline>. Historically,
+<control>-T only worked if no non-
+<blank>s had yet been input in the current input line. In addition,
+the characters inserted by <control>-T were treated
+as \fBautoindent\fP characters, and could not be erased using normal
+user erase characters. Because implementations exist that do
+not have these limitations, and as moving to a column boundary is
+generally useful, IEEE\ Std\ 1003.1-2001 requires that
+both limitations be removed.
+.SS <control>-V
+.LP
+Historically, \fIvi\fP used \fB^V\fP, regardless of the value of the
+literal-next character of the terminal.
+IEEE\ Std\ 1003.1-2001 requires conformance to historical practice.
+.LP
+The uses described for <control>-V can also be accomplished with <control>-Q,
+which is useful on terminals that use
+<control>-V for the down-arrow function. However, most historical
+implementations use <control>-Q for the
+\fItermios\fP START character, so the editor will generally not receive
+the <control>-Q unless \fBstty ixon\fP mode is set
+to off. (In addition, some historical implementations of \fIvi\fP
+explicitly set \fBixon\fP mode to on, so it was difficult for
+the user to set it to off.) Any of the command characters described
+in IEEE\ Std\ 1003.1-2001 can be made ineffective by
+their selection as \fItermios\fP control characters, using the \fIstty\fP
+utility or other
+methods described in the System Interfaces volume of IEEE\ Std\ 1003.1-2001.
+.SS <ESC>
+.LP
+Historically, SIGINT alerted the terminal when used to end input mode.
+This behavior is permitted, but not required, by
+IEEE\ Std\ 1003.1-2001.
+.SH FUTURE DIRECTIONS
+.LP
+None.
+.SH SEE ALSO
+.LP
+\fIed\fP, \fIex\fP, \fIstty\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 .