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