.TH elvis "" "" Command
.PC "Clone of Berkeley-standard screen editor"
\fBelvis [ \fIoptions\fB ] [ +\fIcmd\fB ] [ \fIfile1 ... file27\fB ]\fR
.PP
.HS
.SH Options:
.IC "\fB\-e\fR"
Begin in colon-command mode
.IC "\fB\-i\fR"
Begin in input mode
.IC "\fB\-r\fR"
Recover a previous edit
.IC "\fB\-R\fR"
Read-only mode
.IC "\fB\-s\fR"
Turn off some options, so that \fBelvis\fR runs more safely
.IC "\fB\-t\fI tag\fR"
Begin editing at \fItag\fR
.IC "\fB\-m\fR"
Use in error-handling mode
.IC "\fB\-v\fR"
Begin in visual-command mode
.IC "\fB\-w \fIwinsize\fR"
Set option \fBwindow\fR to \fIwinsize\fR
.IC "\fB\+\fIcommand\fR"
Execute \fIcommand\fR before editing
.HE
.B elvis
is a clone of
.B vi
and
.BR ex ,
the standard \*(UN screen editors.
.PP
.B elvis
is a modal editor whose command structure resembles the
.B ed
line editor.
.I Modal
means that a keystroke assumes a different meaning, depending upon the mode
that the editor is in.
.B elvis
uses three modes:
.I "visual-command mode,"
.I "colon-command mode,"
and
.IR "input mode" .
.PP
The following sections summarize the commands associated with each mode:
.SH "Visual-Command Mode"
Visual-command mode closely resembles text-input mode.
One quick way to tell the modes apart is to press the
.B <esc>
key.
If
.B elvis
beeps, then you are in visual-command mode.
If it does not beep, then you were in input mode,
but pressing
.B <esc>
switched you to visual-command mode.
.PP
Most visual-mode commands are one keystroke long.
The commands are in two groups:
movement commands and edit commands.
The former group moves the cursor through the file being edited,
and the latter group alters text.
.PP
The following sections summarize the command set for
.BR elvis 's
visual-command mode.
.SH "Visual-Mode Movement Commands"
The following summarizes the visual mode's movement commands.
.I count
indicates that the command can be optionally prefaced by an argument
that tells
.B elvis
how often to execute the command.
.I move
indicates that the command can be followed by a movement command, after which
the command is executed on the text that lies between the point where the
command was first typed and the point to which the cursor was moved.
Typing the command a second time executes the command for the entire line
upon which the cursor is positioned.
.I key
means that the command must be followed by an argument.
.IP \fB<ctrl-B>\fR 1.25i
Move up by one screenful.
.IS "\fI[count] \fB<ctrl-D>\fR"
Scroll down
.I count
lines (default, one-half screenful).
.IS "\fI[count] \fB<ctrl-E>\fR
Scroll up
.I count
lines.
.IS \fB<ctrl-F>\fR
Move down by one screenful.
.IS \fB<ctrl-G>\fR
Show file status and the current line.
.IS "\fI[count] \fB<ctrl-H>\fR
Move one character to the left.
.IS "\fI[count]\fR \fB<ctrl-J>\fR"
Move down
.I count
lines.
.IS \fB<ctrl-L>\fR
Redraw the screen.
.IS "\fI[count] \fB<ctrl-M>\fR"
Move to the beginning of the next line.
.IS "\fI[count] \fB<ctrl-N>\fR"
Move down
.I count
lines (default, one).
.IS "\fI[count] \fB<ctrl-P>\fR"
Move up
.I count
lines (default, one).
.IS \fB<ctrl-R>\fR
Redraw the screen.
.IS "\fB<ctrl-T>\fR"
Pop the tag stack \(em that is, return to the most recently tagged position.
.B elvis
removes that tag from the tag stack.
.IS "\fI[count] \fB<ctrl-U>\fR"
Scroll up
.I count
lines (default, one-half screenful).
.IS "\fI[count] \fB<ctrl-X>\fR"
Move the cursor to column
.I count
on the current line.
.IS "\fI[count] \fB<ctrl-Y>\fR"
Scroll down
.I count
lines.
.IS \fB<ctrl-]>\fR
If the cursor is on a tag name, go to that tag.
.IS \fB<ctrl-^>\fR
Switch to the previous file.
.IS "\fI[count] \fB<space>\fR"
Move right
.I count
spaces (default, one).
.IS "\fB<quotation mark> \fIkey\fR"
Select which cut buffer to use next.
.IS \fB$\fR
Move to the end of the current line.
.IS \fB%\fR
Move to the matching (){}[] character.
.IS "\fI[count] \fB%\fR"
Move
.I count
percentage into the file.
For example, the command
.B "50%"
moves the cursor to the middle of the file.
.IS "\fB\\' \fIkey\fR"
Move to a marked line.
.IS "\fI[count] \fB(\fR"
Move backward
.I count
sentences (default, one).
.IS "\fI[count] \fB)\fR"
Move forward
.I count
sentences (default, one).
.IS \fB*\fR
Go to the next error in the error list.
.IS "\fI[count] \fB+\fR"
Move to the beginning of the next line.
.IS "\fI[count] \fB,\fR"
Repeat the previous \fBf\fR or \fBt\fR command,
but move in the opposite direction.
.IS "\fI[count] \fB\-\fR"
Move to the beginning of the preceding line.
.IS "\fI[count] \fB.\fR"
Repeat the previous \fIedit\fR command.
.IS "\fB/\fR \fItext\fR"
Search forward for
.I text,
which can be a regular expression.
.IS \fB0\fR
If not part of a count, move to the first character of this line.
.IS \fB:\fR
Switch to colon-command mode to execute one command.
.IS "\fI[count] \fB;\fR"
Repeat the previous \fBf\fR or \fBt\fR command.
.IS "\fB? \fItext\fR"
Search backwards for
.I text,
which can be a regular expression.
.IS "\fB@ \fIkey\fR
Execute the contents of a cut-buffer as
.B vi
commands.
.IS "\fI[count] \fBB\fR"
Move backwards
.I count
words (default, one).
.IS "\fI[count] \fBE\fR"
Move forwards
.I count
words (default, one).
.IS "\fI[count] \fBF\fR \fIkey\fR"
Move left to the \fIcount\fR'th occurrence of the given character
(default, first).
.IS "\fI[count] \fBG\fR"
Move to to line \fIcount\fR
(default, last).
.IS "\fI[count] \fBH\fR"
Move to the top of the screen.
.IS "\fI[count] \fBL\fR"
Move to the bottom of the screen.
.IS \fBM\fR
Move to the middle of the screen.
.IS \fBN\fR
Repeat the last search, but in the opposite direction.
.IS \fBP\fR
Paste text before the cursor.
.IS \fBQ\fR
Shift to colon-command mode.
.IS "\fI[count] \fBT\fR \fIkey\fR"
Move left \fIalmost\fR to the given character.
.IS \fBU\fR
Undo all recent changes to the current line.
.IS "\fBV \fI[move...][command]\fR"
Like
.BR v ,
described below, except it applies to whole lines.
For example, the command
.B Vjj>
first highlights and then indents three lines.
It is equivalent to
.B >2j
or
.BR 3>> .
.IS "\fI[count] \fBW\fR"
Move forward
.I count
words (default, one).
.IS "\fI[count] \fBY\fR"
Copy (or ``yank'') 
.I count
lines into a cut buffer (default, one).
.IS "\fBZ Z\fR"
Save the file and exit.
.IS "\fB[ [\fR"
Move back one section.
.IS "\fB] ]\fR"
Move forward one section.
.IS \fB^\fR
Move to the beginning of the current line, but after indent.
.IS "\fB\(ga \fIkey\fR"
Move to the
.I key
character.
.IS "\fI[count] \fBb\fR"
Move back
.I count
words.
.IS "\fI[count] \fBe\fR"
Move forward to the end of the \fIcount\fR'th word.
.IS "\fI[count] \fBf \fIc\fR"
Move rightward to the \fIcount\fR'th occurrence of character
.IR c .
.IS "\fI[count] \fBh\fR"
Move left
.I count
characters (default, one).
.IS "\fI[count] \fBj\fR"
Move down
.I count
characters (default, one).
.IS "\fI[count] \fBk\fR"
Move up
.I count
characters (default, one).
.IS "\fI[count] \fBl\fR"
Move right
.I count
characters (default, one).
.IS "\fBm \fIkey\fR"
Mark a line or character.
.IS \fBn\fR
Repeat the previous search.
.IS \fBp\fR
Paste text after the cursor.
.IS "\fI[count] \fBt \fIkey\fR"
Move rightward \fIalmost\fR to the \fIcount\fR'th occurrence of the
given character (default, one).
.IS \fBu\fR
Undo the previous edit command.
.IS "\fBv \fI[move ...][command]\fR"
Highlight text as the cursor is moved, then apply
.I command
to the highlighted text.
For example,
.B vwwwd
is approximately the same as
.BR 3dw .
To cancel the selection without altering the text, press
.B v
a second time.
.IS "\fI[count] \fBw\fR"
Move forward
.I count
words (default, one).
.IS "\fBy \fImove\fR"
Copy (or ``yank'') text into a cut buffer.
.IS "\fBz \fIkey\fR"
Scroll the screen, repositioning the current line as follows:
\fB+\fR indicates top of the screen, \fB\(em\fR indicates the bottom, \fB.\fR
indicates the middle.
.IS "\fI[count] \fB{\fR"
Move back
.I count
paragraphs (default, one).
.IS "\fI[count] \fB|\fR"
Move to the \fIcount\fR'th column on the screen (leftmost, one).
.IS "\fI[count] \fB}\fR"
Move forward
.I count
paragraphs (default, one).
.PP
If you are running
.B elvis
within an
.B X
terminal window, you can use also the mouse to reposition the cursor.
To bypass this feature (e.g., to perform the standard X cut-and-paste tasks),
press
.B <shift>
while clicking a mouse button.
.SH "Visual-Mode Edit Commands"
The following describes the visual mode's editing commands.
.IP "\fB! \fI[move]\fR" 1.25i
Run the selected text through an external filter program.
.IS "\fB!!\fR"
Replace the current line with the output of an external command.
.IS "\fI[count] \fB#\fR"
Increment a number by
.I count
(default, one).
.IS "\fI[count] \fB&\fR"
Repeat the previous \fB:s//\fR command
.I count
times (default, once).
.IS "\fB< \fImove\fR"
Shift the enclosed text left.
.IS "\fB=\fI[move]\fR"
Filter the affected text.
The default filter is
.BR fmt ,
which performs simple paragraph formatting and word wrap.
To change the filter used by
.BR = ,
use the command \fB:set ep=\fIfilter_name\fR.
.IS "\fB> \fImove\fR"
Shift the enclosed text right.
.IS "\fI[count] \fBA \fIinput\fR"
Append input to end of the line.
.IS "\fBC \fIinput\fR"
Change text from the cursor through the end of the line.
.IS \fBD\fR
Delete text from the cursor through the end of the line.
.IS "\fI[count] \fBI \fIinput\fR"
Insert text at the beginning of the line (after indentations).
.IS "\fI[count] \fBJ\fR"
Join lines the current with the following line.
.IS \fBK\fR
Look up the word under the cursor.
The default lookup program is
.BR ref .
You can change
.B K
so as to get C language run-time
library help for the word under the cursor by executing the command:
.DM
	set kp="help -f/usr/lib/helpfile -i/usr/lib/helpindex -d@"
.DE
.sp \n(pDu
.II .exrc
You can write this line into file
.BR $HOME/.exrc ,
which
.B elvis
reads before it begins execution.
.IS "\fI[count] \fBO \fIinput\fR"
Open a new line above the current line.
.IS "\fBR \fIinput\fR"
Overtype.
.IS "\fI[count] \fBS\fI input\fR"
Change lines, like \fBcc\fR.
.IS "\fI[count] \fBX\fR"
Delete
.I count
characters from the left of the cursor (default, one).
.IS "\fI[count] \fBa \fIinput\fR"
Insert text after the cursor.
.IS "\fBc \fImove\fR"
Change text.
.IS "\fBd \fImove\fR"
Delete text.
.IS "\fI[count] \fBi \fIinput\fR"
Insert text at the cursor.
.IS "\fI[count] \fBo \fIinput\fR"
Open a new line below the current line.
.IS "\fI[count] \fBr \fIkey\fR"
Replace
.I count
characters with text you type (default, one).
.IS "\fI[count] \fBs \fIinput\fR"
Replace
.I count
characters with text you type (default, one).
.IS "\fI[count] \fBx\fR"
Delete the character at which the cursor is positioned.
.IS \fB\e\fR
Pop up a menu of the most common operations.
.IS "\fI[count] \fB~\fR"
Toggle a character between upper case and lower case.
.SH "Colon-Mode Commands"
The following summarizes the set of colon-mode commands.
It is no accident that these commands closely resemble those for the
.B ed
line editor:
they come, in fact, from
.BR ex ,
the editor upon which both
.B vi
(the \*(UN visual editor)
and
.B ed
derive.
For that reason, colon-command mode is sometimes called
.B ex
mode.
.PP
.I line
indicates whether the command can be executed on one or more lines.
.I line
can be a regular expression.
Some commands can be used with an optional exclamation point;
if done so, the editor assumes you know what you are doing and
suppresses the warnings and prompts it would normally issue for
these commands.
.PP
Most commands can be invoked simply by
typing the first one or two letters of their names.
.IS "\fBabbr \fI[word full_form]\fR" 1.25i
Define
.I word
as an abbreviation for
.IR full_form .
.IS "\fBand\fR"
This command is used with the colon-mode command
.B if
to execute other commands conditionally.
It is never used on its own.
For more information, see the section
.IR "Conditional Commands " ,
below.
.IS "\fI[line] \fBappend\fR" 1.25i
Insert text after the current line.
.IS "\fBargs \fI[file1 ... fileN]\fR"
With no arguments, print the files list on \fBelvis\fR's command line.
With one or more arguments, change the name of the current file.
.IS "\fBcc \fI[files]\fR"
Invoke the C compiler to compile
.IR files ,
and redirects all error messages into file
.BR errlist .
After the compiler exits, scan the contents of
.B errlist
for error messages;
if one is found, jump to the line and file indicated on the error line,
and display the error message on the status line.
.IS "\fBcd \fI[directory]\fR"
Switch the current working directory.
With no argument, switch to the
.B $HOME
directory.
.IS "\fI[line][,line] \fBchange \fI[\*(QLx]\fR"
Replace the range of lines with the contents of cut-buffer
.IR x .
.IS "\fBchdir \fI[directory]\fR"
Same as the
.B cd
command.
.II "color, setting on terminal"
.IS "\fBcolor \fI[when] [[type] color] [on color]\fR"
Set the screen's colors.
This command works only if you have an ANSI-compatible color terminal.
.I when
defines the type of text whose color is being manipulated:
.BR normal ,
.BR standout ,
.BR bold ,
.BR underlined ,
.BR italic ,
.BR popup ,
and
.BR quit .
The default is normal.
You may use the first letter of each as an abbreviation.
.I color
can be one of the following:
.DS
.B
.ta 0.5i 1.5i 2.5i 3.5i 4.5i
	black	blue	green	cyan
	red	magenta	brown	white
	yellow	gray	grey
.DE
.IP
Valid color
.IR type s
can be one of the following:
.BR light ,
.BR bright ,
or
.BR blinking .
.sp \n(pDu
The first use of
.B color
.I must
specify both the foreground and background colors;
the background color thereafter defaults to the background color of
normal text.
For example, the commands
.DM
	color light cyan on blue
	color b bright white
.DE
.IP
set the normal text to light cyan in the foreground and a blue background;
and then set the foreground color for bold text to bright white.
.IP
Not every valid
.B color
command works as expected on the system console,
due to limitations in the current release of the
.B ansipc
device driver.
.IS "\fI[line][,line] \fBcopy \fItargetline\fR"
Copy the range of lines to after the
.IR targetline .
.IS "\fI[line][,line] \fBdelete \fI[\*(QLx]\fR"
Move the range of lines into cut buffer
.IR x .
.IS "\fBdigraph\fI[!] [XX [Y]]\fR"
Set
.I XX
as a digraph for
.IR Y .
With no arguments, display all currently defined digraphs.
With one argument, undefine the argument as a digraph.
.IS "\fBedit\fI[!] [file]\fR"
Edit a file not named on the
.B elvis
command line.
.IS "\fBelse\fR"
This command is used with the colon-mode command
.B if
to execute other commands conditionally.
For more information, see the section
.IR "Conditional Commands " ,
below.
.IS "\fBerrlist\fI[!] [errlist]\fR"
Find the next error message in file
.BR errlist ,
as generated through
.BR elvis 's
.B cc
or
.B make
commands.
.IS "\fBfile \fI[file]\fR"
With an argument, change the output file to
.IR file .
Without an argument, print information about the current output file.
.IS "\fI[line][,line] \fBglobal \fI/regexp/ command\fR"
Search the range of lines for all lines that contain the regular expression
.IR regexp ,
and execute
.I command
upon each.
.IS "\fBif\fR"
This command is used to execute other commands conditionally.
For more information, see the section
.IR "Conditional Commands " ,
below.
.IS "\fI[line] \fBinsert\fR"
Insert text before the current line.
.IS "\fI[line][,line] \fBjoin\fR"
Concatenate the range of lines into one line. 
.IS "\fI[line][,line] \fBlist\fR"
Display the requested range of lines, making all embedded control
characters explicit.
.IS "\fBmake \fI[target]\fR"
Same as the
.B cc
command, except that
.B make
is executed.
.IS "\fBmap\fI[!] key mapped_to\fR"
Remap
.I key
to
.IR mapped_to .
Normally, remapping applies just to visual-command mode; `!' tells
.B elvis
to remap the key under all modes.
With no arguments, show all current key mappings.
.IS "\fI[line] \fBmark \fIx\fR"
Set a mark on
.IR line ,
and name it
.IR x .
.IS "\fBmkexrc\fR"
Save current configuration into file
.BR \&./.exrc ,
which will be read next time you invoke
.BR elvis .
.IS "\fI[line][,line] \fBmove \fItargetline\fR"
Move the range of lines to after
.IR targetline .
.IS "\fBnext\fI[!] [files]\fR"
Switch to the next file on the
.B elvis
command line.
.IS "\fBNext\fI[!]\fR"
Switch to the preceeding file on the
.B elvis
command line.
.IS "\fI[line][,line] \fBnumber\fR"
Display the range of lines, with line numbers.
.IS "\fBor\fR"
This command is used with the colon-mode command
.B if
to execute other commands conditionally.
For more information, see the section
.IR "Conditional Commands " ,
below.
.IS "\fBpop\fR"
Pop the tag stack \(em that is, return to the most recently tagged position.
.B elvis
removes that tag from the tag stack.
.IS "\fBprevious\fI[!]\fR"
Switch to the preceeding file on the
.B elvis
command line.
.IS "\fI[line][,line] \fBprint\fR"
Display the specified range of lines.
.IS "\fI[line] \fBput \fI[\*(QLx]\fR"
Copy text from cut buffer
.I x
after the current line.
.IS "\fBquit\fI[!]\fR"
Quit
.BR elvis ,
and return to the shell.
.IS "\fI[line] \fBread \fIfile\fR"
Read the contents of
.I file
and insert them after
.B line
(default, the last line).
.IS "\fBrewind\fI[!]\fR"
Switch to the first file on the
.B elvis
command line.
.IS "\fI[line[\fB,\fIline]]\fB\fBs/\fIoldstring\fB/\fInewstring\fB/\fI[\fBg\fI]\fR"
Substitute the first instance of
.I newstring
for
.IR oldstring .
If no range of lines is indicated, the substitution is performed only on the
current line.
To change every instance of
.I oldline
into
.I newline
on a line, append the suffix
.B g
(``global'')
to this command.
.IP
The command
.B s
with no arguments repeats the previous substitution.
It is a synonym for the command
.BR & ,
described below.
.IS "\fBset \fI[options]\fR"
Set an
.B elvis
option.
For details, see the section on \fIset Options\fR, below
.IS \fBshell\fR
Invoke a shell.
.IS "\fBsource \fIfile\fR"
Read a set of colon-mode commands from
.IR file ,
and execute them.
.IS "\fI[line][,line] \fBsubstitute \fI/regexp/replacement/[p][g][c]\fR"
For the range of lines,
replace the first instance of
.I regexp
with
.IR replacement .
.I p
tells
.B elvis
to print the \fIlast\fR line upon which a substitution was performed.
.I g
means perform a global substitution, i.e., replace all instances of
.I regexp
on each line with
.IR replacement .
.I c
tells
.B elvis
to ask for confirmation before performing each substitution.
.IS "\fBtag\fI[!] tagname\fR"
Find
.I tagname
in file
.BR tags ,
which records information about all tags.
If found, jump to the file and line upon which the tag is set.
.IS "\fBthen\fR"
This command is used with the colon-mode command
.B if
to execute other commands conditionally.
For more information, see the section
.IR "Conditional Commands " ,
below.
.IS "\fI[line][,line] \fBto \fItargetline\fR"
Copy the range of lines to after the
.IR targetline .
.IS "\fBunabbr \fIword\fR"
Unabbreviate
.IR word .
.IS "\fBundo\fR"
Undo the last editing command.
.IS "\fBunmap\fI[!] key\fR"
Unmap
.IR key .
.IS "\fBversion\fR"
Display the current version of
.BR elvis .
.IS "\fI[line][,line] \fBvglobal \fI/regexp/ command\fR"
Search the range of lines for all lines that do not
contain the regular expression
.IR regexp ,
and execute
.I command
upon each.
.IS "\fBvisual\fR"
Enter visual-command mode.
.IS "\fBwq\fR"
Save the changed file, and exit.
.IS "\fI[line][,line] \fBwrite\fI[!] [[>>]file]\fR"
Write the file being edited into
.IR file .
With the
.I >>
argument, append the edited text onto the end of
.IR file .
.IS "\fBxit\fI[!]\fR"
Same as the
.B wq
command, described above, except that it does not write files that have
not changed.
.IS "\fI[line][,line] \fByank \fI[\*(QLx]\fR"
Copy the range of lines into cut buffer
.IR x .
.IS "\fI[line][,line] \fB! \fIcommand\fR"
Execute
.I command
under a subshell, then return.
.IS "\fI[line][,line] \fB<\fR"
Shift the range of lines left by one tabwidth.
.IS "\fI[line][,line] \fB=\fR"
With no range of lines specified, print the number of the current line.
With line arguments, print the endpoints of the lines in question, and
the number of lines that lie between them.
(Remember,
.I line
can be a regular expression as well as a number.)
.IS "\fI[line][,line] \fB>\fR"
Shift the range of lines right by one tabwidth.
.IS "\fI[line][,line] \fB&\fR"
Repeat the last substitution command.
.IS "\fB@ "x\fR"
Read the contents of cut-buffer
.I x
as a set of colon-mode commands, and execute them.
With no arguments, list all current settings.
.IS "\e@\fR"
Beginning with release 1.8,
.B elvis
replaces the escape sequence \fB\e@\fR
by the word that the cursor is on.
This works in two special contexts:
in regular expressions, and in any
.B ex
command that also replaces `%' with the current file name.
This escape sequence can simplify writing certain kinds of macros.
.SH "Conditional Commands"
Beginning with release 1.8pl3,
.B elvis
supports conditional commands.
Some of these commands set a conditional-execution flag;
others examine that flag and perform (or do not perform) commands
if the flag is set.
You cannot nest conditional commands.
.PP
The colon-mode commands
.BR if ,
.BR and ,
and
.B or 
test for a condition.
Their syntax is typical:
each must be followed by an expression, and
.B and
and
.B or
must follow an initial
.B if
command.
Each command tests for a single condition.
That condition may involve examining the options set by the command
.B set
(which are described in detail in the next section),
set by
.B termcap
values, or by constants.
.PP
Colon-mode commands
.B then
and
.B else
execute commands conditionally, based upon the value of the
conditional-execution flag set by a preceding
.B if
command.
.PP
These commands most often are embedded in an initialization file,
to initialize
.B elvis
properly under a variety of conditions.
The following gives an example
.B if
command that can be embedded in a user's
.B .exrc
file.
The command correctly sets up the colors for both the system console and for
an X terminal window.
It works around the fact that the console can handle color, but an
X terminal window cannot:
.DM
	if term="console"
	then color yellow on blue | color quit white on blue
	else color black on white
.DE
.PP
To disable these commands, add
.B \-DNO_IF
to
.BR CFLAGS ,
then recompile
.BR elvis .
.SH "set Options"
As noted above, the command
.B set
can set
.BR elvis 's
internal options.
Options come in three flavors:
\fIboolean,\fR which turn on or off a feature of the editor;
\fIstring\fR which define the string associated with a particular action;
(e.g., the name of a command or feature);
and \fInumeric\fR, which set a dimension for the editor
(e.g., the number of rows or columns on the terminal screen).
To turn off a boolean option, prefix it with the string ``no''.
.PP
The following lists the options that
.B set
recognizes.
Assume that the boolean options are on, unless the entry says otherwise:
.IP "\fBautoindent\fR (boolean)" 1.5i
Auto-indent during input?
Default is
.BR no .
.IS "\fBautoprint\fR (boolean)"
When in
.B ex
mode, print the current line.
.IS "\fBautotab\fR (boolean)"
Can auto-indent use tabs?
.IS "\fBautowrite\fR (boolean)"
Is auto-write on when switching files?
Default is
.BR no .
.IS "\fBbeautify\fR (boolean)"
Should the editor strip control characters from a file?
Default is
.BR no .
.IS "\fBcharattr\fR (boolean)"
Interpret \efX sequences?
Default is
.BR no .
.IS "\fBcc\fR (string)"
Name of the C compiler.
Default is
.BR "cc \-c" .
.IS "\fBcolumns\fR (numeric)"
Width of the screen.
Default is 80.
.IS "\fBdigraph\fR (boolean)"
Recognize digraphs?
Default is
.BR no .
.IS "\fBdirectory\fR (string)"
Where are temporary files kept?
Default is
.BR /usr/tmp .
.IS "\fBedcompatible\fR (boolean)"
Remember ``:s//'' options?
Default is
.BR no .
.IS "\fBequalprg\fR (boolean)"
Program to run for the `=' operator.
Default is
.BR fmt .
.IS "\fBerrorbells\fR (boolean)"
Beep when an error occurs.
.IS "\fBexrc\fR (boolean)"
Read the
.B ./.exrc
file?
Default is
.BR no .
.IS "\fBexrefresh\fR (boolean)"
Write lines individually when in
.B ex
mode.
.IS "\fBflash\fR (boolean)"
Use visible alternative to bell.
.IS "\fBflipcase\fR (string)"
Non-ASCII chars flipped by the tilde character `~'.
Default is the NULL string.
.IS "\fBhideformat\fR (boolean)"
Hide text formatter commands.
.IS "\fBignorecase\fR (boolean)"
Make searches case sensitive.
While in
.B ignorecase
mode, the searching mechanism does not distinguish between an upper-case letter
and its lower-case form.
In
.B noignorecase
mode, upper case and lower case are treated as being different.
Default is
.BR no .
.IS "\fBinputmode\fR (boolean)"
Start
.B vi
in insert mode?
Default is
.BR no .
.IS "\fBkeytime\fR (numeric)"
Timeout for mapped key entry.
Default is two.
.IS "\fBkeywordprg\fR (string)"
Path name of program invoked by \fBshift-K\fR.
Default is
.BR ref .
.IS "\fBlines\fR (numeric)"
Number of lines on the screen.
Default is 25.
.IS "\fBlist\fR (boolean)"
Display lines in
.B list
mode?
Default is
.BR no .
.IS "\fBmagic\fR (boolean)"
Enable the use of regular expressions in a search.
While in
.B magic
mode, all meta-characters behave as described above.
In
.B nomagic
mode, only
.B ^
and
.B $
retain their special meaning.
.IS "\fBmake\fR (string)"
Name of the ``make'' program.
Default is
.BR make .
.IS "\fBmesg\fR (boolean)"
Allow messages from other users?
.IS "\fBmodelines\fR (boolean)"
Are mode lines processed?
Default is
.BR no .
.IS "\fBmore\fR (boolean)"
Pause between messages?
.IS "\fBnearscroll\fR (numeric)"
This governs when to scroll versus when to redraw the screen.
If you move the cursor more than the number of lines set by this option,
.B elvis
redraws the screen; otherwise, it scrolls the screen.
The default is 15 lines.
.IS "\fBnovice\fR (boolean)"
Set options for ease of use?
Default is
.BR no .
.IS "\fBnumber\fR (boolean)"
Turn on line numbering.
.IS "\fBparagraphs\fR (string)"
Names of
.B nroff
``paragraph''
commands.
Default is
.BR PPppIPLPQP .
.IS "\fBprompt\fR (boolean)"
Show `:' prompt in \fBex\fR mode.
.IS "\fBreadonly\fR (boolean)"
Prevent overwriting of original file.
Default is
.BR no .
.IS "\fBremap\fR (boolean)"
Allow key maps to call other key maps.
.IS "\fBreport\fR (numeric)"
Report when a given number of changes occur.
Default is five.
.IS "\fBruler\fR (boolean)"
Display line and column numbers.
Default is
.BR no .
.IS \fBsafer\fR
Toggle
.B elvis'
security option.
This option is set temporarily during the execution of any
command from modeline or
.BR ./.exrc .
It disables the following commands:
.DS
.B
.ta 0.5i 1.5i 2.5i 3.5i 4.5i
	:!	:Next	:abbreviate	:args	:cc
	:cd	:chdir	:ex	:file	:make
	:map	:mkexrc	:next	:pop	:previous
	:rewind	:shell	:stop	:suspend	:tag
	:unab	:unmap	:visual	:write
.DE
.IP
Note that
.B "set safer"
does not disable
.BR :wq ,
as this command does not let the user name the file into which to write.
.B :read
is still allowed, but it will not let the user read from a filter.
.IP
.B "set safer"
forbids the user from altering the following options:
.DS
.B
.ta 0.5i 1.75i 3.0i 4.5i
	autowrite	cc	directory	equalprg
	keywordprg	make	shell	trapunsafe
.DE
.IP
It also disables wildcard expansion and the visual `!' command.
.IS "\fBscroll\fR (numeric)"
Set the number of lines the screen scrolls with the \fB<ctrl-D>\fR
and \fB<ctrl-U>\fR commands.
Default is 12.
.IS "\fBsections\fR (string)"
Names of
.B nroff
``section''
commands.
Default is
.BR NHSHSSSEse .
.IS "\fBshell\fR (string)"
Path name of the shell.
Default is
.BR /bin/sh .
.IS "\fBshowmatch\fR (boolean)"
Show all matching parentheses, brackets, and braces.
Default is
.BR no .
.IS "\fBshowmode\fR (boolean)"
Say when editor is in input mode.
Default is
.BR no .
.IS "\fBshiftwidth\fR (numeric)"
Set number of characters the \fB<\fR and \fB>\fR commands shift the screen.
Default is eight.
.IS "\fBsidescroll\fR (numeric)"
Set number of columns the editor scrolls.
Default is eight.
.IS "\fBsync\fR (boolean)"
Call
.B sync()
often?
Default is
.BR no .
.IS "\fBtabstop\fR (numeric)"
Number of columns set by a tab character.
Default is eight.
.IS "\fBtaglength\fR (numeric)"
Number of significant characters in a tag name.
Default is zero.
.IS "\fBtags\fR (string)"
Name the list of ``tags'' files that
.B elvis
can read.
.IS "\fBtagstack\fR (boolean)"
Enable the tagstack.
Default is
.BR no .
.IS "\fBterm\fR (string)"
Name of the current terminal's
.B termcap
entry.
Default is
.BR $TERM .
.IS "\fBterse\fR (boolean)"
Give shorter error messages?
Default is
.BR no .
.IS "\fBtimeout\fR (boolean)"
Distinguish
.B <esc>
from an arrow key?
.IS "\fBwarn\fR (boolean)"
Warn if a file has been modified?
.IS "\fBwindow\fR (numeric)"
Number of lines to redraw after long move.
Default is 24.
.IS "\fBwrapmargin\fR (numeric)"
Left margin to use when wrapping long lines in input mode.
Default is zero.
.IS "\fBwrapscan\fR (boolean)"
Searches wrap from end to beginning of the file.
.IS "\fBwriteany\fR (boolean)"
Let the write command
.B :w
clobber a file.
Default is
.BR no .
.SH "Input-Mode Commands"
Most keystrokes are interpreted as being text and
inserted directly into the text; however, some keystrokes are
still interpreted as commands.
Thus, you can perform an entire session of simple editing
directly within input mode without switching to either of the
command modes.
.PP
The following summarizes the commands that can be executed
directly within input mode:
.IP \fB<ctrl-A>\fR 1.25i
Insert a copy of the last input text.
.IS \fB<ctrl-C>\fR
Send the signal
.B SIGINT
to interrupt a command.
.IS \fB<ctrl-D>\fR
Delete one indent character.
.IS \fB<ctrl-H>\fR
Erase the character before the cursor.
.IS \fB<ctrl-L>\fR
Redraw the screen.
.IS \fB<ctrl-M>\fR
Insert a newline.
.IS \fB<ctrl-P>\fR
Insert the contents of the cut buffer.
.IS \fB<ctrl-R>\fR
Redraw the screen, like \fB<ctrl-L>\fR.
.IS \fB<ctrl-T>\fR
Insert an indent character.
.IS \fB<ctrl-U>\fR
Move to the beginning of the line.
When you are typing a command line or search pattern on the bottom line,
.B <ctrl-U>
backspaces over all characters typed so far.
.IS \fB<ctrl-V>\fR
Insert the following keystroke, even if special.
.IS \fB<ctrl-W>\fR
Backspace to the beginning of the current word.
.IS \fB<ctrl-Z><ctrl-Z>\fR
Write the file and exit
.BR elvis .
.IS \fB<ctrl-Z>\fR
Save the file if it has been modified, but do not exit from
.BR elvis .
This works only if you have set the mode
.BR autowrite .
.IS \fB<esc>\fR
Shift from input mode to visual-command mode.
.IS \fB<del>\fR
Delete the current character.
.PP
When
.B elvis
is in input mode, you can use the keystroke
.B <ctrl-O>
to invoke
.I some
visual commands without exiting from input mode.
For example, when you are in input mode, typing
.B <ctrl-O>J
moves down a line but leaves you in input mode.
.SH "Keyboard Macros"
.B elvis
Beginning with release 1.8,
.B elvis
can record keystokes into a cut buffer.
This is equivalent to a \*(ME ``keyboard macro''.
.PP
The following commands manipulate keyboard macros:
.IP \fB[a\fR
Open a keyboard macro.
.B elvis
executes all subsequent keystrokes as normal, but also records them within
a temporary buffer.
.IP \fB]a\fR
Stop recording keystrokes, and copy the keystrokes into the cut buffer.
.IP \fB@a\fR
To replay the recorded keystrokes.
.SH "Command-line Options"
.B elvis
lets you name up to 27 files on the command line,
thus allowing you to edit up to 27 files simultaneously.
The ``next file'' and ``previous file'' commands described above
allow you to shift from
one file to another during the same editing session; in this way, for
example, you can cut text from one file and paste it into another.
.PP
.B elvis
recognizes the following command-line options:
.IP \fB-r\fP
Recover a previous edit.
.IS \fB-R\fR
Invoke
.B elvis
in ``read-only'' mode.
This is equivalent to invoking
.B elvis
via the link
.BR view .
.IS \fB\-s\fR
Invoke
.B elvis
in ``safer'' mode.
This is equivalent to the command
.BR "set safer" ,
described above.
.IS "\fB\-t \fItag\fR"
Begin editing at
.IR tag .
.IS "\fB-m \fI[ file ]\fR"
Invoke
.B elvis
in error-handling mode.
It searches through \fIfile\fP for something that looks like
an error message from a compiler, then positions the cursor at
that point for editing.
.IS \fB-e\fP
Begin in colon-command mode.
.IS \fB-v\fP
Begin in visual-command mode.
.IS \fB-i\fP
Begin in input mode.
.IS "\fB\-w \fIwinsize\fR"
Set the value of option
.BR window ,
which sets the size of the screen with which
.B elvis
works,
to
.IR winsize .
.B window
is described below.
.IS \fB+\fIcommand\fR
Execute
.I command
immediately upon beginning editing.
For example
.DM
	elvis +237 foo
.DE
causes \fBelvis\fP to move directly to line
237 immediately upon beginning to edit file
.BR foo .
.SH "Regular Expressions"
.II "regular expression"
.B elvis
uses regular expressions for searching and substitutions.
A regular expression is a text string in which some characters have
special meanings.
This is much more powerful than simple text matching.
.PP
.BR elvis 's
.B regexp
package treats the following one- or two-character
strings (called meta-characters) in special ways:
.IS "\fB\e( \e)\fR"
Delimit subexpressions.
When the regular expression matches a chunk of text,
.B elvis
remembers which portion of that chunk matched the subexpression.
The command
.DM
	:s/regexp/newtext/
.DE
.sp \n(pDu
command makes use of this feature.
.IS \fB^\fR
Match the beginning of a line.
For example, to find
.B foo
at the beginning of a line, use the regular expression
.BR /^foo/ .
Note that
.B ^
is a metacharacter only if it occurs at the beginning
of a regular expression; anywhere else, it is treated as a normal character.
.IS \fB$\fR
Match the end of a line.
It is a metacharacter only when it occurs at the end of a regular expression;
elsewhere, it is treated as a normal character.
For example, the expression
.B /$$/
searches for a dollar sign at the end of a line.
.IS \fB\e<\fR
Match a zero-length string at the beginning of a word.
A word is a string of one or more letters and digits;
it can begin at the beginning of a line or after one or more
non-alphanumeric characters.
.IS \fB\e>\fR
Matches a zero-length string at the end of a word.
A word can end at the end of the line or before one or more
non-alphanumeric characters.
For example,
.B /\e<end\>/
finds any instance of the word
.BR end ,
but ignores any instances of ``end'' inside another word, such as ``calendar''.
.IS \fB.\fR
Match any single character.
.IS \fB[\fIcharacter-list\^\fB]\fR
Match any single character from the
.IR character-list .
Inside the
.IR character-list ,
you can denote a span of characters by writing the first
and last characters, with a hyphen between them.
If the character-list is preceded by a
.BR ^ ,
then the list is inverted \(em it matches all characters not mentioned in
the list.
For example,
.B /[a-zA-Z]/
matches any letter, and
.B "/[^ ]/"
matches anything other than a blank.
.IS "\fB\e{\fIn\fB\e}\fR"
Repeat the preceding expression
.I n
times.
This operator can only
be placed after something that matches a single character.
For example,
.B /^-\e{80\e}$/
matches a line of eighty hyphens, and
.B /\e<[a-zA-Z]\e{4\e}\e>/
matches any four-letter word.
.IS "\fB\e{\fIn\fB,\fIm\fB\e}\fR"
Repeat the
preceding single-character expression between
.I n
and
.I m
times, inclusive.
If the
.I m
is omitted (but the comma is present) then it is taken to be infinity.
For example,
\fB/"[^"]\e{3,5\e}"/\fR
matches any pair of quotation marks that
enclose three, four, or five non-quotation characters.
.IS \fB*\fR
Repeat the preceding single-character expression zero or more times.
For example,
.B /.*/
matches a whole line.
.IS \fB/+\fR
Repeat the preceding single-character expression one or more times.
It is equivalent to
.BR \e{1,\e} .
For example,
.B /.\e+/
matches a whole line, but only if the line contains at least one character.
It does not match empty lines.
.IS \fB/?\fR
The preceding single-character expression is optional \(em that is, that it
can occur zero or one times.
It is equivalent to
.BR \e{0,1\e} .
For example,
.B "/no[- ]\?one/"
matches
.BR "no one" ,
.BR "no-one" ,
and
.BR noone .
.PP
Anything else is treated as a normal character that must exactly match
a character from the scanned text.
The special strings may all be preceded by a backslash to
force them to be treated normally.
.SH Substitutions
The command
.B :s
has at least two arguments:
a regular expression and a substitution string.
The text that matches the regular expression is
replaced by text that is derived from the substitution string.
.PP
Most characters in the substitution string are copied into the
text literally but a few have special meaning:
.IP \fB&\fR
Insert a copy of the original text.
.IS \fB~\fR
Insert a copy of the previous replacement text.
.IS \fB\e1\fR
Insert a copy of that portion of the original text that
matched the first set of parentheses.
.IS \fB\e2-\e9\fR
Do the same for the second and all subsequent pairs of parentheses.
.IS \fB\eU\fR
Convert all characters of any later
.B &
or
.B \e#
to upper case.
.IS \fB\eL\fR
Convert all characters of any later
.B &
or
.B \e#
to lower case.
.IS \fB\eE\fR
End the effect of
.B \eU
or
.BR \eL .
.IS \fB\eu\fR
Convert the first character of the next
.B &
or
.B \#
to upper case.
.IS \fB\el\fR
Convert the first character of the next
.B &
or
.B \e#
to lower case.
.PP
These may be preceded by a backslash to force them to be treated normally.
.PP
If
.B nomagic
mode is in effect, then
.B &
and
.B ~
will be treated normally,
and you must write them as
.B \e&
and
.B \e~
for them to have special meaning.
.SH "Preserving Text"
Should
.B elvis
sense that it is about to die unexpectedly, it invokes the command
.B elvprsv
to save the temporary file in which it manipulates the file you are editing.
To recover this saved file, use the command
.BR elvrec .
Both commands are described in the Lexicon.
.SH "Initialization Files"
.II .exrc
When you invoke
.BR elvis ,
it searches for file
.BR $HOME/.exrc .
If it finds that file, it reads the file and attempts to execute its contents
as a series of
.B ex
commands.
(As noted earlier,
.B ex
commands simply are
.B elvis'
set of colon-mode commands, but without the preceding colon.)
.PP
Usually, this file is used to contain instances of the commands
.B set
and
.BR color ,
to set up
.B elvis'
environment and appearance to your taste.
For example, if your
.B .exrc
file contains the commands
.DM
	color white on blue
	set ignorecase
	set inputmode
.DE
.PP
then
.B elvis
sets the screen's background color to blue and its foreground color to white;
turn on
.B ignorecase
mode (that is, string searches will ignore case), and come up in input mode
rather than command mode.
.PP
.II elvis.rc
The file
.B $HOME/elvis.rc
is a synonym for
.BR $HOME/.exrc .
.PP
.II .exfilerc
When you invoke
.BR elvis ,
it also searches for the file
.B $HOME/.exfilerc .
This file holds
.B ex
commands that
.B elvis
executes every time it loads a text file for editing.
You can embed
.B if
commands in this file so that
.B elvis
handles special classes of files uniquely.
For example, you can use an
.B if
command to tell
.B elvis
to handle files with the suffix
.B .c
differently from other files; this lets you invoke special editing functions
for C programs.
.SH Examples
The first example changes every occurrence of
``utilize'' to ``use'':
.DM
	:%s/utilize/use/g
.DE
.PP
The next example deletes all white space that occurs at the end of a line
anywhere in the file.
(The brackets contain a single space and a single tab character):
.DM
	:%s/[   ]\+$//
.DE
The next example converts the current line to upper case:
.DM
	:s/.*/\U&/
.DE
.PP
The next example underlines each letter in the current line, by changing it
into an
.B "underscore backspace letter"
sequence.
(The
.B <ctrl-H>
is entered as \fB<ctrl-V><backspace>\fR):
.DM
	:s/[a-zA-Z]/_^H&/g
.DE
.PP
The last example locates the last colon in a line, and swaps the text before
the colon with the text after the colon.
The first pair of parentheses
delimits the stuff before the colon, and the second pair delimits the
stuff after.
In the substitution text,
.B \e1
and
.B \e2
are given in reverse order to perform the swap:
.DM
	:s/\e(.*\e):\e(.*\e)/\e2:\e1/
.DE
.SH Environment
.B elvis
reads the following environmental variables:
.IP \fBTERM\fR
This names your terminal's entry in the
.B termcap
or
.B terminfo
data base.
.IP \fBTERMCAP\fR
Optional.
If your system uses
.BR termcap ,
and the
.B TERMCAP
variable is not set, then
.B elvis
reads your terminal's definition from
.BR /etc/termcap .
If
.B TERMCAP
is set to the full path name
of a file (beginning with a `/'), it reads your terminal's description from
the named file instead of from
.BR /etc/termcap .
If
.B TERMCAP
is set to a value that does not begin with a `/', then
.B elvis
assumes that its value is the full
.B termcap
entry for your terminal.
.IP \fBTERMINFO\fR
Optional.
.B elvis
treats this exactly like the environmental variable
.BR TERMCAP ,
except for the
.B terminfo
data base.
.IP \fBLINES\fR
.IS \fBCOLUMNS\fR
Optional.
These variables, if set, override the screen-size values
given in the
.B termcap
or
.B terminfo
description of your terminal
On windowing systems such as X,
.B elvis
has other ways to determine the screen size,
so you should probably leave these variables unset.
.IP \fBEXINIT\fR
Optional.
This variable can hold
.B ex
commands that
.B elvis
executes before it reads any \fB.exrc\fR files.
.IP \fBSHELL\fR
Optional.
This variable sets the default value
for the
.B shell
option, which determines which shell program
.B elvis
uses to perform wildcard expansion in file names,
and to execute filters or external programs.
The default value is
.BR /bin/sh .
.IP \fBHOME\fR
This variable should be set to the name of your home directory.
.B elvis
looks for its initialization file there.
If
.B HOME
is not set, then
.B elvis
does not execute the initialization file.
.IP \fBTAGPATH\fR
Optional.
This variable is used by the program
.BR ref .
See "ref" for more information.
.SH "Bug Fixes from Release 1.7"
Beginning with release 4.2.10, \*(CO includes
.B elvis
release 1.8pl3.
The following describes the bugs that this release fixes
The initial release of
.B elvis
1.8 includes the following bug fixes:
.IP \(bu 0.3i
Most screen update bugs are fixed.
Most of ones that were not fixed
can be avoided by
.BR ":set nooptimize" .
.IP \(bu
A bug in the visual `@' command was fixed.
This bug can be blamed
for most of
.BR elvis '
incompatibility with fancy macro packages.
.B elvis
can now run the ``Bouncing Ball,'' ``Word Completion,'' and ``Turing''
macros with no changes.
NB, it still cannot run ``Towers of Hanoi.''
.PP
The following bug fixes are included in patch-level 1 (\fBpl1\fR):
.IP \(bu 0.3i
Fixed a bug that caused core dump when you use the `}' command
used on blank line after last paragraph in file.
.IP \(bu
Fixed a bug that caused loss of text with
.B AutoIndent
enabled, when two newlines are inserted into the middle of a line.
.PP
The following bug fixes are included in patch-level 2 (\fBpl2\fR):
.IP \(bu 0.3i
Fixed a security hole on some \*(UN systems.
.IP \(bu
After
.BR :w ,
.B #
refers to the file just written.
.IP \(bu
Fixed bug in tag lookup.
.IP \(bu
The compiler error parser now allows `_' in a file name.
.IP \(bu
Fixed a bug that caused some blank lines in the file
.B .exrc
to be interpreted as
.B :p
commands.
.IP \(bu
Increased the limit on word size for the command
.BR <ctrl-A> .
The old limit was 30; the new limit is 50.
If you exceed this limit,
.B elvis
will now
search for the longest possible substring; before, it would bomb.
To change the limit, add
\fB\-DWSRCH_MAX=\fIn\fR
(where
.I n
gives the limit on word size)
to
.B CFLAGS
in the
.BR Makefile ,
then recompile
.BR elvis .
.IP \(bu
Increased the size of an array used while showing option settings.
The old size could overflow if you did a
.B ":set all"
on some systems.
Now, the maximum size is calculated at compile time, and the array
is declared to this size.
.IP \(bu
The command
.B 5r<ctrl-M>
now leaves the cursor in the right place.
In earlier releases,
.B 5r<ctrl-M>
would replace five characters with five newline characters, and leave
the cursor five lines lower.
Release 1.8 replaced five characters with a single newline character,
to mimic the real
.B vi
better, but still left the cursor five lines lower.
This patch finally makes it right.
.PP
The following bug fixes are included in patch-level 2 (\fBpl2\fR):
.IP \(bu 0.3i
Corrected bugs in
.B :tag
and
.BR :make ,
which caused tag addresses and
error messages to be forgotten after switching files.
The
.B .exfilerc
feature interacted with these bugs, and made them pretty obnoxious.
A similar bug caused the command
.B ":e +cmd file"
to start misbehaving; it has been fixed, too.
.IP \(bu
The option
.B window
now defaults to zero.
Zero is a special value, which means
``use as many rows as possible.''
Previously, this option defaulted
to the maximum number of rows available when
.B elvis
started (usually 24), which resulted in `@' signs appearing on the screen
if you resized the display while
.B elvis
was running.
This problem only showed up when you ran
.B elvis
in an X terminal window.
.IP \(bu
A bug has been fixed in autoindentation.
Previously, if you inserted a
newline before the first non-whitespace character on a line, then
everything after the insertion point was wiped out.
(This is different from the bug that
.B pl2
fixed.
.BR pl2 's
fix addresses a bug that affected
insertion of multiple newlines anywhere in a lines; this one affects
inserting a single newline before the first non-whitespace character.)
.IP \(bu
To avoid linking problems on various systems, the variable
.B kD
has been renamed
.BR kDel ,
and function
.B ioctl()
in
.B pc.c
renamed
.BR elvis_ioctl .
.IP \(bu
A bug that caused
.B :!
to clobber the value of
.B #
(i.e., the previous file name) has been fixed.
.IP \(bu
There is a bug that affects screen redraws after pasting (the visual
.B p
and
.B P
commands).
In an attempt to work around this bug,
.B elvis
will sometimes redraw the screen from scratch after a multi-line paste.
.IP \(bu
Some people have reported problems using
.B fmt
on non-English text.
I suspect that this is due to a faulty implementation of
.B isspace()
in the standard C library.
In release 1.8pl3,
.B fmt
does not use
.B isspace()
anymore; it uses a built-in macro which explicitly tests for
.B <space>
or
.BR <tab> .
This may solve the problem.
.SH Files
\fB/tmp/elv*\fR \(em Temporary files
.br
\fBtags\fR \(em Data base used by the \fBtags\fR command
.br
.II .exrc
\fB$HOME/.exrc\fR \(em File that sets personal defaults
.br
.II .exfilerc
\fB$HOME/.exfilerc\fR \(em File that sets defaults when a file is read
.br
.II elvis.rc
\fB$HOME/elvis.rc\fR \(em Same as \fB.exrc\fR
.SH "See Also"
.Xr "commands," commands
.Xr "ed," ed
.Xr "elvprsv," elvprsv
.Xr "elvrec," elvrec
.Xr "ex," ex
.Xr "fmt," fmt
.Xr "me," me
.Xr "vi," vi
.Xr "view" view
.SH Notes
.B elvis
returns zero if the file being edited was updated.
It returns one if the file was not updated,
and a different nonzero value if an error occurred.
.PP
Full documentation for
.B elvis
is included with this release in compressed file
.BR /usr/src/alien/Elvis.doc.Z .
.PP
.II "Kirkendall, Steve"
.B elvis
is copyright \(co 1990 by Steve Kirkendall,
and was written by Steve Kirkendall (kirkenda@cs.pdx.edu or
uunet!tektronix!psueea!eecs!kirkenda), assisted by numerous volunteers.
It is freely redistributable, subject to the restrictions noted in
included documentation.
Source code for \fBelvis\fR is available through the Mark Williams
bulletin board, USENET, and numerous other outlets.
