4553 lines
174 KiB
HTML
4553 lines
174 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<html>
|
|
<head>
|
|
<meta name="generator" content="HTML Tidy, see www.w3.org">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
|
<link type="text/css" rel="stylesheet" href="style.css"><!-- Generated by The Open Group's rhtm tool v1.2.1 -->
|
|
<!-- Copyright (c) 2001 The Open Group, All Rights Reserved -->
|
|
<title>vi</title>
|
|
</head>
|
|
<body bgcolor="white">
|
|
<script type="text/javascript" language="JavaScript" src="../jscript/codes.js">
|
|
</script>
|
|
|
|
<basefont size="3"> <a name="vi"></a> <a name="tag_04_167"></a><!-- vi -->
|
|
<!--header start-->
|
|
<center><font size="2">The Open Group Base Specifications Issue 6<br>
|
|
IEEE Std 1003.1-2001<br>
|
|
Copyright © 2001 The IEEE and The Open Group, All Rights reserved.</font></center>
|
|
|
|
<!--header end-->
|
|
<hr size="2" noshade>
|
|
<h4><a name="tag_04_167_01"></a>NAME</h4>
|
|
|
|
<blockquote>vi - screen-oriented (visual) display editor</blockquote>
|
|
|
|
<h4><a name="tag_04_167_02"></a>SYNOPSIS</h4>
|
|
|
|
<blockquote class="synopsis">
|
|
<div class="box"><code><tt><sup>[<a href="javascript:open_code('UP')">UP</a>]</sup> <img src="../images/opt-start.gif" alt=
|
|
"[Option Start]" border="0"> vi</tt> <b>[</b><tt>-rR</tt><b>][</b><tt>-c</tt> <i>command</i><b>][</b><tt>-t</tt>
|
|
<i>tagstring</i><b>][</b><tt>-w</tt> <i>size</i><b>][</b><i>file</i> <tt>...</tt><b>]</b><tt><img src="../images/opt-end.gif" alt=
|
|
"[Option End]" border="0"></tt></code></div>
|
|
</blockquote>
|
|
|
|
<h4><a name="tag_04_167_03"></a>DESCRIPTION</h4>
|
|
|
|
<blockquote>
|
|
<p>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.</p>
|
|
|
|
<p>The <i>vi</i> (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 <a href="../utilities/ex.html"><i>ex</i></a> for additional editing
|
|
capabilities used in <i>vi</i>. The user can switch back and forth between <i>vi</i> and <a href=
|
|
"../utilities/ex.html"><i>ex</i></a> and execute <a href="../utilities/ex.html"><i>ex</i></a> commands from within <i>vi</i>.</p>
|
|
|
|
<p>This reference page uses the term <i>edit buffer</i> 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.</p>
|
|
|
|
<p>When using <i>vi</i>, 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.</p>
|
|
|
|
<p>Certain terminals do not have all the capabilities necessary to support the complete <i>vi</i> 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.</p>
|
|
</blockquote>
|
|
|
|
<h4><a name="tag_04_167_04"></a>OPTIONS</h4>
|
|
|
|
<blockquote>
|
|
<p>The <i>vi</i> utility shall conform to the Base Definitions volume of IEEE Std 1003.1-2001, <a href=
|
|
"../basedefs/xbd_chap12.html#tag_12_02">Section 12.2, Utility Syntax Guidelines</a>.</p>
|
|
|
|
<p>The following options shall be supported:</p>
|
|
|
|
<dl compact>
|
|
<dt><b>-c </b> <i>command</i></dt>
|
|
|
|
<dd>See the <a href="../utilities/ex.html"><i>ex</i></a> command description of the <b>-c</b> option.</dd>
|
|
|
|
<dt><b>-r</b></dt>
|
|
|
|
<dd>See the <a href="../utilities/ex.html"><i>ex</i></a> command description of the <b>-r</b> option.</dd>
|
|
|
|
<dt><b>-R</b></dt>
|
|
|
|
<dd>See the <a href="../utilities/ex.html"><i>ex</i></a> command description of the <b>-R</b> option.</dd>
|
|
|
|
<dt><b>-t </b> <i>tagstring</i></dt>
|
|
|
|
<dd>See the <a href="../utilities/ex.html"><i>ex</i></a> command description of the <b>-t</b> option.</dd>
|
|
|
|
<dt><b>-w </b> <i>size</i></dt>
|
|
|
|
<dd>See the <a href="../utilities/ex.html"><i>ex</i></a> command description of the <b>-w</b> option.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<h4><a name="tag_04_167_05"></a>OPERANDS</h4>
|
|
|
|
<blockquote>
|
|
<p>See the OPERANDS section of the <a href="../utilities/ex.html"><i>ex</i></a> command for a description of the operands supported
|
|
by the <i>vi</i> command.</p>
|
|
</blockquote>
|
|
|
|
<h4><a name="tag_04_167_06"></a>STDIN</h4>
|
|
|
|
<blockquote>
|
|
<p>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.</p>
|
|
|
|
<p>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.</p>
|
|
</blockquote>
|
|
|
|
<h4><a name="tag_04_167_07"></a>INPUT FILES</h4>
|
|
|
|
<blockquote>
|
|
<p>See the INPUT FILES section of the <a href="../utilities/ex.html"><i>ex</i></a> command for a description of the input files
|
|
supported by the <i>vi</i> command.</p>
|
|
</blockquote>
|
|
|
|
<h4><a name="tag_04_167_08"></a>ENVIRONMENT VARIABLES</h4>
|
|
|
|
<blockquote>
|
|
<p>See the ENVIRONMENT VARIABLES section of the <a href="../utilities/ex.html"><i>ex</i></a> command for the environment variables
|
|
that affect the execution of the <i>vi</i> command.</p>
|
|
</blockquote>
|
|
|
|
<h4><a name="tag_04_167_09"></a>ASYNCHRONOUS EVENTS</h4>
|
|
|
|
<blockquote>
|
|
<p>See the ASYNCHRONOUS EVENTS section of the <a href="../utilities/ex.html"><i>ex</i></a> for the asynchronous events that affect
|
|
the execution of the <i>vi</i> command.</p>
|
|
</blockquote>
|
|
|
|
<h4><a name="tag_04_167_10"></a>STDOUT</h4>
|
|
|
|
<blockquote>
|
|
<p>If standard output is not a terminal device, undefined results occur.</p>
|
|
|
|
<p>Standard output may be used for writing prompts to the user, for informational messages, and for writing lines from the
|
|
file.</p>
|
|
</blockquote>
|
|
|
|
<h4><a name="tag_04_167_11"></a>STDERR</h4>
|
|
|
|
<blockquote>
|
|
<p>If standard output is not a terminal device, undefined results occur.</p>
|
|
|
|
<p>The standard error shall be used only for diagnostic messages.</p>
|
|
</blockquote>
|
|
|
|
<h4><a name="tag_04_167_12"></a>OUTPUT FILES</h4>
|
|
|
|
<blockquote>
|
|
<p>See the OUTPUT FILES section of the <a href="../utilities/ex.html"><i>ex</i></a> command for a description of the output files
|
|
supported by the <i>vi</i> command.</p>
|
|
</blockquote>
|
|
|
|
<h4><a name="tag_04_167_13"></a>EXTENDED DESCRIPTION</h4>
|
|
|
|
<blockquote>
|
|
<p>If the terminal does not have the capabilities necessary to support an unspecified portion of the <i>vi</i> definition,
|
|
implementations shall start initially in <a href="../utilities/ex.html"><i>ex</i></a> mode or open mode. Otherwise, after
|
|
initialization, <i>vi</i> 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 <a href="#tag_04_167_13_16">Terminate Command or Input Mode</a> .</p>
|
|
|
|
<h5><a name="tag_04_167_13_01"></a>Initialization in ex and vi</h5>
|
|
|
|
<p>See <a href="ex.html#tag_04_45_13_01"><i>Initialization in ex and vi</i></a> for a description of <a href=
|
|
"../utilities/ex.html"><i>ex</i></a> and <i>vi</i> initialization for the <i>vi</i> utility.</p>
|
|
|
|
<h5><a name="tag_04_167_13_02"></a>Command Descriptions in vi</h5>
|
|
|
|
<p>The following symbols are used in this reference page to represent arguments to commands.</p>
|
|
|
|
<dl compact>
|
|
<dt><i>buffer</i></dt>
|
|
|
|
<dd>See the description of <i>buffer</i> in the EXTENDED DESCRIPTION section of the <a href="../utilities/ex.html"><i>ex</i></a>
|
|
utility; see <a href="ex.html#tag_04_45_13_10"><i>Command Descriptions in ex</i></a> .
|
|
|
|
<p>In open and visual mode, when a command synopsis shows both [ <i>buffer</i>] and [ <i>count</i>] preceding the command name,
|
|
they can be specified in either order.</p>
|
|
</dd>
|
|
|
|
<dt><i>count</i></dt>
|
|
|
|
<dd>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.
|
|
|
|
<p>The Synopsis lines for the <i>vi</i> commands <control>-G, <control>-L, <control>-R, <control>-],
|
|
<b>%</b>, <b>&</b>, <b>^</b>, <b>D</b>, <b>m</b>, <b>M</b>, <b>Q</b>, <b>u</b>, <b>U</b>, and <b>ZZ</b> do not have
|
|
<i>count</i> as an optional argument. Regardless, it shall not be an error to specify a <i>count</i> to these commands, and any
|
|
specified <i>count</i> shall be ignored.</p>
|
|
</dd>
|
|
|
|
<dt><i>motion</i></dt>
|
|
|
|
<dd>An optional trailing argument used by the <b>!</b>, <b><</b>, <b>></b>, <b>c</b>, <b>d</b>, and <b>y</b> 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 <i>vi</i> 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.
|
|
|
|
<p>Commands that take <i>motion</i> 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.</p>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>The following commands shall be valid cursor motion commands:</p>
|
|
|
|
<pre>
|
|
<tt><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
|
|
</tt>
|
|
</pre>
|
|
|
|
<p>Any <i>count</i> that is specified to a command that has an associated motion command shall be applied to the motion command. If
|
|
a <i>count</i> is applied to both the command and its associated motion command, the effect shall be multiplicative.</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>The following symbols are used in this section to specify locations in the edit buffer:</p>
|
|
|
|
<dl compact>
|
|
<dt><i>current character</i></dt>
|
|
|
|
<dd><br>
|
|
The character that is currently indicated by the cursor.</dd>
|
|
|
|
<dt><i>end of a line</i></dt>
|
|
|
|
<dd><br>
|
|
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.</dd>
|
|
|
|
<dt><i>end of the edit buffer</i></dt>
|
|
|
|
<dd><br>
|
|
The location corresponding to the end of the last line in the edit buffer.</dd>
|
|
</dl>
|
|
|
|
<p>The following symbols are used in this section to specify command actions:</p>
|
|
|
|
<dl compact>
|
|
<dt><i>bigword</i></dt>
|
|
|
|
<dd>In the POSIX locale, <i>vi</i> shall recognize four kinds of <i>bigwords</i>:
|
|
|
|
<ol>
|
|
<li>
|
|
<p>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</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>One or more sequential blank lines</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The first character in the edit buffer</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The last non- <newline> in the edit buffer</p>
|
|
</li>
|
|
</ol>
|
|
</dd>
|
|
|
|
<dt><i>word</i></dt>
|
|
|
|
<dd>In the POSIX locale, <i>vi</i> shall recognize five kinds of words:
|
|
|
|
<ol>
|
|
<li>
|
|
<p>A maximal sequence of letters, digits, and underscores, delimited at both ends by:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>Characters other than letters, digits, or underscores</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The beginning or end of a line</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The beginning or end of the edit buffer</p>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
|
|
<li>
|
|
<p>A maximal sequence of characters other than letters, digits, underscores, or <blank>s, delimited at both ends by:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>A letter, digit, underscore</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p><blank>s</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The beginning or end of a line</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The beginning or end of the edit buffer</p>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
|
|
<li>
|
|
<p>One or more sequential blank lines</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The first character in the edit buffer</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The last non- <newline> in the edit buffer</p>
|
|
</li>
|
|
</ol>
|
|
</dd>
|
|
|
|
<dt><i>section boundary</i></dt>
|
|
|
|
<dd><br>
|
|
A <i>section boundary</i> is one of the following:
|
|
|
|
<ol>
|
|
<li>
|
|
<p>A line whose first character is a <form-feed></p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>A line whose first character is an open curly brace ( <tt>'{'</tt> )</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>A line whose first character is a period and whose second and third characters match a two-character pair in the <b>sections</b>
|
|
edit option (see <a href="../utilities/ed.html"><i>ed</i></a>)</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>A line whose first character is a period and whose only other character matches the first character of a two-character pair in
|
|
the <b>sections</b> edit option, where the second character of the two-character pair is a <space></p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The first line of the edit buffer</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The last line of the edit buffer if the last line of the edit buffer is empty or if it is a <b>]]</b> or <b>}</b> command;
|
|
otherwise, the last non- <newline> of the last line of the edit buffer</p>
|
|
</li>
|
|
</ol>
|
|
</dd>
|
|
|
|
<dt><i>paragraph boundary</i></dt>
|
|
|
|
<dd><br>
|
|
A <i>paragraph boundary</i> is one of the following:
|
|
|
|
<ol>
|
|
<li>
|
|
<p>A section boundary</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>A line whose first character is a period and whose second and third characters match a two-character pair in the
|
|
<b>paragraphs</b> edit option (see <a href="../utilities/ed.html"><i>ed</i></a>)</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>A line whose first character is a period and whose only other character matches the first character of a two-character pair in
|
|
the <i>paragraphs</i> edit option, where the second character of the two-character pair is a <space></p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>One or more sequential blank lines</p>
|
|
</li>
|
|
</ol>
|
|
</dd>
|
|
|
|
<dt><i>remembered search direction</i></dt>
|
|
|
|
<dd><br>
|
|
See the description of <i>remembered search direction</i> in <a href="../utilities/ed.html"><i>ed</i></a>.</dd>
|
|
|
|
<dt><i>sentence boundary</i></dt>
|
|
|
|
<dd><br>
|
|
A <i>sentence boundary</i> is one of the following:
|
|
|
|
<ol>
|
|
<li>
|
|
<p>A paragraph boundary</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The first non- <blank> that occurs after a paragraph boundary</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The first non- <blank> that occurs after a period ( <tt>'.'</tt> ), exclamation mark ( <tt>'!'</tt> ), or question mark (
|
|
<tt>'?'</tt> ), followed by two <space>s or the end of a line; any number of closing parenthesis ( <tt>')'</tt> ), closing
|
|
brackets ( <tt>']'</tt> ), double quote ( <tt>' ),'</tt> or single quote ( <tt>'"</tt> ) characters can appear between the
|
|
punctuation mark and the two <space>s or end-of-line</p>
|
|
</li>
|
|
</ol>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>In the remainder of the description of the <i>vi</i> 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".</p>
|
|
|
|
<p>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 ( <tt>'˜'</tt> ) character, plus the terminating
|
|
<newline>.</p>
|
|
|
|
<p>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" ( <b>/</b>, <b>?</b>, <b>:</b>, and <b>!</b>). 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 <b>!</b> 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.</p>
|
|
|
|
<p>If any command is executed that overwrites a portion of the screen other than the last line of the screen (for example, the <a
|
|
href="../utilities/ex.html"><i>ex</i></a> <b>suspend</b> or <b>!</b> commands), other than the <a href=
|
|
"../utilities/ex.html"><i>ex</i></a> <b>shell</b> command, the user shall be prompted for a character before the screen is
|
|
refreshed and the edit session continued.</p>
|
|
|
|
<p><tab>s shall take up the number of columns on the screen set by the <b>tabstop</b> edit option (see <a href=
|
|
"../utilities/ed.html"><i>ed</i></a>), 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.</p>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>In open mode, if the current line is not already displayed, then it shall be displayed.</p>
|
|
|
|
<p>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 <b>window</b> edit option shall be displayed (unless the current line cannot be completely
|
|
displayed in the number of display lines specified by the <b>window</b> 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.</p>
|
|
|
|
<p>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 <tt>'@'</tt>
|
|
character.</p>
|
|
|
|
<p>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 <tt>'@'</tt> character (plus the terminating <newline>), and the <control>-R command shall cause
|
|
the editor to update the screen to correctly represent the edit buffer.</p>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>The display cursor column in the display is based on the value of the current column, as follows, with each rule applied in
|
|
turn:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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:</p>
|
|
|
|
<ol type="a">
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Otherwise, the display cursor column shall be adjusted to the last display line column in which any portion of that character is
|
|
displayed.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>The current column shall not be changed by these adjustments to the display cursor column.</p>
|
|
|
|
<p>If an error occurs during the parsing or execution of a <i>vi</i> command:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>The terminal shall be alerted. Execution of the <i>vi</i> command shall stop, and the cursor (for example, the current line and
|
|
column) shall not be further modified.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Unless otherwise specified by the following command sections, it is unspecified whether an informational message shall be
|
|
displayed.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Any partially entered <i>vi</i> command shall be discarded.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>If the <i>vi</i> command resulted from a <b>map</b> expansion, all characters from that <b>map</b> expansion shall be discarded,
|
|
except as otherwise specified by the <b>map</b> command (see <a href="../utilities/ed.html"><i>ed</i></a>).</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>If the <i>vi</i> command resulted from the execution of a buffer, no further commands caused by the execution of the buffer
|
|
shall be executed.</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<h5><a name="tag_04_167_13_03"></a>Page Backwards</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt><control>-B
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If in open mode, the <control>-B command shall behave identically to the <b>z</b> command. Otherwise, if the current line
|
|
is the first line of the edit buffer, it shall be an error.</p>
|
|
|
|
<p>If the <b>window</b> edit option is less than 3, display a screen where the last line of the display shall be some portion
|
|
of:</p>
|
|
|
|
<pre>
|
|
<tt>(</tt><i>current first line</i><tt>) -1
|
|
</tt>
|
|
</pre>
|
|
|
|
<p>otherwise, display a screen where the first line of the display shall be some portion of:</p>
|
|
|
|
<pre>
|
|
<tt>(</tt><i>current first line</i><tt>) -</tt> <i>count</i> <tt>x ((window edit option) -2)
|
|
</tt>
|
|
</pre>
|
|
|
|
<p>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.</p>
|
|
|
|
<p><i>Current line</i>: If no lines from the previous display remain on the screen, set to the last line of the display; otherwise,
|
|
set to ( <i>line</i> - the number of new lines displayed on this screen).</p>
|
|
|
|
<p><i>Current column</i>: Set to non- <blank>.</p>
|
|
|
|
<h5><a name="tag_04_167_13_04"></a>Scroll Forward</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt><control>-D
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If the current line is the last line of the edit buffer, it shall be an error.</p>
|
|
|
|
<p>If no <i>count</i> is specified, <i>count</i> shall default to the <i>count</i> associated with the previous <control>-D
|
|
or <control>-U command. If there was no previous <control>-D or <control>-U command, <i>count</i> shall default
|
|
to the value of the <b>scroll</b> edit option.</p>
|
|
|
|
<p>If in open mode, write lines starting with the line after the current line, until <i>count</i> lines or the last line of the
|
|
file have been written.</p>
|
|
|
|
<p><i>Current line</i>: If the current line + <i>count</i> is past the last line of the edit buffer, set to the last line of the
|
|
edit buffer; otherwise, set to the current line + <i>count</i>.</p>
|
|
|
|
<p><i>Current column</i>: Set to non- <blank>.</p>
|
|
|
|
<h5><a name="tag_04_167_13_05"></a>Scroll Forward by Line</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt><control>-E
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Display the line count lines after the last line currently displayed.</p>
|
|
|
|
<p>If the last line of the edit buffer is displayed, it shall be an error. If there is no line <i>count</i> 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.</p>
|
|
|
|
<p><i>Current line</i>: Unchanged if the previous current character is displayed; otherwise, set to the first line displayed.</p>
|
|
|
|
<p><i>Current column</i>: Unchanged.</p>
|
|
|
|
<h5><a name="tag_04_167_13_06"></a>Page Forward</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt><control>-F
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If in open mode, the <control>-F command shall behave identically to the <b>z</b> command. Otherwise, if the current line
|
|
is the last line of the edit buffer, it shall be an error.</p>
|
|
|
|
<p>If the <b>window</b> edit option is less than 3, display a screen where the first line of the display shall be some portion
|
|
of:</p>
|
|
|
|
<pre>
|
|
<tt>(</tt><i>current last line</i><tt>) +1
|
|
</tt>
|
|
</pre>
|
|
|
|
<p>otherwise, display a screen where the first line of the display shall be some portion of:</p>
|
|
|
|
<pre>
|
|
<tt>(</tt><i>current first line</i><tt>) +</tt> <i>count</i> <tt>x ((window edit option) -2)
|
|
</tt>
|
|
</pre>
|
|
|
|
<p>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.</p>
|
|
|
|
<p><i>Current line</i>: If no lines from the previous display remain on the screen, set to the first line of the display;
|
|
otherwise, set to ( <i>line</i> + the number of new lines displayed on this screen).</p>
|
|
|
|
<p><i>Current column</i>: Set to non- <blank>.</p>
|
|
|
|
<h5><a name="tag_04_167_13_07"></a>Display Information</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt><control>-G
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>This command shall be equivalent to the <a href="../utilities/ex.html"><i>ex</i></a> <b>file</b> command.</p>
|
|
|
|
<h5><a name="tag_04_167_13_08"></a>Move Cursor Backwards</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt><control>-H
|
|
<br>
|
|
</tt><b>[</b><i>count</i><b>]</b> <tt>h
|
|
<br>
|
|
the current</tt> <i>erase</i> <tt>character (see stty)
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If there are no characters before the current character on the current line, it shall be an error. If there are less than
|
|
<i>count</i> previous characters on the current line, <i>count</i> shall be adjusted to the number of previous characters on the
|
|
line.</p>
|
|
|
|
<p>If used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>The text region shall be from the character before the starting cursor up to and including the <i>count</i>th character before
|
|
the starting cursor.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Any text copied to a buffer shall be in character mode.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<p><i>Current line</i>: Unchanged.</p>
|
|
|
|
<p><i>Current column</i>: Set to ( <i>column</i> - the number of columns occupied by <i>count</i> characters ending with the
|
|
previous current column).</p>
|
|
|
|
<h5><a name="tag_04_167_13_09"></a>Move Down</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt><newline>
|
|
<br>
|
|
</tt><b>[</b><i>count</i><b>]</b> <tt><control>-J
|
|
<br>
|
|
</tt><b>[</b><i>count</i><b>]</b> <tt><control>-M
|
|
<br>
|
|
</tt><b>[</b><i>count</i><b>]</b> <tt><control>-N
|
|
<br>
|
|
</tt><b>[</b><i>count</i><b>]</b> <tt>j
|
|
<br>
|
|
</tt><b>[</b><i>count</i><b>]</b> <tt><carriage-return>
|
|
<br>
|
|
</tt><b>[</b><i>count</i><b>]</b> <tt>+
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If there are less than <i>count</i> lines after the current line in the edit buffer, it shall be an error.</p>
|
|
|
|
<p>If used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>The text region shall include the starting line and the next <i>count</i> - 1 lines.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Any text copied to a buffer shall be in line mode.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<p><i>Current line</i>: Set to <i>current line</i>+ <i>count</i>.</p>
|
|
|
|
<p><i>Current column</i>: Set to non- <blank> for the <carriage-return>, <control>-M, and <b>+</b> commands;
|
|
otherwise, unchanged.</p>
|
|
|
|
<h5><a name="tag_04_167_13_10"></a>Clear and Redisplay</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt><control>-L
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If in open mode, clear the screen and redisplay the current line. Otherwise, clear and redisplay the screen.</p>
|
|
|
|
<p><i>Current line</i>: Unchanged.</p>
|
|
|
|
<p><i>Current column</i>: Unchanged.</p>
|
|
|
|
<h5><a name="tag_04_167_13_11"></a>Move Up</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt><control>-P
|
|
<br>
|
|
</tt><b>[</b><i>count</i><b>]</b> <tt>k
|
|
<br>
|
|
</tt><b>[</b><i>count</i><b>]</b> <tt>-
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If there are less than <i>count</i> lines before the current line in the edit buffer, it shall be an error.</p>
|
|
|
|
<p>If used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>The text region shall include the starting line and the previous <i>count</i> lines.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Any text copied to a buffer shall be in line mode.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<p><i>Current line</i>: Set to <i>current line</i> - <i>count</i>.</p>
|
|
|
|
<p><i>Current column</i>: Set to non- <blank> for the <b>-</b> command; otherwise, unchanged.</p>
|
|
|
|
<h5><a name="tag_04_167_13_12"></a>Redraw Screen</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt><control>-R
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If any lines have been deleted from the display screen and flagged as deleted on the terminal using the <b>@</b> convention (see
|
|
the beginning of the EXTENDED DESCRIPTION section), they shall be redisplayed to match the contents of the edit buffer.</p>
|
|
|
|
<p>It is unspecified whether lines flagged with <b>@</b> because they do not fit on the terminal display shall be affected.</p>
|
|
|
|
<p><i>Current line</i>: Unchanged.</p>
|
|
|
|
<p><i>Current column</i>: Unchanged.</p>
|
|
|
|
<h5><a name="tag_04_167_13_13"></a>Scroll Backward</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt><control>-U
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If the current line is the first line of the edit buffer, it shall be an error.</p>
|
|
|
|
<p>If no <i>count</i> is specified, <i>count</i> shall default to the <i>count</i> associated with the previous <control>-D
|
|
or <control>-U command. If there was no previous <control>-D or <control>-U command, <i>count</i> shall default
|
|
to the value of the <b>scroll</b> edit option.</p>
|
|
|
|
<p><i>Current line</i>: If <i>count</i> is greater than the current line, set to 1; otherwise, set to the current line -
|
|
<i>count</i>.</p>
|
|
|
|
<p><i>Current column</i>: Set to non- <blank>.</p>
|
|
|
|
<h5><a name="tag_04_167_13_14"></a>Scroll Backward by Line</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt><control>-Y
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Display the line <i>count</i> lines before the first line currently displayed.</p>
|
|
|
|
<p>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.</p>
|
|
|
|
<p><i>Current line</i>: Unchanged if the previous current character is displayed; otherwise, set to the first line displayed.</p>
|
|
|
|
<p><i>Current column</i>: Unchanged.</p>
|
|
|
|
<h5><a name="tag_04_167_13_15"></a>Edit the Alternate File</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt><control>-^
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
This command shall be equivalent to the <a href="../utilities/ex.html"><i>ex</i></a> <b>edit</b> command, with the alternate
|
|
pathname as its argument.
|
|
|
|
<h5><a name="tag_04_167_13_16"></a>Terminate Command or Input Mode</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt><ESC>
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If a partial <i>vi</i> command (as defined by at least one, non- <i>count</i> character) has been entered, discard the
|
|
<i>count</i> and the command character(s).</p>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>Otherwise, it shall be an error.</p>
|
|
|
|
<p><i>Current line</i>: Unchanged.</p>
|
|
|
|
<p><i>Current column</i>: Unchanged.</p>
|
|
|
|
<h5><a name="tag_04_167_13_17"></a>Search for tagstring</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt><control>-]
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If the current character is not a word or <blank>, it shall be an error.</p>
|
|
|
|
<p>This command shall be equivalent to the <a href="../utilities/ex.html"><i>ex</i></a> <b>tag</b> command, with the argument to
|
|
that command defined as follows.</p>
|
|
|
|
<p>If the current character is a <blank>:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>Skip all <blank>s after the cursor up to the end of the line.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>If the end of the line is reached, it shall be an error.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>Then, the argument to the <a href="../utilities/ex.html"><i>ex</i></a> <b>tag</b> command shall be the current character and all
|
|
subsequent characters, up to the first non-word character or the end of the line.</p>
|
|
|
|
<h5><a name="tag_04_167_13_18"></a>Move Cursor Forward</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt><space>
|
|
<br>
|
|
</tt><b>[</b><i>count</i><b>]</b> <tt>l</tt> (ell)
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If there are less than <i>count</i> non- <newline>s after the cursor on the current line, <i>count</i> shall be adjusted
|
|
to the number of non- <newline>s after the cursor on the line.</p>
|
|
|
|
<p>If used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>If the current or <i>count</i>th 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 <i>count</i>th character after the cursor.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Any text copied to a buffer shall be in character mode.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<p>If there are no non- <newline>s after the current character on the current line, it shall be an error.</p>
|
|
|
|
<p><i>Current line</i>: Unchanged.</p>
|
|
|
|
<p><i>Current column</i>: Set to the last column that displays any portion of the <i>count</i>th character after the current
|
|
character.</p>
|
|
|
|
<h5><a name="tag_04_167_13_19"></a>Replace Text with Results from Shell Command</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>!</tt> <i>motion shell-commands</i> <tt><newline>
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If the motion command is the <b>!</b> command repeated:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>If the edit buffer is empty and no <i>count</i> was supplied, the command shall be the equivalent of the <a href=
|
|
"../utilities/ex.html"><i>ex</i></a> <b>:read</b> <b>!</b> command, with the text input, and no text shall be copied to any
|
|
buffer.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Otherwise:</p>
|
|
|
|
<ol type="a">
|
|
<li>
|
|
<p>If there are less than <i>count</i> -1 lines after the current line in the edit buffer, it shall be an error.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The text region shall be from the current line up to and including the next <i>count</i> -1 lines.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>Otherwise, the text region shall be the lines in which any character of the text region specified by the motion command
|
|
appear.</p>
|
|
|
|
<p>Any text copied to a buffer shall be in line mode.</p>
|
|
|
|
<p>This command shall be equivalent to the <a href="../utilities/ex.html"><i>ex</i></a> <b>!</b> command for the specified
|
|
lines.</p>
|
|
|
|
<h5><a name="tag_04_167_13_20"></a>Move Cursor to End-of-Line</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>$
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>It shall be an error if there are less than ( <i>count</i> -1) lines after the current line in the edit buffer.</p>
|
|
|
|
<p>If used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>If <i>count</i> is 1:</p>
|
|
|
|
<ol type="a">
|
|
<li>
|
|
<p>It shall be an error if the line is empty.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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 <i>count</i> -1 lines, and any text saved to a buffer shall be in line mode.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Otherwise, the text region shall consist of all characters from the starting cursor to the last non- <newline> in the line
|
|
that is <i>count</i> -1 lines forward from the current line, and any text copied to a buffer shall be in character mode.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<p><i>Current line</i>: Set to the <i>current line</i> + <i>count</i>-1.</p>
|
|
|
|
<p><i>Current column</i>: 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.</p>
|
|
|
|
<p>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.</p>
|
|
|
|
<h5><a name="tag_04_167_13_21"></a>Move to Matching Character</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt>%
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>Matching shall be determined as follows, for an open parenthesis:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>Set a counter to 1.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Search forwards until a parenthesis is found or the end of the edit buffer is reached.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>If the end of the edit buffer is reached, it shall be an error.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>If an open parenthesis is found, increment the counter by 1.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>If a close parenthesis is found, decrement the counter by 1.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>If the counter is zero, the current character is the matching character.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>If used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<p><i>Current line</i>: Set to the line where the matching character is located.</p>
|
|
|
|
<p><i>Current column</i>: Set to the last column where any portion of the matching character is displayed.</p>
|
|
|
|
<h5><a name="tag_04_167_13_22"></a>Repeat Substitution</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt>&
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Repeat the previous substitution command. This command shall be equivalent to the <a href="../utilities/ex.html"><i>ex</i></a>
|
|
<b>&</b> command with the current line as its addresses, and without <i>options</i>, <i>count</i>, or <i>flags</i>.</p>
|
|
|
|
<h5><a name="tag_04_167_13_23"></a>Return to Previous Context at Beginning of Line</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt>'</tt> <i>character</i>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>It shall be an error if there is no line in the edit buffer marked by <i>character</i>.</p>
|
|
|
|
<p>If used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<p><i>Current line</i>: Set to the line referenced by the mark.</p>
|
|
|
|
<p><i>Current column</i>: Set to non- <blank>.</p>
|
|
|
|
<h5><a name="tag_04_167_13_24"></a>Return to Previous Context</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt>`</tt> <i>character</i>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>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>.</p>
|
|
|
|
<p>If used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>It shall be an error if the marked cursor references the same character in the edit buffer as the starting cursor.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<p><i>Current line</i>: Set to the line referenced by the mark.</p>
|
|
|
|
<p><i>Current column</i>: Set to the last column in which any portion of the character referenced by the mark is displayed.</p>
|
|
|
|
<h5><a name="tag_04_167_13_25"></a>Return to Previous Section</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt>[[
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Move the cursor backward through the edit buffer to the first character of the previous section boundary, <i>count</i>
|
|
times.</p>
|
|
|
|
<p>If used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>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 <i>count</i>th next boundary starts, and any text copied to a buffer shall be in line mode.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Otherwise, the text region shall consist of the starting character up to but not including the first character in the
|
|
<i>count</i>th next boundary, and any text copied to a buffer shall be in character mode.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<p><i>Current line</i>: Set to the line where the <i>count</i>th next boundary in the edit buffer starts.</p>
|
|
|
|
<p><i>Current column</i>: Set to the last column in which any portion of the first character of the <i>count</i>th next boundary is
|
|
displayed, or column position 1 if the line is empty.</p>
|
|
|
|
<h5><a name="tag_04_167_13_26"></a>Move to Next Section</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt>]]
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Move the cursor forward through the edit buffer to the first character of the next section boundary, <i>count</i> times.</p>
|
|
|
|
<p>If used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>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 <i>count</i>th previous boundary starts, and any text copied to a buffer shall be in line mode.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Otherwise, the text region shall consist of the first character in the <i>count</i>th previous section boundary up to but not
|
|
including the starting character, and any text copied to a buffer shall be in character mode.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<p><i>Current line</i>: Set to the line where the <i>count</i>th previous boundary in the edit buffer starts.</p>
|
|
|
|
<p><i>Current column</i>: Set to the last column in which any portion of the first character of the <i>count</i>th previous
|
|
boundary is displayed, or column position 1 if the line is empty.</p>
|
|
|
|
<h5><a name="tag_04_167_13_27"></a>Move to First Non-<blank> Position on Current Line</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt>^
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
If used as a motion command:
|
|
|
|
<ol>
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Any text copied to a buffer shall be in character mode.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<p><i>Current line</i>: Unchanged.</p>
|
|
|
|
<p><i>Current column</i>: Set to non- <blank>.</p>
|
|
|
|
<h5><a name="tag_04_167_13_28"></a>Current and Line Above</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>_
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If there are less than <i>count</i> -1 lines after the current line in the edit buffer, it shall be an error.</p>
|
|
|
|
<p>If used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>If <i>count</i> is less than 2, the text region shall be the current line.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Otherwise, the text region shall include the starting line and the next <i>count</i> -1 lines.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Any text copied to a buffer shall be in line mode.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<p><i>Current line</i>: Set to current line + <i>count</i> -1.</p>
|
|
|
|
<p><i>Current column</i>: Set to non- <blank>.</p>
|
|
|
|
<h5><a name="tag_04_167_13_29"></a>Move Back to Beginning of Sentence</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>(
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Move backward to the beginning of a sentence. This command shall be equivalent to the <b>[[</b> command, with the exception that
|
|
sentence boundaries shall be used instead of section boundaries.</p>
|
|
|
|
<h5><a name="tag_04_167_13_30"></a>Move Forward to Beginning of Sentence</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>)
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Move forward to the beginning of a sentence. This command shall be equivalent to the <b>]]</b> command, with the exception that
|
|
sentence boundaries shall be used instead of section boundaries.</p>
|
|
|
|
<h5><a name="tag_04_167_13_31"></a>Move Back to Preceding Paragraph</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>{
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Move back to the beginning of the preceding paragraph. This command shall be equivalent to the <b>[[</b> command, with the
|
|
exception that paragraph boundaries shall be used instead of section boundaries.</p>
|
|
|
|
<h5><a name="tag_04_167_13_32"></a>Move Forward to Next Paragraph</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>}
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Move forward to the beginning of the next paragraph. This command shall be equivalent to the <b>]]</b> command, with the
|
|
exception that paragraph boundaries shall be used instead of section boundaries.</p>
|
|
|
|
<h5><a name="tag_04_167_13_33"></a>Move to Specific Column Position</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>|
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>If there are less than <i>count</i> columns in which characters from the current line are displayed on the screen, <i>count</i>
|
|
shall be adjusted to be the last column in which any portion of the line is displayed on the screen.</p>
|
|
|
|
<p>If used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>If the line is empty, or the cursor character is the same as the character on the <i>count</i>th column of the line, it shall be
|
|
an error.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>If the cursor is before the <i>count</i>th column of the line, the text region shall be comprised of the current character, up
|
|
to but not including the character on the <i>count</i>th column of the line.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>If the cursor is after the <i>count</i>th column of the line, the text region shall be from the character before the starting
|
|
cursor up to and including the character on the <i>count</i>th column of the line.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Any text copied to a buffer shall be in character mode.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<p><i>Current line</i>: Unchanged.</p>
|
|
|
|
<p><i>Current column</i>: Set to the last column in which any portion of the character that is displayed in the <i>count</i> column
|
|
of the line is displayed.</p>
|
|
|
|
<h5><a name="tag_04_167_13_34"></a>Reverse Find Character</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>,
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If the last <b>F</b>, <b>f</b>, <b>T</b>, or <b>t</b> command was <b>F</b>, <b>f</b>, <b>T</b>, or <b>t</b>, this command shall
|
|
be equivalent to an <b>f</b>, <b>F</b>, <b>t</b>, or <b>T</b> command, respectively, with the specified <i>count</i> and the same
|
|
search character.</p>
|
|
|
|
<p>If there was no previous <b>F</b>, <b>f</b>, <b>T</b>, or <b>t</b> command, it shall be an error.</p>
|
|
|
|
<h5><a name="tag_04_167_13_35"></a>Repeat</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>.
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Repeat the last <b>!</b>, <b><</b>, <b>></b>, <b>A</b>, <b>C</b>, <b>D</b>, <b>I</b>, <b>J</b>, <b>O</b>, <b>P</b>,
|
|
<b>R</b>, <b>S</b>, <b>X</b>, <b>Y</b>, <b>a</b>, <b>c</b>, <b>d</b>, <b>i</b>, <b>o</b>, <b>p</b>, <b>r</b>, <b>s</b>, <b>x</b>,
|
|
<b>y</b>, or <b>˜</b> 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.</p>
|
|
|
|
<p>Repeated commands with associated motion commands shall repeat the motion command as well; however, any specified <i>count</i>
|
|
shall replace the <i>count</i>(s) that were originally specified to the repeated command or its associated motion command.</p>
|
|
|
|
<p>If the motion component of the repeated command is <b>f</b>, <b>F</b>, <b>t</b>, or <b>T</b>, the repeated command shall not set
|
|
the remembered search character for the <b>;</b> and <b>,</b> commands.</p>
|
|
|
|
<p>If the repeated command is <b>p</b> or <b>P</b>, 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.</p>
|
|
|
|
<p>If the repeated character is a text input command, the input text associated with that command is repeated literally:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>Input characters are neither macro or abbreviation-expanded.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Input characters are not interpreted in any special way with the exception that <newline>, <carriage-return>, and
|
|
<control>-T behave as described in <a href="#tag_04_167_13_88">Input Mode Commands in vi</a> .</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<p><i>Current line</i>: Set as described for the repeated command.</p>
|
|
|
|
<p><i>Current column</i>: Set as described for the repeated command.</p>
|
|
|
|
<h5><a name="tag_04_167_13_36"></a>Find Regular Expression</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt>/
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>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 <i>vi</i> are described in <a href=
|
|
"ex.html#tag_04_45_13_58"><i>Regular Expressions in ex</i></a> .</p>
|
|
|
|
<p>Otherwise, the line shall be interpreted as one or more regular expressions, optionally followed by an address offset or a
|
|
<i>vi</i> <b>z</b> command.</p>
|
|
|
|
<p>If the regular expression is not the last regular expression on the line, or if a line offset or <b>z</b> command is specified,
|
|
the regular expression shall be terminated by an unescaped <tt>'/'</tt> 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 <tt>'/'</tt> 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.</p>
|
|
|
|
<p>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 <b>wrapscan</b> 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.</p>
|
|
|
|
<p>An optional address offset (see <a href="ex.html#tag_04_45_13_02"><i>Addressing in ex</i></a> ) can be specified after the last
|
|
regular expression by including a trailing <tt>'/'</tt> 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.</p>
|
|
|
|
<p>If not used as a motion command, an optional <b>z</b> command (see <a href="#tag_04_167_13_86">Redraw Window</a> ) can be
|
|
specified after the last regular expression by including a trailing <tt>'/'</tt> character after the regular expression, zero or
|
|
more <blank>s, a <tt>'z'</tt> , zero or more <blank>s, an optional new <b>window</b> edit option value, zero or more
|
|
<blank>s, and a location character. The effect shall be as if the <b>z</b> command was executed after the <b>/</b> command.
|
|
It shall be an error to follow the <b>z</b> command with any other characters than <blank>s.</p>
|
|
|
|
<p>The remembered search direction shall be set to forward.</p>
|
|
|
|
<p>If used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>It shall be an error if the last match references the same character in the edit buffer as the starting cursor.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>If any address offset is specified, the last match shall be adjusted by the specified offset as described previously.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<p><i>Current line</i>: If a match is found, set to the last matched line plus the address offset, if any; otherwise,
|
|
unchanged.</p>
|
|
|
|
<p><i>Current column</i>: 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.</p>
|
|
|
|
<h5><a name="tag_04_167_13_37"></a>Move to First Character in Line</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt>0 </tt> (zero)
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Move to the first character on the current line. The character <tt>'0'</tt> shall not be interpreted as a command if it is
|
|
immediately preceded by a digit.</p>
|
|
|
|
<p>If used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>If the cursor character is the first character in the line, it shall be an error.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The text region shall be from the character before the cursor character up to and including the first character in the line.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Any text copied to a buffer shall be in character mode.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<p><i>Current line</i>: Unchanged.</p>
|
|
|
|
<p><i>Current column</i>: The last column in which any portion of the first character in the line is displayed, or if the line is
|
|
empty, unchanged.</p>
|
|
|
|
<h5><a name="tag_04_167_13_38"></a>Execute an ex Command</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt>:
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Execute one or more <a href="../utilities/ex.html"><i>ex</i></a> commands.</p>
|
|
|
|
<p>If any portion of the screen other than the last line of the screen was overwritten by any <a href=
|
|
"../utilities/ex.html"><i>ex</i></a> command (except <b>shell</b>), <i>vi</i> 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.</p>
|
|
|
|
<p>If the next character entered is a <tt>':'</tt> , another <a href="../utilities/ex.html"><i>ex</i></a> command shall be accepted
|
|
and executed. Any other character shall cause the screen to be refreshed and <i>vi</i> shall return to command mode.</p>
|
|
|
|
<p><i>Current line</i>: As specified for the <a href="../utilities/ex.html"><i>ex</i></a> command.</p>
|
|
|
|
<p><i>Current column</i>: As specified for the <a href="../utilities/ex.html"><i>ex</i></a> command.</p>
|
|
|
|
<h5><a name="tag_04_167_13_39"></a>Repeat Find</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>;
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>This command shall be equivalent to the last <b>F</b>, <b>f</b>, <b>T</b>, or <b>t</b> command, with the specified <i>count</i>,
|
|
and with the same search character used for the last <b>F</b>, <b>f</b>, <b>T</b>, or <b>t</b> command. If there was no previous
|
|
<b>F</b>, <b>f</b>, <b>T</b>, or <b>t</b> command, it shall be an error.</p>
|
|
|
|
<h5><a name="tag_04_167_13_40"></a>Shift Left</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt><</tt> <i>motion</i>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If the motion command is the <b><</b> command repeated:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>If there are less than <i>count</i> -1 lines after the current line in the edit buffer, it shall be an error.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The text region shall be from the current line, up to and including the next <i>count</i> -1 lines.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>Shift any line in the text region specified by the <i>count</i> and motion command one shiftwidth (see the <a href=
|
|
"../utilities/ex.html"><i>ex</i></a> <b>shiftwidth</b> option) toward the start of the line, as described by the <a href=
|
|
"../utilities/ex.html"><i>ex</i></a> <b><</b> command. The unshifted lines shall be copied to the unnamed buffer in line
|
|
mode.</p>
|
|
|
|
<p><i>Current line</i>: 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.</p>
|
|
|
|
<p><i>Current column</i>: Set to non- <blank>.</p>
|
|
|
|
<h5><a name="tag_04_167_13_41"></a>Shift Right</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>></tt> <i>motion</i>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If the motion command is the <b>></b> command repeated:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>If there are less than <i>count</i> -1 lines after the current line in the edit buffer, it shall be an error.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The text region shall be from the current line, up to and including the next <i>count</i> -1 lines.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>Shift any line with characters in the text region specified by the <i>count</i> and motion command one shiftwidth (see the <a
|
|
href="../utilities/ex.html"><i>ex</i></a> <b>shiftwidth</b> option) away from the start of the line, as described by the <a href=
|
|
"../utilities/ex.html"><i>ex</i></a> <b>></b> command. The unshifted lines shall be copied into the unnamed buffer in line
|
|
mode.</p>
|
|
|
|
<p><i>Current line</i>: 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.</p>
|
|
|
|
<p><i>Current column</i>: Set to non- <blank>.</p>
|
|
|
|
<h5><a name="tag_04_167_13_42"></a>Scan Backwards for Regular Expression</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt>?
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Scan backwards; the <b>?</b> command shall be equivalent to the <b>/</b> command (see <a href="#tag_04_167_13_36">Find Regular
|
|
Expression</a> ) with the following exceptions:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>The input prompt shall be a <tt>'?'</tt> .</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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).</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The search direction shall be from the cursor toward the beginning of the edit buffer, and the <b>wrapscan</b> edit option shall
|
|
affect whether the search wraps to the end of the edit buffer and continues.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The remembered search direction shall be set to backward.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<h5><a name="tag_04_167_13_43"></a>Execute</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt>@</tt><i>buffer</i>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If the <i>buffer</i> is specified as <b>@</b>, the last buffer executed shall be used. If no previous buffer has been executed,
|
|
it shall be an error.</p>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>If a <i>count</i> is specified, behave as if that count were entered as user input before the characters from the <b>@</b>
|
|
buffer were entered.</p>
|
|
|
|
<p><i>Current line</i>: As specified for the individual commands.</p>
|
|
|
|
<p><i>Current column</i>: As specified for the individual commands.</p>
|
|
|
|
<h5><a name="tag_04_167_13_44"></a>Reverse Case</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>˜
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Reverse the case of the current character and the next <i>count</i> -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.</p>
|
|
|
|
<p>If there are less than <i>count</i> -1 characters after the cursor in the edit buffer, <i>count</i> shall be adjusted to the
|
|
number of characters after the cursor in the edit buffer minus 1.</p>
|
|
|
|
<p>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.</p>
|
|
|
|
<p><i>Current line</i>: Set to the line including the ( <i>count</i>-1)th character after the cursor.</p>
|
|
|
|
<p><i>Current column</i>: Set to the last column in which any portion of the ( <i>count</i>-1)th character after the cursor is
|
|
displayed.</p>
|
|
|
|
<h5><a name="tag_04_167_13_45"></a>Append</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>a
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Enter text input mode after the current cursor position. No characters already in the edit buffer shall be affected by this
|
|
command. A <i>count</i> shall cause the input text to be appended <i>count</i> -1 more times to the end of the input.</p>
|
|
|
|
<p><i>Current line/column</i>: As specified for the text input commands (see <a href="#tag_04_167_13_88">Input Mode Commands in
|
|
vi</a> ).</p>
|
|
|
|
<h5><a name="tag_04_167_13_46"></a>Append at End-of-Line</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>A
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>This command shall be equivalent to the <i>vi</i> command:</p>
|
|
|
|
<pre>
|
|
<tt>$</tt> <b>[</b> <i>count</i> <b>]</b> <tt>a
|
|
</tt>
|
|
</pre>
|
|
|
|
<p>(see <a href="#tag_04_167_13_45">Append</a> ).</p>
|
|
|
|
<h5><a name="tag_04_167_13_47"></a>Move Backward to Preceding Word</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>b
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>With the exception that words are used as the delimiter instead of bigwords, this command shall be equivalent to the <b>B</b>
|
|
command.</p>
|
|
|
|
<h5><a name="tag_04_167_13_48"></a>Move Backward to Preceding Bigword</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>B
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>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
|
|
<i>count</i> bigwords begin between the cursor and the start of the edit buffer, <i>count</i> shall be adjusted to the number of
|
|
bigword beginnings between the cursor and the start of the edit buffer.</p>
|
|
|
|
<p>If used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>The text region shall be from the first character of the <i>count</i>th previous bigword beginning up to but not including the
|
|
cursor character.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Any text copied to a buffer shall be in character mode.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<p><i>Current line</i>: Set to the line containing the <i>current column</i>.</p>
|
|
|
|
<p><i>Current column</i>: Set to the last column upon which any part of the first character of the <i>count</i>th previous bigword
|
|
is displayed.</p>
|
|
|
|
<h5><a name="tag_04_167_13_49"></a>Change</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>buffer</i><b>][</b><i>count</i><b>]</b> <tt>c</tt> <i>motion</i>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If the motion command is the <b>c</b> command repeated:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>The buffer text shall be in line mode.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>If there are less than <i>count</i> -1 lines after the current line in the edit buffer, it shall be an error.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The text region shall be from the current line up to and including the next <i>count</i> -1 lines.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>Otherwise, the buffer text mode and text region shall be as specified by the motion command.</p>
|
|
|
|
<p>The replaced text shall be copied into <i>buffer</i>, 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.</p>
|
|
|
|
<p>If the buffer text is in line mode:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>If the <b>autoindent</b> edit option is set, <b>autoindent</b> characters equal to the <b>autoindent</b> characters on the first
|
|
line deleted shall be inserted as if entered by the user.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>Otherwise, if characters from more than one line are in the region of text:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>The text shall be deleted.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>Otherwise:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>If the glyph for <tt>'$'</tt> is smaller than the region, the end of the region shall be marked with a <tt>'$'</tt> .</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The editor shall enter text input mode, overwriting the region of text.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p><i>Current line/column</i>: As specified for the text input commands (see <a href="#tag_04_167_13_88">Input Mode Commands in
|
|
vi</a> ).</p>
|
|
|
|
<h5><a name="tag_04_167_13_50"></a>Change to End-of-Line</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>buffer</i><b>][</b><i>count</i><b>]</b> <tt>C
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>This command shall be equivalent to the <i>vi</i> command:</p>
|
|
|
|
<pre>
|
|
<b>[</b><i>buffer</i><b>][</b><i>count</i><b>]</b> <tt>c$
|
|
</tt>
|
|
</pre>
|
|
|
|
<p>See the <b>c</b> command.</p>
|
|
|
|
<h5><a name="tag_04_167_13_51"></a>Delete</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>buffer</i><b>][</b><i>count</i><b>]</b> <tt>d</tt> <i>motion</i>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If the motion command is the <b>d</b> command repeated:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>The buffer text shall be in line mode.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>If there are less than <i>count</i> -1 lines after the current line in the edit buffer, it shall be an error.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The text region shall be from the current line up to and including the next <i>count</i> -1 lines.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>Otherwise, the buffer text mode and text region shall be as specified by the motion command.</p>
|
|
|
|
<p>If in open mode, and the current line is deleted, and the line remains on the display, an <tt>'@'</tt> character shall be
|
|
displayed as the first glyph of that line.</p>
|
|
|
|
<p>Delete the region of text into <i>buffer</i>, 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.</p>
|
|
|
|
<p><i>Current line</i>: 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.</p>
|
|
|
|
<p><i>Current column</i>:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>If the line is empty, set to column position 1.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Otherwise, if the buffer text is in line mode or the motion was from the cursor toward the end of the edit buffer:</p>
|
|
|
|
<ol type="a">
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Otherwise, set to the last column in which any portion of any character in the line is displayed.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Otherwise, set to the last column in which any portion of any character in the line is displayed.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<h5><a name="tag_04_167_13_52"></a>Delete to End-of-Line</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>buffer</i><b>]</b> <tt>D
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Delete the text from the current position to the end of the current line; equivalent to the <i>vi</i> command:</p>
|
|
|
|
<pre>
|
|
<b>[</b><i>buffer</i><b>]</b> <tt>d$
|
|
</tt>
|
|
</pre>
|
|
|
|
<h5><a name="tag_04_167_13_53"></a>Move to End-of-Word</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>e
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>With the exception that words are used instead of bigwords as the delimiter, this command shall be equivalent to the <b>E</b>
|
|
command.</p>
|
|
|
|
<h5><a name="tag_04_167_13_54"></a>Move to End-of-Bigword</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>E
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If the edit buffer is empty it shall be an error. If less than <i>count</i> bigwords end between the cursor and the end of the
|
|
edit buffer, <i>count</i> shall be adjusted to the number of bigword endings between the cursor and the end of the edit buffer.</p>
|
|
|
|
<p>If used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>The text region shall be from the last character of the <i>count</i>th next bigword up to and including the cursor
|
|
character.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Any text copied to a buffer shall be in character mode.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<p><i>Current line</i>: Set to the line containing the current column.</p>
|
|
|
|
<p><i>Current column</i>: Set to the last column upon which any part of the last character of the <i>count</i>th next bigword is
|
|
displayed.</p>
|
|
|
|
<h5><a name="tag_04_167_13_55"></a>Find Character in Current Line (Forward)</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>f</tt> <i>character</i>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>It shall be an error if <i>count</i> occurrences of the character do not occur after the cursor in the line.</p>
|
|
|
|
<p>If used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>The text range shall be from the cursor character up to and including the <i>count</i>th occurrence of the specified character
|
|
after the cursor.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Any text copied to a buffer shall be in character mode.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<p><i>Current line</i>: Unchanged.</p>
|
|
|
|
<p><i>Current column</i>: Set to the last column in which any portion of the <i>count</i>th occurrence of the specified character
|
|
after the cursor appears in the line.</p>
|
|
|
|
<h5><a name="tag_04_167_13_56"></a>Find Character in Current Line (Reverse)</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>F</tt> <i>character</i>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>It shall be an error if <i>count</i> occurrences of the character do not occur before the cursor in the line.</p>
|
|
|
|
<p>If used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>The text region shall be from the <i>count</i>th occurrence of the specified character before the cursor, up to, but not
|
|
including the cursor character.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Any text copied to a buffer shall be in character mode.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<p><i>Current line</i>: Unchanged.</p>
|
|
|
|
<p><i>Current column</i>: Set to the last column in which any portion of the <i>count</i>th occurrence of the specified character
|
|
before the cursor appears in the line.</p>
|
|
|
|
<h5><a name="tag_04_167_13_57"></a>Move to Line</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>G
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If <i>count</i> is not specified, it shall default to the last line of the edit buffer. If <i>count</i> is greater than the last
|
|
line of the edit buffer, it shall be an error.</p>
|
|
|
|
<p>If used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>The text region shall be from the cursor line up to and including the specified line.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Any text copied to a buffer shall be in line mode.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<p><i>Current line</i>: Set to <i>count</i> if <i>count</i> is specified; otherwise, the last line.</p>
|
|
|
|
<p><i>Current column</i>: Set to non- <blank>.</p>
|
|
|
|
<h5><a name="tag_04_167_13_58"></a>Move to Top of Screen</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>H
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If the beginning of the line <i>count</i> greater than the first line of which any portion appears on the display does not
|
|
exist, it shall be an error.</p>
|
|
|
|
<p>If used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>If in open mode, the text region shall be the current line.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Otherwise, the text region shall be from the starting line up to and including (the first line of the display + <i>count</i>
|
|
-1).</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Any text copied to a buffer shall be in line mode.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<p>If in open mode, this command shall set the current column to non- <blank> and do nothing else.</p>
|
|
|
|
<p>Otherwise, it shall set the current line and current column as follows.</p>
|
|
|
|
<p><i>Current line</i>: Set to (the first line of the display + <i>count</i> -1).</p>
|
|
|
|
<p><i>Current column</i>: Set to non- <blank>.</p>
|
|
|
|
<h5><a name="tag_04_167_13_59"></a>Insert Before Cursor</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>i
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Enter text input mode before the current cursor position. No characters already in the edit buffer shall be affected by this
|
|
command. A <i>count</i> shall cause the input text to be appended <i>count</i> -1 more times to the end of the input.</p>
|
|
|
|
<p><i>Current line/column</i>: As specified for the text input commands (see <a href="#tag_04_167_13_88">Input Mode Commands in
|
|
vi</a> ).</p>
|
|
|
|
<h5><a name="tag_04_167_13_60"></a>Insert at Beginning of Line</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>I
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>This command shall be equivalent to the <i>vi</i> command ^[ <i>count</i>] <b>i</b>.</p>
|
|
|
|
<h5><a name="tag_04_167_13_61"></a>Join</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>J
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If the current line is the last line in the edit buffer, it shall be an error.</p>
|
|
|
|
<p>This command shall be equivalent to the <a href="../utilities/ex.html"><i>ex</i></a> <b>join</b> command with no addresses, and
|
|
an <a href="../utilities/ex.html"><i>ex</i></a> command <i>count</i> value of 1 if <i>count</i> was not specified or if a
|
|
<i>count</i> of 1 was specified, and an <a href="../utilities/ex.html"><i>ex</i></a> command <i>count</i> value of <i>count</i> -1
|
|
for any other value of <i>count</i>, except that the current line and column shall be set as follows.</p>
|
|
|
|
<p><i>Current line</i>: Unchanged.</p>
|
|
|
|
<p><i>Current column</i>: 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.</p>
|
|
|
|
<h5><a name="tag_04_167_13_62"></a>Move to Bottom of Screen</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>L
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If the beginning of the line <i>count</i> less than the last line of which any portion appears on the display does not exist, it
|
|
shall be an error.</p>
|
|
|
|
<p>If used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>If in open mode, the text region shall be the current line.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Otherwise, the text region shall include all lines from the starting cursor line to (the last line of the display -(
|
|
<i>count</i> -1)).</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Any text copied to a buffer shall be in line mode.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>If in open mode, this command shall set the current column to non- <blank> and do nothing else.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Otherwise, it shall set the current line and current column as follows.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p><i>Current line</i>: Set to (the last line of the display -( <i>count</i> -1)).</p>
|
|
|
|
<p><i>Current column</i>: Set to non- <blank>.</p>
|
|
|
|
<h5><a name="tag_04_167_13_63"></a>Mark Position</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt>m</tt> <i>letter</i>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>This command shall be equivalent to the <a href="../utilities/ex.html"><i>ex</i></a> <b>mark</b> command with the specified
|
|
character as an argument.</p>
|
|
|
|
<h5><a name="tag_04_167_13_64"></a>Move to Middle of Screen</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt>M
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>The middle line of the display shall be calculated as follows:</p>
|
|
|
|
<pre>
|
|
<tt>(the top line of the display) + (((number of lines displayed) +1) /2) -1
|
|
</tt>
|
|
</pre>
|
|
|
|
<p>If used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>If in open mode, the text region shall be the current line.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Otherwise, the text region shall include all lines from the starting cursor line up to and including the middle line of the
|
|
display.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Any text copied to a buffer shall be in line mode.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<p>If in open mode, this command shall set the current column to non- <blank> and do nothing else.</p>
|
|
|
|
<p>Otherwise, it shall set the current line and current column as follows.</p>
|
|
|
|
<p><i>Current line</i>: Set to the middle line of the display.</p>
|
|
|
|
<p><i>Current column</i>: Set to non- <blank>.</p>
|
|
|
|
<h5><a name="tag_04_167_13_65"></a>Repeat Regular Expression Find (Forward)</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt>n
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If the remembered search direction was forward, the <b>n</b> command shall be equivalent to the <i>vi</i> <b>/</b> command with
|
|
no characters entered by the user. Otherwise, it shall be equivalent to the <i>vi</i> <b>?</b> command with no characters entered
|
|
by the user.</p>
|
|
|
|
<p>If the <b>n</b> command is used as a motion command for the <b>!</b> 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 <tt>'!'</tt> character as the text input.</p>
|
|
|
|
<h5><a name="tag_04_167_13_66"></a>Repeat Regular Expression Find (Reverse)</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt>N
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Scan for the next match of the last pattern given to <b>/</b> or <b>?</b>, but in the reverse direction; this is the reverse of
|
|
<b>n</b>.</p>
|
|
|
|
<p>If the remembered search direction was forward, the <b>N</b> command shall be equivalent to the <i>vi</i> <b>?</b> command with
|
|
no characters entered by the user. Otherwise, it shall be equivalent to the <i>vi</i> <b>/</b> command with no characters entered
|
|
by the user. If the <b>N</b> command is used as a motion command for the <b>!</b> 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 <b>!</b> character as the text input.</p>
|
|
|
|
<h5><a name="tag_04_167_13_67"></a>Insert Empty Line Below</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt>o
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Enter text input mode in a new line appended after the current line. A <i>count</i> shall cause the input text to be appended
|
|
<i>count</i> -1 more times to the end of the already added text, each time starting on a new, appended line.</p>
|
|
|
|
<p><i>Current line/column</i>: As specified for the text input commands (see <a href="#tag_04_167_13_88">Input Mode Commands in
|
|
vi</a> ).</p>
|
|
|
|
<h5><a name="tag_04_167_13_68"></a>Insert Empty Line Above</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt>O
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Enter text input mode in a new line inserted before the current line. A <i>count</i> shall cause the input text to be appended
|
|
<i>count</i> -1 more times to the end of the already added text, each time starting on a new, appended line.</p>
|
|
|
|
<p><i>Current line/column</i>: As specified for the text input commands (see <a href="#tag_04_167_13_88">Input Mode Commands in
|
|
vi</a> ).</p>
|
|
|
|
<h5><a name="tag_04_167_13_69"></a>Put from Buffer Following</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>buffer</i><b>]</b> <tt>p
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If no <i>buffer</i> is specified, the unnamed buffer shall be used.</p>
|
|
|
|
<p>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 <i>count</i> shall cause the buffer text to be appended <i>count</i> -1 more times to the end of
|
|
the already added text, each time starting on a new, appended line.</p>
|
|
|
|
<p>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 <i>count</i> shall cause the buffer text to be
|
|
appended <i>count</i> -1 more times to the end of the already added text, each time starting after the last added character.</p>
|
|
|
|
<p><i>Current line</i>: If the buffer text is in line mode, set the line to line +1; otherwise, unchanged.</p>
|
|
|
|
<p><i>Current column</i>: If the buffer text is in line mode:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If the buffer text is in character mode:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Otherwise, set to the first column on which any portion of the first character from the buffer is displayed.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<h5><a name="tag_04_167_13_70"></a>Put from Buffer Before</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>buffer</i><b>]</b> <tt>P
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If no <i>buffer</i> is specified, the unnamed buffer shall be used.</p>
|
|
|
|
<p>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 <i>count</i> shall cause the buffer text to be appended <i>count</i> -1 more times to the end of
|
|
the already added text, each time starting on a new, appended line.</p>
|
|
|
|
<p>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 <i>count</i> shall cause the buffer text to
|
|
be appended <i>count</i> -1 more times to the end of the already added text, each time starting after the last added character.</p>
|
|
|
|
<p><i>Current line</i>: Unchanged.</p>
|
|
|
|
<p><i>Current column</i>: If the buffer text is in line mode:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If the buffer text is in character mode:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Otherwise, set to the first column on which any portion of the first character from the buffer is displayed.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<h5><a name="tag_04_167_13_71"></a>Enter ex Mode</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt>Q
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Leave visual or open mode and enter <a href="../utilities/ex.html"><i>ex</i></a> command mode.</p>
|
|
|
|
<p><i>Current line</i>: Unchanged.</p>
|
|
|
|
<p><i>Current column</i>: Unchanged.</p>
|
|
|
|
<h5><a name="tag_04_167_13_72"></a>Replace Character</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>r</tt> <i>character</i>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Replace the <i>count</i> characters at and after the cursor with the specified character. If there are less than <i>count</i>
|
|
non- <newline>s at and after the cursor on the line, it shall be an error.</p>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>If character is <ESC>, no replacement shall be made and the current line and current column shall be unchanged.</p>
|
|
|
|
<p>If character is <carriage-return> or <newline>, <i>count</i> new lines shall be appended to the current line. All
|
|
but the last of these lines shall be empty. <i>count</i> 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 <b>autoindent</b> edit option
|
|
is set, they shall be preceded by the same number of <b>autoindent</b> characters found on the line from which the command was
|
|
executed.</p>
|
|
|
|
<p><i>Current line</i>: Unchanged unless the replacement character is a <carriage-return> or <newline>, in which case
|
|
it shall be set to line + <i>count</i>.</p>
|
|
|
|
<p><i>Current column</i>: 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>.</p>
|
|
|
|
<h5><a name="tag_04_167_13_73"></a>Replace Characters</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt>R
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Enter text input mode at the current cursor position possibly replacing text on the current line. A <i>count</i> shall cause the
|
|
input text to be appended <i>count</i> -1 more times to the end of the input.</p>
|
|
|
|
<p><i>Current line/column</i>: As specified for the text input commands (see <a href="#tag_04_167_13_88">Input Mode Commands in
|
|
vi</a> ).</p>
|
|
|
|
<h5><a name="tag_04_167_13_74"></a>Substitute Character</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>buffer</i><b>][</b><i>count</i><b>]</b> <tt>s
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>This command shall be equivalent to the <i>vi</i> command:</p>
|
|
|
|
<pre>
|
|
<b>[</b><i>buffer</i><b>][</b><i>count</i><b>]</b> <tt>c<space>
|
|
</tt>
|
|
</pre>
|
|
|
|
<h5><a name="tag_04_167_13_75"></a>Substitute Lines</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>buffer</i><b>][</b><i>count</i><b>]</b> <tt>S
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>This command shall be equivalent to the <i>vi</i> command:</p>
|
|
|
|
<pre>
|
|
<b>[</b><i>buffer</i><b>][</b><i>count</i><b>]</b> <tt>c_
|
|
</tt>
|
|
</pre>
|
|
|
|
<h5><a name="tag_04_167_13_76"></a>Move Cursor to Before Character (Forward)</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>t</tt> <i>character</i>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>It shall be an error if <i>count</i> occurrences of the character do not occur after the cursor in the line.</p>
|
|
|
|
<p>If used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>The text region shall be from the cursor up to but not including the <i>count</i>th occurrence of the specified character after
|
|
the cursor.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Any text copied to a buffer shall be in character mode.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<p><i>Current line</i>: Unchanged.</p>
|
|
|
|
<p><i>Current column</i>: Set to the last column in which any portion of the character before the <i>count</i>th occurrence of the
|
|
specified character after the cursor appears in the line.</p>
|
|
|
|
<h5><a name="tag_04_167_13_77"></a>Move Cursor to After Character (Reverse)</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>T</tt> <i>character</i>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>It shall be an error if <i>count</i> occurrences of the character do not occur before the cursor in the line.</p>
|
|
|
|
<p>If used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>If the character before the cursor is the specified character, it shall be an error.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The text region shall be from the character before the cursor up to but not including the <i>count</i>th occurrence of the
|
|
specified character before the cursor.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Any text copied to a buffer shall be in character mode.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<p><i>Current line</i>: Unchanged.</p>
|
|
|
|
<p><i>Current column</i>: Set to the last column in which any portion of the character after the <i>count</i>th occurrence of the
|
|
specified character before the cursor appears in the line.</p>
|
|
|
|
<h5><a name="tag_04_167_13_78"></a>Undo</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt>u
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>This command shall be equivalent to the <a href="../utilities/ex.html"><i>ex</i></a> <b>undo</b> command except that the current
|
|
line and current column shall be set as follows:</p>
|
|
|
|
<p><i>Current line</i>: 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.</p>
|
|
|
|
<p><i>Current column</i>: If undoing an <a href="../utilities/ex.html"><i>ex</i></a> command, set to the first non-
|
|
<blank>.</p>
|
|
|
|
<p>Otherwise, if undoing a text input command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>If the command was a <b>C</b>, <b>c</b>, <b>O</b>, <b>o</b>, <b>R</b>, <b>S</b>, or <b>s</b> command, the current column shall
|
|
be set to the value it held when the text input command was entered.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>Otherwise, if a single line was modified (that is, not added or deleted) by the <b>u</b> command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>If text was added or changed, set to the last column in which any portion of the first character added or changed is
|
|
displayed.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>Otherwise, set to non- <blank>.</p>
|
|
|
|
<h5><a name="tag_04_167_13_79"></a>Undo Current Line</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt>U
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Restore the current line to its state immediately before the most recent time that it became the current line.</p>
|
|
|
|
<p><i>Current line</i>: Unchanged.</p>
|
|
|
|
<p><i>Current column</i>: Set to the first column in the line in which any portion of the first character in the line is
|
|
displayed.</p>
|
|
|
|
<h5><a name="tag_04_167_13_80"></a>Move to Beginning of Word</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>w
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>With the exception that words are used as the delimiter instead of bigwords, this command shall be equivalent to the <b>W</b>
|
|
command.</p>
|
|
|
|
<h5><a name="tag_04_167_13_81"></a>Move to Beginning of Bigword</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>W
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If the edit buffer is empty, it shall be an error. If there are less than <i>count</i> bigwords between the cursor and the end
|
|
of the edit buffer, <i>count</i> shall be adjusted to move the cursor to the last bigword in the edit buffer.</p>
|
|
|
|
<p>If used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>If the associated command is <b>c</b>, <i>count</i> 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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>If there are less than <i>count</i> 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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>If there are <blank>s or an end-of-line that precede the <i>count</i>th bigword, and the associated command is <b>c</b>,
|
|
the region of text shall be up to and including the last character before the preceding <blank>s or end-of-line.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>If there are <blank>s or an end-of-line that precede the bigword, and the associated command is <b>d</b> or <b>y</b>, the
|
|
region of text shall be up to and including the last <blank> before the start of the bigword or end-of-line.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Any text copied to a buffer shall be in character mode.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If not used as a motion command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>If the cursor is on the last character of the edit buffer, it shall be an error.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p><i>Current line</i>: Set to the line containing the current column.</p>
|
|
|
|
<p><i>Current column</i>: Set to the last column in which any part of the first character of the <i>count</i>th next bigword is
|
|
displayed.</p>
|
|
|
|
<h5><a name="tag_04_167_13_82"></a>Delete Character at Cursor</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>buffer</i><b>][</b><i>count</i><b>]</b> <tt>x
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Delete the <i>count</i> characters at and after the current character into <i>buffer</i>, if specified, and into the unnamed
|
|
buffer.</p>
|
|
|
|
<p>If the line is empty, it shall be an error. If there are less than <i>count</i> non- <newline>s at and after the cursor on
|
|
the current line, <i>count</i> shall be adjusted to the number of non- <newline>s at and after the cursor.</p>
|
|
|
|
<p><i>Current line</i>: Unchanged.</p>
|
|
|
|
<p><i>Current column</i>: If the line is empty, set to column position 1. Otherwise, if there were <i>count</i> 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.</p>
|
|
|
|
<h5><a name="tag_04_167_13_83"></a>Delete Character Before Cursor</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>buffer</i><b>][</b><i>count</i><b>]</b> <tt>X
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Delete the <i>count</i> characters before the current character into <i>buffer</i>, if specified, and into the unnamed
|
|
buffer.</p>
|
|
|
|
<p>If there are no characters before the current character on the current line, it shall be an error. If there are less than
|
|
<i>count</i> previous characters on the current line, <i>count</i> shall be adjusted to the number of previous characters on the
|
|
line.</p>
|
|
|
|
<p><i>Current line</i>: Unchanged.</p>
|
|
|
|
<p><i>Current column</i>: Set to (current column - the width of the deleted characters).</p>
|
|
|
|
<h5><a name="tag_04_167_13_84"></a>Yank</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>buffer</i><b>][</b><i>count</i><b>]</b> <tt>y</tt> <i>motion</i>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>Copy (yank) the region of text into <i>buffer</i>, if specified, and into the unnamed buffer.</p>
|
|
|
|
<p>If the motion command is the <b>y</b> command repeated:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>The buffer shall be in line mode.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>If there are less than <i>count</i> -1 lines after the current line in the edit buffer, it shall be an error.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The text region shall be from the current line up to and including the next <i>count</i> -1 lines.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>Otherwise, the buffer text mode and text region shall be as specified by the motion command.</p>
|
|
|
|
<p><i>Current line</i>: 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.</p>
|
|
|
|
<p><i>Current column</i>:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>If the motion was from the current cursor position toward the end of the edit buffer, unchanged.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Otherwise, if the current line is empty, set to column position 1.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<h5><a name="tag_04_167_13_85"></a>Yank Current Line</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>buffer</i><b>][</b><i>count</i><b>]</b> <tt>Y
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>This command shall be equivalent to the <i>vi</i> command:</p>
|
|
|
|
<pre>
|
|
<b>[</b><i>buffer</i><b>][</b><i>count</i><b>]</b> <tt>y_
|
|
</tt>
|
|
</pre>
|
|
|
|
<h5><a name="tag_04_167_13_86"></a>Redraw Window</h5>
|
|
|
|
<p>If in open mode, the <b>z</b> command shall have the Synopsis:</p>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>count</i><b>]</b> <tt>z
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If <i>count</i> is not specified, it shall default to the <b>window</b> edit option -1. The <b>z</b> command shall be equivalent
|
|
to the <a href="../utilities/ex.html"><i>ex</i></a> <b>z</b> command, with a type character of <b>=</b> and a <i>count</i> of
|
|
<i>count</i> -2, except that the current line and current column shall be set as follows, and the <b>window</b> edit option shall
|
|
not be affected. If the calculation for the <i>count</i> argument would result in a negative number, the <i>count</i> argument to
|
|
the <a href="../utilities/ex.html"><i>ex</i></a> <b>z</b> command shall be zero. A blank line shall be written after the last line
|
|
is written.</p>
|
|
|
|
<p><i>Current line</i>: Unchanged.</p>
|
|
|
|
<p><i>Current column</i>: Unchanged.</p>
|
|
|
|
<p>If not in open mode, the <b>z</b> command shall have the following Synopsis:</p>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<b>[</b><i>line</i><b>]</b> <tt>z</tt> <b>[</b><i>count</i><b>]</b> <i>character</i>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If <i>line</i> is not specified, it shall default to the current line. If <i>line</i> 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.</p>
|
|
|
|
<p>If <i>count</i> is specified, the value of the <b>window</b> edit option shall be set to <i>count</i> (as described in the <a
|
|
href="../utilities/ex.html"><i>ex</i></a> <b>window</b> command), and the screen shall be redrawn.</p>
|
|
|
|
<p><i>line</i> shall be placed as specified by the following characters:</p>
|
|
|
|
<dl compact>
|
|
<dt><newline>, <carriage-return></dt>
|
|
|
|
<dd><br>
|
|
Place the beginning of the line on the first line of the display.</dd>
|
|
|
|
<dt><tt>.</tt></dt>
|
|
|
|
<dd>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 <b>M</b> command.</dd>
|
|
|
|
<dt><tt>-</tt></dt>
|
|
|
|
<dd>Place an unspecified portion of the line on the last line of the display.</dd>
|
|
|
|
<dt><tt>+</tt></dt>
|
|
|
|
<dd>If <i>line</i> was specified, equivalent to the <newline> case. If <i>line</i> 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.</dd>
|
|
|
|
<dt><tt>^</tt></dt>
|
|
|
|
<dd>If <i>line</i> 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.
|
|
|
|
<p>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.</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p><i>Current line</i>: If <i>line</i> and the <tt>'^'</tt> character were specified:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>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).</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Otherwise, set to the last line of the display.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If <i>line</i> and the <tt>'+'</tt> character were specified, set to the first line of the display.</p>
|
|
|
|
<p>Otherwise, if <i>line</i> was specified, set to <i>line</i>.</p>
|
|
|
|
<p>Otherwise, unchanged.</p>
|
|
|
|
<p><i>Current column</i>: Set to non- <blank>.</p>
|
|
|
|
<h5><a name="tag_04_167_13_87"></a>Exit</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt>ZZ
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>This command shall be equivalent to the <a href="../utilities/ex.html"><i>ex</i></a> <b>xit</b> command with no addresses,
|
|
trailing <b>!</b>, or filename (see the <a href="../utilities/ex.html"><i>ex</i></a> <b>xit</b> command).</p>
|
|
|
|
<h5><a name="tag_04_167_13_88"></a>Input Mode Commands in vi</h5>
|
|
|
|
<p>In text input mode, the current line shall consist of zero or more of the following categories, plus the terminating
|
|
<newline>:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>Characters preceding the text input entry point</p>
|
|
|
|
<p>Characters in this category shall not be modified during text input mode.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p><b>autoindent</b> characters</p>
|
|
|
|
<p><b>autoindent</b> 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, <b>O</b> or <b>o</b> (see the <a href="../utilities/ex.html"><i>ex</i></a> <b>autoindent</b> command), as if entered
|
|
by the user.</p>
|
|
|
|
<p>It shall be possible to erase <b>autoindent</b> 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 <b>autoindent</b> character
|
|
turns the glyph into erase-columns and deletes the character from the edit buffer, but does not change its representation on the
|
|
screen.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Text input characters</p>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>Each text input character entered by the user (that does not have a special meaning) shall be treated as follows:</p>
|
|
|
|
<ol type="a">
|
|
<li>
|
|
<p>The text input character shall be appended to the last character in the edit buffer from the first, second, or third
|
|
categories.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>If there are no erase-columns on the screen, the text input command was the <b>R</b> 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
|
|
<b>slowopen</b> edit option is not set, the corresponding glyph on the screen shall become erase-columns.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.)</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>If additional display line columns are needed to display the text input character:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>If the <b>slowopen</b> edit option is set, the text input characters shall be displayed on subsequent display line columns,
|
|
overwriting any characters displayed in those columns.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Erase-columns</p>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>Erase-columns are initially the region of text specified by the <b>c</b> command (see <a href="#tag_04_167_13_49">Change</a> );
|
|
however, erasing <b>autoindent</b> or text input characters causes the glyphs of the erased characters to be treated as
|
|
erase-columns.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Characters following the text region for the <b>c</b> command, or the text input entry point for all other commands</p>
|
|
|
|
<p>Characters in this category shall not be modified during text input mode, except as specified in category 3.b. for the <b>R</b>
|
|
text input command, or as <blank>s deleted when a <newline> or <carriage-return> is entered.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>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:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>On the first column that displays any part of the first erase-column, if one exists</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Otherwise, if the <b>slowopen</b> edit option is set, on the first display line column after the last character in the first,
|
|
second, or third categories, if one exists</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Otherwise, the first column that displays any part of the first character in the fifth category, if one exists</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Otherwise, the display line column after the last character in the first, second, or third categories, if one exists</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Otherwise, on column position 1</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>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 <b>slowopen</b> edit option is not set, the current cursor character shall always be
|
|
updated.</p>
|
|
|
|
<p>The following specifications are for command characters entered during text input mode.</p>
|
|
|
|
<h5><a name="tag_04_167_13_89"></a>NUL</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt>NUL
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>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.</p>
|
|
|
|
<h5><a name="tag_04_167_13_90"></a><control>-D</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt><control>-D
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>The <control>-D character shall have no special meaning when in text input mode for a line-oriented command (see <a href=
|
|
"#tag_04_167_13_02">Command Descriptions in vi</a> ).</p>
|
|
|
|
<p>This command need not be supported on block-mode terminals.</p>
|
|
|
|
<p>If the cursor does not follow an <b>autoindent</b> character, or an <b>autoindent</b> character and a <tt>'0'</tt> or
|
|
<tt>'^'</tt> character:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>If the cursor is in column position 1, the <control>-D character shall be discarded and no further action taken.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Otherwise, the <control>-D character shall have no special meaning.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>If the last input character was a <tt>'0'</tt> , the cursor shall be moved to column position 1.</p>
|
|
|
|
<p>Otherwise, if the last input character was a <tt>'^'</tt> , the cursor shall be moved to column position 1. In addition, the
|
|
<b>autoindent</b> level for the next input line shall be derived from the same line from which the <b>autoindent</b> level for the
|
|
current input line was derived.</p>
|
|
|
|
<p>Otherwise, the cursor shall be moved back to the column after the previous shiftwidth (see the <a href=
|
|
"../utilities/ex.html"><i>ex</i></a> <b>shiftwidth</b> command) boundary.</p>
|
|
|
|
<p>All of the glyphs on columns between the starting cursor position and (inclusively) the ending cursor position shall become
|
|
erase-columns as described in <a href="#tag_04_167_13_88">Input Mode Commands in vi</a> .</p>
|
|
|
|
<p><i>Current line</i>: Unchanged.</p>
|
|
|
|
<p><i>Current column</i>: Set to 1 if the <control>-D was preceded by a <tt>'^'</tt> or <tt>'0'</tt> ; otherwise, set to
|
|
(column -1) -((column -2) % <b>shiftwidth</b>).</p>
|
|
|
|
<h5><a name="tag_04_167_13_91"></a><control>-H</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt><control>-H
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>If there are characters other than <b>autoindent</b> characters that have been input on the current line before the cursor, the
|
|
cursor shall move back one character.</p>
|
|
|
|
<p>Otherwise, if there are <b>autoindent</b> 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 <b>autoindent</b> character.</p>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>Otherwise, it shall be an error.</p>
|
|
|
|
<p>All of the glyphs on columns between the starting cursor position and (inclusively) the ending cursor position shall become
|
|
erase-columns as described in <a href="#tag_04_167_13_88">Input Mode Commands in vi</a> .</p>
|
|
|
|
<p>The current erase character (see <a href="../utilities/stty.html"><i>stty</i></a>) 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.</p>
|
|
|
|
<p><i>Current line</i>: Unchanged, unless previously input lines are erased, in which case it shall be set to line -1.</p>
|
|
|
|
<p><i>Current column</i>: Set to the first column that displays any portion of the character backed up over.</p>
|
|
|
|
<h5><a name="tag_04_167_13_92"></a><newline></h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt><newline>
|
|
<br>
|
|
<carriage-return>
|
|
<br>
|
|
<control>-J
|
|
<br>
|
|
<control>-M
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>Otherwise, terminate the current line. If there are no characters other than <b>autoindent</b> characters on the line, all
|
|
characters on the line shall be discarded. Otherwise, it is unspecified whether the <b>autoindent</b> characters in the line are
|
|
modified by entering these characters.</p>
|
|
|
|
<p>Continue text input mode on a new line appended after the current line. If the <b>slowopen</b> 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.</p>
|
|
|
|
<p>If the <b>autoindent</b> edit option is set, an appropriate number of <b>autoindent</b> characters shall be added as a prefix to
|
|
the line as described by the <a href="../utilities/ex.html"><i>ex</i></a> <b>autoindent</b> edit option.</p>
|
|
|
|
<p>All columns after the cursor that are erase-columns (as described in <a href="#tag_04_167_13_88">Input Mode Commands in vi</a> )
|
|
shall be discarded.</p>
|
|
|
|
<p>If the <b>autoindent</b> edit option is set, all <blank>s immediately following the cursor shall be discarded.</p>
|
|
|
|
<p>All remaining characters after the cursor shall be transferred to the new line, positioned after any <b>autoindent</b>
|
|
characters.</p>
|
|
|
|
<p><i>Current line</i>: Set to current line +1.</p>
|
|
|
|
<p><i>Current column</i>: Set to the first column that displays any portion of the first character after the <b>autoindent</b>
|
|
characters on the new line, if any, or the first column position after the last <b>autoindent</b> character, if any, or column
|
|
position 1.</p>
|
|
|
|
<h5><a name="tag_04_167_13_93"></a><control>-T</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt><control>-T
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>The <control>-T character shall have no special meaning when in text input mode for a line-oriented command (see <a href=
|
|
"#tag_04_167_13_02">Command Descriptions in vi</a> ).</p>
|
|
|
|
<p>This command need not be supported on block-mode terminals.</p>
|
|
|
|
<p>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 <b>shiftwidth</b> (see the <a href="../utilities/ex.html"><i>ex</i></a> <b>shiftwidth</b> command) boundary.</p>
|
|
|
|
<p><i>Current line</i>: Unchanged.</p>
|
|
|
|
<p><i>Current column</i>: Set to <i>column</i> + <b>shiftwidth</b> - ((column -1) % <b>shiftwidth</b>).</p>
|
|
|
|
<h5><a name="tag_04_167_13_94"></a><control>-U</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt><control>-U
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If there are characters other than <b>autoindent</b> characters that have been input on the current line before the cursor, the
|
|
cursor shall move to the first character input after the <b>autoindent</b> characters.</p>
|
|
|
|
<p>Otherwise, if there are <b>autoindent</b> 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.</p>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>Otherwise, it shall be an error.</p>
|
|
|
|
<p>All of the glyphs on columns between the starting cursor position and (inclusively) the ending cursor position shall become
|
|
erase-columns as described in <a href="#tag_04_167_13_88">Input Mode Commands in vi</a> .</p>
|
|
|
|
<p>The current <i>kill</i> character (see <a href="../utilities/stty.html"><i>stty</i></a>) 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 <i>kill</i> character had been inserted instead of the backslash.</p>
|
|
|
|
<p><i>Current line</i>: Unchanged, unless previously input lines are erased, in which case it shall be set to line -1.</p>
|
|
|
|
<p><i>Current column</i>: Set to the first column that displays any portion of the last character backed up over.</p>
|
|
|
|
<h5><a name="tag_04_167_13_95"></a><control>-V</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt><control>-V
|
|
<br>
|
|
<control>-Q
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>For purposes of the display only, the editor shall behave as if a <tt>'^'</tt> character was entered, and the cursor shall be
|
|
positioned as if overwriting the <tt>'^'</tt> 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.</p>
|
|
|
|
<p><i>Current line</i>: Unchanged.</p>
|
|
|
|
<p><i>Current column</i>: Unchanged.</p>
|
|
|
|
<h5><a name="tag_04_167_13_96"></a><control>-W</h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt><control>-W
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If there are characters other than <b>autoindent</b> 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 <b>autoindent</b> characters.</p>
|
|
|
|
<p>Otherwise, if there are <b>autoindent</b> 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.</p>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>Otherwise, it shall be an error.</p>
|
|
|
|
<p>All of the glyphs on columns between the starting cursor position and (inclusively) the ending cursor position shall become
|
|
erase-columns as described in <a href="#tag_04_167_13_88">Input Mode Commands in vi</a> .</p>
|
|
|
|
<p><i>Current line</i>: Unchanged, unless previously input lines are erased, in which case it shall be set to line -1.</p>
|
|
|
|
<p><i>Current column</i>: Set to the first column that displays any portion of the last character backed up over.</p>
|
|
|
|
<h5><a name="tag_04_167_13_97"></a><ESC></h5>
|
|
|
|
<dl compact>
|
|
<dt><i>Synopsis</i>:</dt>
|
|
|
|
<dd>
|
|
<pre>
|
|
<tt><ESC>
|
|
</tt>
|
|
</pre>
|
|
</dd>
|
|
</dl>
|
|
|
|
<p>If input was part of a line-oriented command:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>If <i>interrupt</i> was entered, text input mode shall be terminated and the editor shall return to command mode. The terminal
|
|
shall be alerted.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>If <ESC> was entered, text input mode shall be terminated and the command shall continue execution with the input
|
|
provided.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>Otherwise, terminate text input mode and return to command mode.</p>
|
|
|
|
<p>Any <b>autoindent</b> characters entered on newly created lines that have no other non- <newline>s shall be deleted.</p>
|
|
|
|
<p>Any leading <b>autoindent</b> and <blank>s on newly created lines shall be rewritten to be the minimum number of
|
|
<blank>s possible.</p>
|
|
|
|
<p>The screen shall be redisplayed as necessary to match the contents of the edit buffer.</p>
|
|
|
|
<p><i>Current line</i>: Unchanged.</p>
|
|
|
|
<p><i>Current column</i>:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>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.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Otherwise, if a character is displayed in the current column, unchanged.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Otherwise, set to column position 1.</p>
|
|
</li>
|
|
</ol>
|
|
</blockquote>
|
|
|
|
<h4><a name="tag_04_167_14"></a>EXIT STATUS</h4>
|
|
|
|
<blockquote>
|
|
<p>The following exit values shall be returned:</p>
|
|
|
|
<dl compact>
|
|
<dt> 0</dt>
|
|
|
|
<dd>Successful completion.</dd>
|
|
|
|
<dt>>0</dt>
|
|
|
|
<dd>An error occurred.</dd>
|
|
</dl>
|
|
</blockquote>
|
|
|
|
<h4><a name="tag_04_167_15"></a>CONSEQUENCES OF ERRORS</h4>
|
|
|
|
<blockquote>
|
|
<p>When any error is encountered and the standard input is not a terminal device file, <i>vi</i> shall not write the file or return
|
|
to command or text input mode, and shall terminate with a non-zero exit status.</p>
|
|
|
|
<p>Otherwise, when an unrecoverable error is encountered it shall be equivalent to a SIGHUP asynchronous event.</p>
|
|
|
|
<p>Otherwise, when an error is encountered, the editor shall behave as specified in <a href="#tag_04_167_13_02">Command
|
|
Descriptions in vi</a> .</p>
|
|
</blockquote>
|
|
|
|
<hr>
|
|
<div class="box"><em>The following sections are informative.</em></div>
|
|
|
|
<h4><a name="tag_04_167_16"></a>APPLICATION USAGE</h4>
|
|
|
|
<blockquote>
|
|
<p>None.</p>
|
|
</blockquote>
|
|
|
|
<h4><a name="tag_04_167_17"></a>EXAMPLES</h4>
|
|
|
|
<blockquote>
|
|
<p>None.</p>
|
|
</blockquote>
|
|
|
|
<h4><a name="tag_04_167_18"></a>RATIONALE</h4>
|
|
|
|
<blockquote>
|
|
<p>See the RATIONALE for <a href="ex.html"><i>ex</i></a> for more information on <i>vi</i>. Major portions of the <i>vi</i> utility
|
|
specification point to <a href="../utilities/ex.html"><i>ex</i></a> to avoid inadvertent divergence. While <a href=
|
|
"../utilities/ex.html"><i>ex</i></a> and <i>vi</i> have historically been implemented as a single utility, this is not required by
|
|
IEEE Std 1003.1-2001.</p>
|
|
|
|
<p>It is recognized that portions of <i>vi</i> 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 <i>vi</i> implementation should provide the full set of capabilities on
|
|
all terminals capable of supporting them.</p>
|
|
|
|
<p>Historically, <i>vi</i> 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 <i>vi</i> command.</p>
|
|
|
|
<p>The text in the STDOUT section reflects the usage of the verb <i>display</i> in this section; some implementations of <i>vi</i>
|
|
use standard output to write to the terminal, but IEEE Std 1003.1-2001 does not require that to be the case.</p>
|
|
|
|
<p>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 <i>vi</i> 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.</p>
|
|
|
|
<p>Historically, <a href="../utilities/ex.html"><i>ex</i></a> and <i>vi</i> 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.</p>
|
|
|
|
<p>Historically, lines past the end of the edit buffer were marked with single tilde ( <tt>'˜'</tt> ) 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 <tt>'˜'</tt> character.</p>
|
|
|
|
<p>Historically, the <i>vi</i> 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 <tt>'@'</tt> 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.</p>
|
|
|
|
<p>Historically, lines marked with <tt>'@'</tt> 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 <tt>'@'</tt> 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.</p>
|
|
|
|
<h5><a name="tag_04_167_18_01"></a>Initialization in ex and vi</h5>
|
|
|
|
<p>Historically, <i>vi</i> always had a line in the edit buffer, even if the edit buffer was "empty". For example:</p>
|
|
|
|
<ol>
|
|
<li>
|
|
<p>The <a href="../utilities/ex.html"><i>ex</i></a> command <b>=</b> executed from visual mode wrote "1" when the buffer was
|
|
empty.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Writes from visual mode of an empty edit buffer wrote files of a single character (a <newline>), while writes from <a
|
|
href="../utilities/ex.html"><i>ex</i></a> mode of an empty edit buffer wrote empty files.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Put and read commands into an empty edit buffer left an empty line at the top of the edit buffer.</p>
|
|
</li>
|
|
</ol>
|
|
|
|
<p>For consistency, IEEE Std 1003.1-2001 does not permit any of these behaviors.</p>
|
|
|
|
<p>Historically, <i>vi</i> 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.</p>
|
|
|
|
<h5><a name="tag_04_167_18_02"></a>Command Descriptions in vi</h5>
|
|
|
|
<p>Motion commands are among the most complicated aspects of <i>vi</i> to describe. With some exceptions, the text region and
|
|
buffer type effect of a motion command on a <i>vi</i> 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 <i>n</i> to
|
|
line <i>n</i>+5 is identical to a region from line <i>n</i>+5 to line <i>n</i>. This is of more than academic interest-movements to
|
|
marks can be in either direction, and, if the <b>wrapscan</b> 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.</p>
|
|
|
|
<p>Historically, command counts were applied to any associated motion, and were multiplicative to any supplied motion count. For
|
|
example, <b>2cw</b> is the same as <b>c2w</b>, and <b>2c3w</b> is the same as <b>c6w</b>. IEEE Std 1003.1-2001 requires
|
|
this behavior. Historically, <i>vi</i> 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 <b>w</b>, <b>W</b>, and <b>B</b> commands treated groups of empty lines as
|
|
individual words; that is, the command would move the cursor to each new empty line. The <b>e</b> and <b>E</b> commands treated
|
|
groups of empty lines as a single word; that is, the first use would move past the group of lines. The <b>b</b> 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 <b>w</b> and <b>W</b> commands would just beep at the user, the <b>E</b> and <b>e</b> commands
|
|
would treat the group as a single word, and the <b>B</b> and <b>b</b> commands would treat the lines as individual words. For
|
|
consistency and simplicity of specification, IEEE Std 1003.1-2001 requires that all <i>vi</i> 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.</p>
|
|
|
|
<p>Historically, <i>vi</i> 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.</p>
|
|
|
|
<p>Historically, the first and last characters in the edit buffer were word boundaries. This historical practice is required by
|
|
IEEE Std 1003.1-2001.</p>
|
|
|
|
<p>Historically, <i>vi</i> 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.</p>
|
|
|
|
<p>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.</p>
|
|
|
|
<p>The historical <i>vi</i> 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 <b>j</b> or <b>k</b>, should work on buffer lines. Commands like
|
|
<b>dj</b>, or <b>j.</b>, where <b>.</b> 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 <b>H</b>. If the window is fairly
|
|
small, using buffer lines in these cases can result in completely random motion; for example, <b>1</b> <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 <b>H</b>, <b>L</b>, and <b>M</b> 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.</p>
|
|
|
|
<p>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 <i>vi</i>, 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.</p>
|
|
|
|
<p>Implementations of <a href="../utilities/ex.html"><i>ex</i></a> and <i>vi</i> exist that do not have these problems because the
|
|
relevant commands ( <control>-B, <control>-D, <control>-F, <control>-U, <control>-Y,
|
|
<control>-E, <b>H</b>, <b>L</b>, and <b>M)</b> operate on display (screen) lines, not (edit) buffer lines.</p>
|
|
|
|
<p>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, <a href=
|
|
"../utilities/ex.html"><i>ex</i></a> and <i>vi</i> 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 <tt>'@'</tt> 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.</p>
|
|
|
|
<p>The display area (for example, the value of the <b>window</b> 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 <a href="../utilities/ex.html"><i>ex</i></a> 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.</p>
|
|
|
|
<p>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 <i>vi</i> 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.</p>
|
|
|
|
<p>Commands that set the current line, but that do not set the current cursor value (for example, <b>j</b> and <b>k</b>) 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.</p>
|
|
|
|
<p>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, <b>:</b>, <b>!</b>, <b>/</b>, or <b>?</b>. IEEE Std 1003.1-2001 permits,
|
|
but does not require, this limitation.</p>
|
|
|
|
<p>Historically, "soft" errors in <i>vi</i> 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 <i>vi</i>, 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 <b>h</b> at the left
|
|
margin, <control>-B or <b>[[</b> at the beginning of the file, <b>2G</b> at the end of the file, and so on. In addition,
|
|
errors such as <b>%</b>, <b>]]</b>, <b>}</b>, <b>)</b>, <b>N</b>, <b>n</b>, <b>f</b>, <b>F</b>, <b>t</b>, and <b>T</b> failing to
|
|
find the searched-for object were soft as well. Less consistently, <b>/</b> and <b>?</b> displayed an error message if the pattern
|
|
was not found, <b>/</b>, <b>?</b>, <b>N</b>, and <b>n</b> displayed an error message if no previous regular expression had been
|
|
specified, and <b>;</b> did not display an error message if no previous <b>f</b>, <b>F</b>, <b>t</b>, or <b>T</b> 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.</p>
|
|
|
|
<h5><a name="tag_04_167_18_03"></a>Page Backwards</h5>
|
|
|
|
<p>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 <i>count</i>, as there will
|
|
be, by definition, no overlapping lines. The actual calculation used by historical implementations of the <i>vi</i> editor for
|
|
<control>-B was:</p>
|
|
|
|
<pre>
|
|
<tt>((current first line) - count x (window edit option)) +2
|
|
</tt>
|
|
</pre>
|
|
|
|
<p>and for <control>-F was:</p>
|
|
|
|
<pre>
|
|
<tt>((current first line) + count x (window edit option)) -2
|
|
</tt>
|
|
</pre>
|
|
|
|
<p>This calculation does not work well when intermixing commands with and without counts; for example, <b>3</b> <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 <i>vi</i> commands that take counts, IEEE Std 1003.1-2001 requires a
|
|
different calculation.</p>
|
|
|
|
<h5><a name="tag_04_167_18_04"></a>Scroll Forward</h5>
|
|
|
|
<p>The 4BSD and System V implementations of <i>vi</i> differed on the initial value used by the <b>scroll</b> command. 4BSD
|
|
used:</p>
|
|
|
|
<pre>
|
|
<tt>((window edit option) +1) /2
|
|
</tt>
|
|
</pre>
|
|
|
|
<p>while System V used the value of the <b>scroll</b> 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.</p>
|
|
|
|
<h5><a name="tag_04_167_18_05"></a>Scroll Forward by Line</h5>
|
|
|
|
<p>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.</p>
|
|
|
|
<h5><a name="tag_04_167_18_06"></a>Clear and Redisplay</h5>
|
|
|
|
<p>The historical <control>-L command refreshed the screen exactly as it was supposed to be currently displayed, replacing
|
|
any <tt>'@'</tt> characters for lines that had been deleted but not updated on the screen with refreshed <tt>'@'</tt> characters.
|
|
The intent of the <control>-L command is to refresh when the screen has been accidentally overwritten; for example, by a
|
|
<b>write</b> command from another user, or modem noise.</p>
|
|
|
|
<h5><a name="tag_04_167_18_07"></a>Redraw Screen</h5>
|
|
|
|
<p>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 <tt>'@'</tt> 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 <tt>'@'</tt> characters because they are too long to be displayed in the current
|
|
framework; however, the current line and column need not be modified.</p>
|
|
|
|
<h5><a name="tag_04_167_18_08"></a>Search for tagstring</h5>
|
|
|
|
<p>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
|
|
<tt>'#'</tt> character in the text <tt>"#bar@"</tt> , the tag was <tt>"#bar"</tt> . On the character <tt>'b'</tt> it was
|
|
<tt>"bar"</tt> , and on the <tt>'a'</tt> it was <tt>"ar"</tt> . IEEE Std 1003.1-2001 requires this behavior.</p>
|
|
|
|
<h5><a name="tag_04_167_18_09"></a>Replace Text with Results from Shell Command</h5>
|
|
|
|
<p>Historically, the <b><</b>, <b>></b>, and <b>!</b> commands considered most cursor motions other than line-oriented
|
|
motions an error; for example, the command <b>>/foo<CR></b> succeeded, while the command <b>>l</b> 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.</p>
|
|
|
|
<h5><a name="tag_04_167_18_10"></a>Move to Matching Character</h5>
|
|
|
|
<p>Other matching characters have been left implementation-defined in order to allow extensions such as matching <tt>'<'</tt>
|
|
and <tt>'>'</tt> for searching HTML, or <b>#ifdef</b>, <b>#else</b>, and <b>#endif</b> for searching C source.</p>
|
|
|
|
<h5><a name="tag_04_167_18_11"></a>Repeat Substitution</h5>
|
|
|
|
<p>IEEE Std 1003.1-2001 requires that any <b>c</b> and <b>g</b> flags specified to the previous substitute command be
|
|
ignored; however, the <b>r</b> flag may still apply, if supported by the implementation.</p>
|
|
|
|
<h5><a name="tag_04_167_18_12"></a>Return to Previous (Context or Section)</h5>
|
|
|
|
<p>The <b>[[</b>, <b>]]</b>, <b>(</b>, <b>)</b>, <b>{</b>, and <b>}</b> 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, <i>vi</i> 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.</p>
|
|
|
|
<p>Sentence boundaries were problematic in the historical <i>vi</i>. 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
|
|
<i>vi</i> section commands were documented as taking an optional window size as a <i>count</i> preceding the command. This was not
|
|
implemented in historical versions, so IEEE Std 1003.1-2001 requires that the <i>count</i> repeat the command, for
|
|
consistency with other <i>vi</i> commands.</p>
|
|
|
|
<h5><a name="tag_04_167_18_13"></a>Repeat</h5>
|
|
|
|
<p>Historically, mapped commands other than text input commands could not be repeated using the <b>period</b> command.
|
|
IEEE Std 1003.1-2001 requires conformance to historical practice.</p>
|
|
|
|
<p>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:</p>
|
|
|
|
<pre>
|
|
<tt>iab<control>-H<control>-H<control>-Hdef<escape>
|
|
</tt>
|
|
</pre>
|
|
|
|
<p>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 <i>vi</i> ignored <control>-T
|
|
characters that were input in the original command during command repetition. IEEE Std 1003.1-2001 prohibits this
|
|
behavior.</p>
|
|
|
|
<h5><a name="tag_04_167_18_14"></a>Find Regular Expression</h5>
|
|
|
|
<p>Historically, commands did not affect the line searched to or from if the motion command was a search ( <b>/</b>, <b>?</b>,
|
|
<b>N</b>, <b>n</b>) and the final position was the start/end of the line. There were some special cases and <i>vi</i> 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 <b>wrapscan</b>) to the original
|
|
location. IEEE Std 1003.1-2001 requires that this behavior be treated as an error.</p>
|
|
|
|
<p>Historically, the syntax <tt>"/RE/0"</tt> was used to force the command to cut text in line mode. IEEE Std 1003.1-2001
|
|
requires conformance to historical practice.</p>
|
|
|
|
<p>Historically, in open mode, a <b>z</b> 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.</p>
|
|
|
|
<p>Historically, trailing <b>z</b> 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.</p>
|
|
|
|
<h5><a name="tag_04_167_18_15"></a>Execute an ex Command</h5>
|
|
|
|
<p>Historically, <i>vi</i> implementations restricted the commands that could be entered on the colon command line (for example,
|
|
<b>append</b> and <b>change</b>), 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 <a href="../utilities/ex.html"><i>ex</i></a>
|
|
command by entering <b>:</b>, 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 <a href="../utilities/ex.html"><i>ex</i></a> command mode by using the <i>vi</i>
|
|
<b>Q</b> command (and later resuming visual mode with the <a href="../utilities/ex.html"><i>ex</i></a> <b>vi</b> command). In <a
|
|
href="../utilities/ex.html"><i>ex</i></a> command mode, the single-line limitation does not exist. So, for example, the following
|
|
is valid:</p>
|
|
|
|
<pre>
|
|
<tt>Q
|
|
s/break here/break\
|
|
here/
|
|
vi
|
|
</tt>
|
|
</pre>
|
|
|
|
<p>IEEE Std 1003.1-2001 requires that, if the <a href="../utilities/ex.html"><i>ex</i></a> command overwrites any part of
|
|
the screen that would be erased by a refresh, <i>vi</i> 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.</p>
|
|
|
|
<h5><a name="tag_04_167_18_16"></a>Shift Left (Right)</h5>
|
|
|
|
<p>Refer to the Rationale for the <b>!</b> and <b>/</b> commands. Historically, the <b><</b> and <b>></b> commands sometimes
|
|
moved the cursor to the first non- <blank> (for example if the command was repeated or with <b>_</b> 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 <b><</b> and <b>></b> 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.</p>
|
|
|
|
<h5><a name="tag_04_167_18_17"></a>Execute</h5>
|
|
|
|
<p>Historically, buffers could execute other buffers, and loops, infinite and otherwise, were possible.
|
|
IEEE Std 1003.1-2001 requires conformance to historical practice. The * <i>buffer</i> syntax of <a href=
|
|
"../utilities/ex.html"><i>ex</i></a> is not required in <i>vi</i>, because it is not historical practice and has been used in some
|
|
<i>vi</i> implementations to support additional scripting languages.</p>
|
|
|
|
<h5><a name="tag_04_167_18_18"></a>Reverse Case</h5>
|
|
|
|
<p>Historically, the <b>˜</b> command ignored any associated <i>count</i>, and acted only on the characters in the current
|
|
line. For consistency with other <i>vi</i> commands, IEEE Std 1003.1-2001 requires that an associated <i>count</i> act on
|
|
the next <i>count</i> characters, and that the command move to subsequent lines if warranted by <i>count</i>, to make it possible
|
|
to modify large pieces of text in a reasonably efficient manner. There exist <i>vi</i> implementations that optionally require an
|
|
associated motion command for the <b>˜</b> command. Implementations supporting this functionality are encouraged to base it on
|
|
the <b>tildedop</b> edit option and handle the text regions and cursor positioning identically to the <b>yank</b> command.</p>
|
|
|
|
<h5><a name="tag_04_167_18_19"></a>Append</h5>
|
|
|
|
<p>Historically, <i>count</i>s specified to the <b>A</b>, <b>a</b>, <b>I</b>, and <b>i</b> commands repeated the input of the first
|
|
line <i>count</i> 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 <i>count</i> times.</p>
|
|
|
|
<h5><a name="tag_04_167_18_20"></a>Move Backward to Preceding Word</h5>
|
|
|
|
<p>Historically, <i>vi</i> 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 <i>vi</i> 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.</p>
|
|
|
|
<h5><a name="tag_04_167_18_21"></a>Change to End-of-Line</h5>
|
|
|
|
<p>Some historical implementations of the <b>C</b> command did not behave as described by IEEE Std 1003.1-2001 when the
|
|
<b>$</b> key was remapped because they were implemented by pushing the <b>$</b> key onto the input queue and reprocessing it.
|
|
IEEE Std 1003.1-2001 does not permit this behavior. Historically, the <b>C</b>, <b>S</b>, and <b>s</b> 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 <b>c</b> commands in all respects.</p>
|
|
|
|
<h5><a name="tag_04_167_18_22"></a>Delete</h5>
|
|
|
|
<p>Historically, lines in open mode that were deleted were scrolled up, and an <b>@</b> 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
|
|
<tt>'@'</tt> character, the line cannot remain on the screen.</p>
|
|
|
|
<h5><a name="tag_04_167_18_23"></a>Delete to End-of-Line</h5>
|
|
|
|
<p>Some historical implementations of the <b>D</b> command did not behave as described by IEEE Std 1003.1-2001 when the
|
|
<b>$</b> key was remapped because they were implemented by pushing the <b>$</b> key onto the input queue and reprocessing it.
|
|
IEEE Std 1003.1-2001 does not permit this behavior.</p>
|
|
|
|
<h5><a name="tag_04_167_18_24"></a>Join</h5>
|
|
|
|
<p>An historical oddity of <i>vi</i> is that the commands <b>J</b>, <b>1J</b>, and <b>2J</b> are all equivalent.
|
|
IEEE Std 1003.1-2001 requires conformance to historical practice. The <i>vi</i> <b>J</b> command is specified in terms of
|
|
the <a href="../utilities/ex.html"><i>ex</i></a> <b>join</b> command with an <a href="../utilities/ex.html"><i>ex</i></a> command
|
|
<i>count</i> value. The address correction for a <i>count</i> that is past the end of the edit buffer is necessary for historical
|
|
compatibility for both <a href="../utilities/ex.html"><i>ex</i></a> and <i>vi</i>.</p>
|
|
|
|
<h5><a name="tag_04_167_18_25"></a>Mark Position</h5>
|
|
|
|
<p>Historical practice is that only lowercase letters, plus <tt>'`'</tt> and <tt>'"</tt> , 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.</p>
|
|
|
|
<h5><a name="tag_04_167_18_26"></a>Repeat Regular Expression Find (Forward and Reverse)</h5>
|
|
|
|
<p>Historically, the <b>N</b> and <b>n</b> commands could not be used as motion components for the <b>c</b> command. With the
|
|
exception of the <b>cN</b> 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.</p>
|
|
|
|
<h5><a name="tag_04_167_18_27"></a>Insert Empty Line (Below and Above)</h5>
|
|
|
|
<p>Historically, counts to the <b>O</b> and <b>o</b> commands were used as the number of physical lines to open, if the terminal
|
|
was dumb and the <b>slowopen</b> 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 <i>count</i> 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 <b>slowopen</b> edit option.</p>
|
|
|
|
<h5><a name="tag_04_167_18_28"></a>Put from Buffer (Following and Before)</h5>
|
|
|
|
<p>Historically, <i>count</i>s to the <b>p</b> and <b>P</b> 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 <i>count</i> be supported for all <b>p</b> and <b>P</b> commands.</p>
|
|
|
|
<p>Historical implementations of <i>vi</i> were widely known to have major problems in the <b>p</b> and <b>P</b> 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.</p>
|
|
|
|
<p>Historically, a <b>P</b> or <b>p</b> command (or an <a href="../utilities/ex.html"><i>ex</i></a> <b>put</b> 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.</p>
|
|
|
|
<h5><a name="tag_04_167_18_29"></a>Replace Character</h5>
|
|
|
|
<p>Historically, the <b>r</b> command did not correctly handle the <i>erase</i> and <i>word erase</i> characters as arguments, nor
|
|
did it handle an associated <i>count</i> greater than 1 with a <carriage-return> argument, for which it replaced <i>count</i>
|
|
characters with a single <newline>. IEEE Std 1003.1-2001 does not permit these inconsistencies.</p>
|
|
|
|
<p>Historically, the <b>r</b> 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 <i>vi</i>.</p>
|
|
|
|
<p>Historically, it is an error to enter the <b>r</b> command if there are less than <i>count</i> characters at or after the cursor
|
|
in the line. While a reasonable and unambiguous extension would be to permit the <b>r</b> command on empty lines, it would require
|
|
that too large a <i>count</i> 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.</p>
|
|
|
|
<h5><a name="tag_04_167_18_30"></a>Replace Characters</h5>
|
|
|
|
<p>Historically, if there were <b>autoindent</b> characters in the line on which the <b>R</b> command was run, and
|
|
<b>autoindent</b> was set, the first <newline> would be properly indented and no characters would be replaced by the
|
|
<newline>. Each additional <newline> would replace <i>n</i> characters, where <i>n</i> 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.</p>
|
|
|
|
<h5><a name="tag_04_167_18_31"></a>Undo</h5>
|
|
|
|
<p>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 <b>o</b> text
|
|
input command, followed by an <b>undo</b> would return the cursor to the location where the <b>o</b> command was entered, but a
|
|
<b>cw</b> command followed by an <b>o</b> command followed by an <b>undo</b> 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.</p>
|
|
|
|
<h5><a name="tag_04_167_18_32"></a>Yank</h5>
|
|
|
|
<p>Historically, the <b>yank</b> 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 <b>_</b> command, or for the <b>G</b> and
|
|
<b>'</b> 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 <b>yank</b> 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
|
|
<b>yank</b> command. IEEE Std 1003.1-2001 requires that all <b>yank</b> commands associated with backward motions move
|
|
the cursor to the end of the motion for consistency, and specifically, to make <b>'</b> commands as motions consistent with search
|
|
patterns as motions.</p>
|
|
|
|
<h5><a name="tag_04_167_18_33"></a>Yank Current Line</h5>
|
|
|
|
<p>Some historical implementations of the <b>Y</b> command did not behave as described by IEEE Std 1003.1-2001 when the
|
|
<tt>'_'</tt> key was remapped because they were implemented by pushing the <tt>'_'</tt> key onto the input queue and reprocessing
|
|
it. IEEE Std 1003.1-2001 does not permit this behavior.</p>
|
|
|
|
<h5><a name="tag_04_167_18_34"></a>Redraw Window</h5>
|
|
|
|
<p>Historically, the <b>z</b> command always redrew the screen. This is permitted but not required by
|
|
IEEE Std 1003.1-2001, because of the frequent use of the <b>z</b> command in macros such as <b>map n nz.</b> 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.</p>
|
|
|
|
<p>The semantics of <b>z^</b> 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.</p>
|
|
|
|
<p>Historically, the <b>z</b> 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
|
|
<tt>'@'</tt> 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.</p>
|
|
|
|
<p>Historically, the <b>z</b> 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.</p>
|
|
|
|
<p>Historically, the <b>z</b> 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.</p>
|
|
|
|
<h5><a name="tag_04_167_18_35"></a>Input Mode Commands in vi</h5>
|
|
|
|
<p>Historical implementations of <i>vi</i> did not permit the user to erase more than a single line of input, or to use normal
|
|
erase characters such as <i>line erase</i>, <i>worderase</i>, and <i>erase</i> to erase <b>autoindent</b> characters. As there
|
|
exist implementations of <i>vi</i> that do not have these limitations, both behaviors are permitted, but only historical practice
|
|
is required. In the case of these extensions, <i>vi</i> is required to pause at the <b>autoindent</b> and previous line
|
|
boundaries.</p>
|
|
|
|
<p>Historical implementations of <i>vi</i> updated only the portion of the screen where the current cursor character was displayed.
|
|
For example, consider the <i>vi</i> input keystrokes:</p>
|
|
|
|
<pre>
|
|
<tt>iabcd<escape>0C<tab>
|
|
</tt>
|
|
</pre>
|
|
|
|
<p>Historically, the <tab> would overwrite the characters <tt>"abcd"</tt> when it was displayed. Other implementations
|
|
replace only the <tt>'a'</tt> 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:</p>
|
|
|
|
<pre>
|
|
<tt>iabcd<ESC>0R<tab><ESC>
|
|
</tt>
|
|
</pre>
|
|
|
|
<p>the historical implementation results in the string <tt>"bcd"</tt> 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.</p>
|
|
|
|
<p>Historical implementations of <i>vi</i> 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 <b>autoindent</b>
|
|
characters.</p>
|
|
|
|
<h5><a name="tag_04_167_18_36"></a>NUL</h5>
|
|
|
|
<p>Some historical implementations of <i>vi</i> 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.</p>
|
|
|
|
<h5><a name="tag_04_167_18_37"></a><control>-D</h5>
|
|
|
|
<p>See also Rationale for the input mode command <newline>. The hidden assumptions in the <control>-D command (and in
|
|
the <i>vi</i> <b>autoindent</b> 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.</p>
|
|
|
|
<h5><a name="tag_04_167_18_38"></a><newline></h5>
|
|
|
|
<p>Implementations are permitted to rewrite <b>autoindent</b> characters in the line when <newline>, <carriage-return>,
|
|
<control>-D, and <control>-T are entered, or when the <b>shift</b> 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 <b>tabstop</b> set to 8, and <b>shiftwidth</b> set to 3, will result in the <tab> being replaced
|
|
by several <space>s.</p>
|
|
|
|
<h5><a name="tag_04_167_18_39"></a><control>-T</h5>
|
|
|
|
<p>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 <b>autoindent</b> 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.</p>
|
|
|
|
<h5><a name="tag_04_167_18_40"></a><control>-V</h5>
|
|
|
|
<p>Historically, <i>vi</i> used <b>^V</b>, regardless of the value of the literal-next character of the terminal.
|
|
IEEE Std 1003.1-2001 requires conformance to historical practice.</p>
|
|
|
|
<p>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
|
|
<i>termios</i> START character, so the editor will generally not receive the <control>-Q unless <b>stty ixon</b> mode is set
|
|
to off. (In addition, some historical implementations of <i>vi</i> explicitly set <b>ixon</b> 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 <i>termios</i> control characters, using the <a href="../utilities/stty.html"><i>stty</i></a> utility or other
|
|
methods described in the System Interfaces volume of IEEE Std 1003.1-2001.</p>
|
|
|
|
<h5><a name="tag_04_167_18_41"></a><ESC></h5>
|
|
|
|
<p>Historically, SIGINT alerted the terminal when used to end input mode. This behavior is permitted, but not required, by
|
|
IEEE Std 1003.1-2001.</p>
|
|
</blockquote>
|
|
|
|
<h4><a name="tag_04_167_19"></a>FUTURE DIRECTIONS</h4>
|
|
|
|
<blockquote>
|
|
<p>None.</p>
|
|
</blockquote>
|
|
|
|
<h4><a name="tag_04_167_20"></a>SEE ALSO</h4>
|
|
|
|
<blockquote>
|
|
<p><a href="ed.html"><i>ed</i></a> , <a href="ex.html"><i>ex</i></a> , <a href="stty.html"><i>stty</i></a></p>
|
|
</blockquote>
|
|
|
|
<h4><a name="tag_04_167_21"></a>CHANGE HISTORY</h4>
|
|
|
|
<blockquote>
|
|
<p>First released in Issue 2.</p>
|
|
</blockquote>
|
|
|
|
<h4><a name="tag_04_167_22"></a>Issue 5</h4>
|
|
|
|
<blockquote>
|
|
<p>The FUTURE DIRECTIONS section is added.</p>
|
|
</blockquote>
|
|
|
|
<h4><a name="tag_04_167_23"></a>Issue 6</h4>
|
|
|
|
<blockquote>
|
|
<p>This utility is marked as part of the User Portability Utilities option.</p>
|
|
|
|
<p>The APPLICATION USAGE section is added.</p>
|
|
|
|
<p>The obsolescent SYNOPSIS is removed.</p>
|
|
|
|
<p>The following new requirements on POSIX implementations derive from alignment with the Single UNIX Specification:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>The <b>reindent</b> command description is added.</p>
|
|
</li>
|
|
</ul>
|
|
|
|
<p>The <i>vi</i> utility has been extensively rewritten for alignment with the IEEE P1003.2b draft standard.</p>
|
|
|
|
<p>IEEE PASC Interpretations 1003.2 #57, #62, #63, #64, #78, and #188 are applied.</p>
|
|
|
|
<p>IEEE PASC Interpretation 1003.2 #207 is applied, clarifying the description of the <b>R</b> command in a manner similar to the
|
|
descriptions of other text input mode commands such as <b>i</b>, <b>o</b>, and <b>O</b>.</p>
|
|
|
|
<p>The <b>-l</b> option is removed.</p>
|
|
</blockquote>
|
|
|
|
<div class="box"><em>End of informative text.</em></div>
|
|
|
|
<hr>
|
|
<hr size="2" noshade>
|
|
<center><font size="2"><!--footer start-->
|
|
UNIX ® is a registered Trademark of The Open Group.<br>
|
|
POSIX ® is a registered Trademark of The IEEE.<br>
|
|
[ <a href="../mindex.html">Main Index</a> | <a href="../basedefs/contents.html">XBD</a> | <a href=
|
|
"../utilities/contents.html">XCU</a> | <a href="../functions/contents.html">XSH</a> | <a href="../xrat/contents.html">XRAT</a>
|
|
]</font></center>
|
|
|
|
<!--footer end-->
|
|
<hr size="2" noshade>
|
|
</body>
|
|
</html>
|
|
|