summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormichaels <michaels@openbsd.org>1996-08-20 22:55:38 +0000
committermichaels <michaels@openbsd.org>1996-08-20 22:55:38 +0000
commit24e643d60f02768434d232d00cf0f0dc8844984d (patch)
treed63aa9838cc39dc5895811f6a14f5870f59abace
parentonly close real socket (diff)
downloadwireguard-openbsd-24e643d60f02768434d232d00cf0f0dc8844984d.tar.xz
wireguard-openbsd-24e643d60f02768434d232d00cf0f0dc8844984d.zip
nvi 1.74
-rw-r--r--usr.bin/vi/FAQ10
-rw-r--r--usr.bin/vi/LICENSE (renamed from usr.bin/vi/COPYRIGHT)34
-rw-r--r--usr.bin/vi/README46
-rw-r--r--usr.bin/vi/USD.doc/vi.ref/Makefile26
-rw-r--r--usr.bin/vi/USD.doc/vi.ref/ex.cmd.roff1776
-rw-r--r--usr.bin/vi/USD.doc/vi.ref/merge.awk16
-rw-r--r--usr.bin/vi/USD.doc/vi.ref/ref.so127
-rw-r--r--usr.bin/vi/USD.doc/vi.ref/set.opt.roff949
-rw-r--r--usr.bin/vi/USD.doc/vi.ref/spell.ok270
-rw-r--r--usr.bin/vi/USD.doc/vi.ref/vi.cmd.roff2984
-rw-r--r--usr.bin/vi/USD.doc/vi.ref/vi.ref1270
-rw-r--r--usr.bin/vi/common/exf.c15
-rw-r--r--usr.bin/vi/common/msg.c63
-rw-r--r--usr.bin/vi/docs/USD.doc/edit/edittut.ms6
-rw-r--r--usr.bin/vi/docs/USD.doc/exref/ex.rm4
-rw-r--r--usr.bin/vi/docs/USD.doc/exref/ex.summary26
-rw-r--r--usr.bin/vi/docs/USD.doc/vi.man/vi.141
-rw-r--r--usr.bin/vi/docs/USD.doc/vi.ref/Makefile6
-rw-r--r--usr.bin/vi/docs/USD.doc/vi.ref/ex.cmd.roff32
-rw-r--r--usr.bin/vi/docs/USD.doc/vi.ref/merge.awk2
-rw-r--r--usr.bin/vi/docs/USD.doc/vi.ref/ref.so32
-rw-r--r--usr.bin/vi/docs/USD.doc/vi.ref/set.opt.roff32
-rw-r--r--usr.bin/vi/docs/USD.doc/vi.ref/vi.cmd.roff32
-rw-r--r--usr.bin/vi/docs/USD.doc/vi.ref/vi.ref108
-rw-r--r--usr.bin/vi/docs/USD.doc/vitut/vi.apwh.ms4
-rw-r--r--usr.bin/vi/docs/USD.doc/vitut/vi.in4
-rw-r--r--usr.bin/vi/docs/USD.doc/vitut/vi.summary10
-rw-r--r--usr.bin/vi/docs/changelog10
-rw-r--r--usr.bin/vi/docs/features5
-rw-r--r--usr.bin/vi/ex/ex.h11
-rw-r--r--usr.bin/vi/ex/ex_argv.c168
-rw-r--r--usr.bin/vi/ex/ex_cd.c125
-rw-r--r--usr.bin/vi/ex/ex_init.c8
-rw-r--r--usr.bin/vi/ex/ex_read.c23
-rw-r--r--usr.bin/vi/ex/ex_version.c22
-rw-r--r--usr.bin/vi/ex/version.h2
-rw-r--r--usr.bin/vi/include/ex_extern.h2
-rw-r--r--usr.bin/vi/include/vi_extern.h1
-rw-r--r--usr.bin/vi/install/recover.script46
-rw-r--r--usr.bin/vi/vi/v_txt.c11
-rw-r--r--usr.bin/vi/vi/vi.c8
-rw-r--r--usr.bin/vi/vi/vs_msg.c30
-rw-r--r--usr.bin/vi/vi/vs_refresh.c113
43 files changed, 429 insertions, 8081 deletions
diff --git a/usr.bin/vi/FAQ b/usr.bin/vi/FAQ
index dacfb0b536e..79546d184c4 100644
--- a/usr.bin/vi/FAQ
+++ b/usr.bin/vi/FAQ
@@ -1,4 +1,4 @@
-@(#)FAQ 8.10 (Berkeley) 8/10/96
+@(#)FAQ 8.12 (Berkeley) 8/17/96
Q: How can I get vi to display my character set?
A: Vi uses the C library routine isprint(3) to determine if a character
@@ -21,6 +21,10 @@ A: Vi uses the C library routine isprint(3) to determine if a character
HP-UX 10.X en_US.iso88591
SunOS 4.X iso_8859_1
SunOS 5.X iso_8859_1
+
+ If there's no other solution, you can use the print and noprint edit
+ options of vi to specify that a specific character is printable or not
+ printable.
Q: My map won't work!
A: One thing that you should immediately check if a vi map doesn't work
@@ -95,8 +99,8 @@ A: This is almost certainly a problem with the system's terminfo or
Q: The entire screen repaints on every keystroke!
A: Your system's curses implementation is broken. You should use the
- curses implementation provided with vi or a curses replacment such as
- ncurses. Eric Raymond is one of the maintainers of the freely
+ curses implementation provided with vi or a curses replacement such
+ as ncurses. Eric Raymond is one of the maintainers of the freely
redistributable ncurses package. You can download ncurses from
http://www.ccil.org/~esr/ncurses.html, or you can contact him at
esr@snark.thyrsus.com.
diff --git a/usr.bin/vi/COPYRIGHT b/usr.bin/vi/LICENSE
index 46d800c80c3..0ef3f3e3954 100644
--- a/usr.bin/vi/COPYRIGHT
+++ b/usr.bin/vi/LICENSE
@@ -1,8 +1,6 @@
/*-
* Copyright (c) 1991, 1992, 1993, 1994
* The Regents of the University of California. All rights reserved.
- * Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996
- * Keith Bostic. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -19,16 +17,6 @@
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
- * 5. The editor's :version command and the message it displays may not be
- * altered in any way, without the written permission of Keith Bostic,
- * other than to add supplemental information to the version's release
- * number and release date. For permission to change the :version command
- * or its message, contact Keith Bostic:
- *
- * Keith Bostic +1-508-287-4781
- * 394 E. Riding Dr. bostic@bostic.com
- * Carlisle, MA 01741
- * USA
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
@@ -42,3 +30,25 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
+
+/*
+ * Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996
+ * Keith Bostic. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following message.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following message in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. For permission to redistribute this program under conditions other
+ * than these, contact Keith Bostic.
+ *
+ * The vi program is shareware. You are welcome to copy, modify and share
+ * it with others under the conditions listed in the LICENSE file. If your
+ * company finds vi sufficiently useful that you would have purchased it,
+ * or your company wishes to redistribute it, contributions to the authors
+ * would be appreciated.
+ */
diff --git a/usr.bin/vi/README b/usr.bin/vi/README
index 2cb77083a3c..1664e11629d 100644
--- a/usr.bin/vi/README
+++ b/usr.bin/vi/README
@@ -1,29 +1,29 @@
-# @(#)README 8.143 (Berkeley) 7/9/96
+# @(#)README 8.146 (Berkeley) 8/18/96
-This is the README for nex/nvi, a freely redistributable replacement for
-the ex/vi text editors originally distributed as part of the Fourth
+This is the README for nex/nvi, a freely redistributable implementation
+of the ex/vi text editors originally distributed as part of the Fourth
Berkeley Software Distribution (4BSD), by the University of California,
Berkeley.
The source code for nex/nvi can be retrieved by using anonymous ftp to
-ftp.cs.berkeley.edu. The files ucb/4bsd/nvi.tar.Z and ucb/4bsd/nvi.tar.gz
-are the compressed and gzip'd archives, respectively, of version 1.71 of
-nex/nvi. This version is believed to be stable and reasonably problem
-free. The file ucb/4bsd/nvi.ALPHA.###.tar.gz is a gzip'd archive of the
-current alpha-test release of nex/nvi. This version reflects the current
-development tree, and is more likely to have unanticipated problems.
+ftp.cs.berkeley.edu. The file ucb/4bsd/nvi.tar.gz is the gzip'd archive,
+of version 1.71 of nex/nvi. This version is believed to be stable and
+problem free. The file ucb/4bsd/nvi-###.ALPHA.tar.gz is a gzip'd archive
+of the current alpha-test release of nex/nvi. This version reflects the
+current development tree, and will be more likely to have problems.
-See the file build/README for information on building nvi.
+See the file:
+ build/README for information on building nvi.
+ LAYOUT for a description of where everything is.
+ LICENSE for the copyright and redistribution terms.
-See the file LAYOUT for a description of where everything is.
+If you have any questions about nex/nvi, problems with it, or concerns
+about the conditions for redistribution, please contact me:
-See the file COPYRIGHT for the nex/nvi copyright and redistribution terms.
-
-If you have any questions about nex/nvi, or problems making it work,
-please contact me by electronic mail at one of the following addresses:
-
- uunet!bostic
- bostic@cs.berkeley.edu
+ Keith Bostic +1-508-287-4781
+ 394 E. Riding Dr. bostic@bostic.com
+ Carlisle, MA 01741
+ USA
Keith Bostic
@@ -46,8 +46,10 @@ o This software is several years old and is the product of many folks' work.
Sven Verdoolaege added the Perl5 interpreter.
-o Many, many people provided enhancements, bug reports and testing, far too
- many to individually thank.
+ Rob Mayoff provided the original Cscope support.
+
+o Many, many people suggested enhancements, and provided bug reports and
+ testing, far too many to individually thank.
o From the original vi acknowledgements, by William Joy and Mark Horton:
@@ -67,7 +69,7 @@ o Status:
This software is in beta test, and it's pretty stable. Almost all of the
historic functionality in ex/vi is there, the only major missing pieces
-are open mode and the lisp option.
+are open mode and the lisp edit option.
Nvi is largely 8-bit clean. This isn't difficult to fix, and was left in
during initial development to keep things simple. Wide character support
@@ -87,7 +89,7 @@ reproduce the bug, and I'll try to fix it locally. Stack traces of core
dumps are only rarely helpful -- an example file with a set of keystrokes
that causes the problem is almost invariably necessary. I know it's
annoying, but simply playing with the bug until you can reproduce it at
-will with minimal keystrokes is immensely helpful to me.
+will, with minimal keystrokes, is immensely helpful to me.
Please include the following in the bug report;
diff --git a/usr.bin/vi/USD.doc/vi.ref/Makefile b/usr.bin/vi/USD.doc/vi.ref/Makefile
deleted file mode 100644
index 80c3fe5011f..00000000000
--- a/usr.bin/vi/USD.doc/vi.ref/Makefile
+++ /dev/null
@@ -1,26 +0,0 @@
-# @(#)Makefile 8.16 (Berkeley) 8/15/94
-
-DIR= usd/13.viref
-SRCS= vi.ref ex.cmd.roff set.opt.roff vi.cmd.roff ref.so
-EXTRA= merge.awk spell.ok
-MACROS= -me
-CLEANFILES+=vi.ref.txt index index.so
-
-paper.ps: vi.ref index.so
- soelim vi.ref | ${TBL} | ${ROFF} > ${.TARGET}
-
-vi.ref.txt: vi.ref index.so
- soelim vi.ref | ${TBL} | groff ${MACROS} -Tascii > $@
-
-index.so: vi.ref
- # Build index.so, side-effect of building the paper.
- soelim vi.ref | ${TBL} | ${ROFF} > /dev/null
- sed -e 's/MINUSSIGN/\\-/' \
- -e 's/DOUBLEQUOTE/""/' \
- -e "s/SQUOTE/'/" \
- -e 's/ /__SPACE/g' < index | \
- sort -u '-t ' +0 -1 +1n | awk -f merge.awk | \
- sed -e 's/__SPACE/ /g' > index.so
- rm -f index
-
-.include <bsd.doc.mk>
diff --git a/usr.bin/vi/USD.doc/vi.ref/ex.cmd.roff b/usr.bin/vi/USD.doc/vi.ref/ex.cmd.roff
deleted file mode 100644
index a9cba6ae336..00000000000
--- a/usr.bin/vi/USD.doc/vi.ref/ex.cmd.roff
+++ /dev/null
@@ -1,1776 +0,0 @@
-.\" Copyright (c) 1994
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\" 3. All advertising materials mentioning features or use of this software
-.\" must display the following acknowledgement:
-.\" This product includes software developed by the University of
-.\" California, Berkeley and its contributors.
-.\" 4. Neither the name of the University nor the names of its contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" @(#)ex.cmd.roff 8.24 (Berkeley) 7/17/94
-.\"
-.SH 1 "Ex Description"
-.pp
-The following words have special meanings for
-.CO ex
-commands.
-.KY "<eof>"
-.IP "<eof>"
-The end-of-file character is used to scroll the screen in the
-.CO ex
-editor.
-This character is normally
-.LI <control-D> ,
-however, whatever character is set for the current terminal is used.
-.KY "line"
-.IP "line"
-A single-line address, given in any of the forms described in the
-section entitled
-.QB "Ex Addressing" .
-The default for
-.LI line
-is the current line.
-.KY "range"
-.IP "range"
-A line, or a pair of line addresses, separated by a comma or semicolon.
-(See the section entitled
-.QB "Ex Addressing"
-for more information.)
-The default for range is the current line
-.i only ,
-i.e.
-.QT \&.,. .
-A percent sign
-.PQ %
-stands for the range
-.QT 1,$ .
-The starting address must be less than, or equal to, the ending address.
-.KY "count"
-.IP "count"
-A positive integer, specifying the number of lines to be affected by
-the command; the default is 1.
-Generally, a count past the end-of-file may be specified, e.g. the
-command
-.QT "p 3000"
-in a 10 line file is acceptable, and will print from the current line
-through the last line in the file.
-.KY "flags"
-.IP "flags"
-One or more of the characters
-.QQ # ,
-.QQ p ,
-and
-.QQ l .
-When a command that accepts these flags completes, the addressed line(s)
-are written out as if by the corresponding
-.CO # ,
-.CO l
-or
-.CO p
-commands.
-In addition, any number of
-.QT +
-or
-.QT \-
-characters can be specified before, after, or during the flags, in which
-case the line written is not necessarily the one affected by the command,
-but rather the line addressed by the offset address specified.
-The default for
-.LI flags
-is none.
-.KY "file"
-.IP "file"
-A pattern used to derive a pathname; the default is the current file.
-File names are subjected to normal
-.XR sh 1
-word expansions.
-.pp
-Anywhere a file name is specified, it is also possible to use
-the special string
-.QT /tmp .
-This will be replaced with a temporary file name which can be used
-for temporary work, e.g.
-.QT ":e /tmp"
-creates and edits a new file.
-.pp
-If both a count and a range are specified for commands that use either,
-the starting line for the command is the
-.i last
-line addressed by the range, and
-.LI count - 1
-subsequent lines are affected by the command, e.g. the command
-.QT 2,3p4
-prints out lines 3, 4, 5 and 6.
-.pp
-When only a line or range is specified, with no command, the implied
-command is either a
-.CO list ,
-.CO number
-or
-.CO print
-command.
-The command used is the most recent of the three commands to have been
-used (including any use as a flag).
-If none of these commands have been used before, the
-.CO print
-command is the implied command.
-When no range or count is specified and the command line is a blank line,
-the current line is incremented by 1 and then the current line is displayed.
-.pp
-Zero or more whitespace characters may precede or follow the addresses,
-count, flags, or command name.
-Any object following a command name (such as buffer, file, etc.),
-that begins with an alphabetic character,
-should be separated from the command name by at least one whitespace
-character.
-.pp
-Any character, including
-.LI <carriage-return> ,
-.QT %
-and
-.QT #
-retain their literal value when preceded by a backslash.
-.SH 1 "Ex Commands"
-.pp
-The following section describes the commands available in the
-.CO ex
-editor.
-In each entry below, the tag line is a usage synopsis for the command.
-.pp
-Each command can be entered as the abbreviation
-(those characters in the synopsis command word preceding the
-.QQ [
-character),
-the full command (all characters shown for the command word,
-omitting the
-.QQ [
-and
-.QQ ]
-characters),
-or any leading subset of the full command down to the abbreviation.
-For example, the args command (shown as
-.QT ar[gs]
-in the synopsis)
-can be entered as
-.QT ar ,
-.QT arg
-or
-.QT args .
-.pp
-Each
-.CO ex
-command described below notes the new current line after it
-is executed, as well as any options that affect the command.
-.KY DOUBLEQUOTE
-.IP """"
-A comment.
-Command lines beginning with the double-quote character
-.PQ """"
-are ignored.
-This permits comments in editor scripts and startup files.
-.KY "<end-of-file>"
-.IP "<end-of-file>"
-Scroll the screen.
-Write the next N lines, where N is the value of the
-.OP scroll
-option.
-The command is the end-of-file terminal character, which may be
-different on different terminals.
-Traditionally, it is the
-.LI <control-D>
-key.
-.sp
-Historically, the
-.CO eof
-command ignored any preceding count, and the
-.LI <end-of-file>
-character was ignored unless it was entered as the first character
-of the command.
-This implementation treats it as a command
-.i only
-if entered as the first character of the command line, and otherwise
-treats it as any other character.
-.SS
-.SP Line:
-Set to the last line written.
-.SP Options:
-None.
-.SE
-.KY "!"
-.IP "! argument(s)"
-.Ip "[range]! argument(s)"
-Execute a shell command, or filter lines through a shell command.
-In the first synopsis, the remainder of the line after the
-.QT !
-character is passed to the program named by the
-.OP shell
-option, as a single argument.
-.sp
-Within the rest of the line,
-.QT %
-and
-.QT #
-are expanded into the current and alternate pathnames, respectively.
-The character
-.QT !
-is expanded with the command text of the previous
-.CO !
-command.
-(Therefore, the command
-.CO !!
-repeats the previous
-.CO !
-command.)
-The special meanings of
-.QT % ,
-.QT # ,
-and
-.QT !
-can be overridden by escaping them with a backslash.
-If no
-.CO !
-or
-.CO :!
-command has yet been executed, it is an error to use an unescaped
-.QT !
-character.
-The
-.CO !
-command does
-.i not
-do shell expansion on the strings provided as arguments.
-If any of the above expansions change the command the user entered,
-the command is redisplayed at the bottom of the screen.
-.sp
-.CO Ex
-then executes the program named by the
-.OP shell
-option, with a
-.b \-c
-flag followed by the arguments (which are bundled into a single argument).
-.sp
-The
-.CO !
-command is permitted in an empty file.
-.sp
-If the file has been modified since it was last completely written,
-the
-.Co !
-command will warn you.
-.sp
-A single
-.QT !
-character is displayed when the command completes.
-.sp
-In the second form of the
-.CO !
-command, the remainder of the line after the
-.QT !
-is passed to the program named by the
-.OP shell
-option, as described above.
-The specified lines are passed to the program as standard input,
-and the standard and standard error output of the program replace
-the original lines.
-.SS
-.SP Line:
-Unchanged if no range was specified, otherwise set to the first
-line of the range.
-.SP Options:
-Affected by the
-.OP autowrite
-and
-.OP writeany
-options.
-.SE
-.KY "number"
-.IP "[range] nu[mber] [count] [flags]"
-.KY "#"
-.Ip "[range] # [count] [flags]"
-Display the selected lines, each preceded with its line number.
-.sp
-The line number format is
-.QQ %6d ,
-followed by two spaces.
-.SS
-.SP Line:
-Set to the last line displayed.
-.SP Options:
-None.
-.SE
-.KY "@"
-.IP "@ buffer"
-.KY "*"
-.Ip "* buffer"
-Execute a buffer.
-Each line in the named buffer is executed as an
-.CO ex
-command.
-If no buffer is specified, or if the specified buffer is
-.QT @
-or
-.QT * ,
-the last buffer executed is used.
-.KY <
-.IP "[range] <[< ...] [count] [flags]"
-Shift lines left or right.
-The specified lines are shifted to the left (for the
-.CO <
-command) or right (for the
-.CO >
-command), by the number of columns specified by the
-.OP shiftwidth
-option.
-Only leading whitespace characters are deleted when shifting left;
-once the first column of the line contains a nonblank character,
-the
-.CO shift
-command will succeed, but the line will not be modified.
-.sp
-If the command character
-.CO <
-or
-.CO >
-is repeated more than once, the command is repeated once for each
-additional command character.
-.SS
-.SP Line:
-If the current line is set to one of the lines that are affected
-by the command, it is unchanged.
-Otherwise, it is set to the first nonblank character of the lowest
-numbered line shifted.
-.SP Options:
-Affected by the
-.OP shiftwidth
-option.
-.SE
-.KY =
-.IP "[line] = [flags]"
-Display the line number.
-Display the line number of
-.LI line
-(which defaults to the last line in the file).
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY >
-.IP "[range] >[> ...] [count] [flags]"
-Shift right.
-The specified lines are shifted to the right by the number of columns
-specified by the
-.OP shiftwidth
-option, by inserting tab and space characters.
-Empty lines are not changed.
-.sp
-If the command character
-.QT >
-is repeated more than once, the command is repeated once for each
-additional command character.
-.SS
-.SP Line:
-Set to the last line modified by the command.
-.SP Options:
-None.
-.SE
-.KY abbrev
-.IP "ab[brev] lhs rhs"
-Add an abbreviation to the current abbreviation list.
-In
-.CO vi ,
-if
-.LI lhs
-is entered such that it is preceded and followed by characters
-that cannot be part of a word, it is replaced by the string
-.LI rhs .
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY append
-.IP "[line] a[ppend][!]"
-The input text is appended to the specified line.
-If line 0 is specified, the text is inserted at the beginning of the file.
-Set to the last line input.
-If no lines are input, then set to
-.LI line ,
-or to the first line of the file if a
-.LI line
-of 0 was specified.
-Following the command name with a
-.QT !
-character causes the
-.OP autoindent
-option to be toggled for the duration of the command.
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-Affected by the
-.OP altwerase ,
-.OP autoindent ,
-.OP beautify ,
-.OP showmatch ,
-.OP ttywerase
-and
-.OP wrapmargin
-options.
-.SE
-.KY args
-.IP "ar[gs]"
-Display the argument list.
-The current argument is displayed inside of
-.QT [
-and
-.QT ]
-characters.
-The argument list is the list of operands specified on startup,
-which can be replaced using the
-.CO next
-command.
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY bg
-.IP bg
-.CO Vi
-mode only.
-Background the current screen.
-.SS
-.SP Line:
-Set to the current line when the screen was last edited.
-.SP Options:
-None.
-.SE
-.KY change
-.IP "[range] c[hange][!] [count]"
-Replace the lines with input text.
-Following the command name with a
-.QT !
-character causes the
-.OP autoindent
-option to be toggled for the duration of the command.
-.SS
-.SP Line:
-Set to the last line input, or, if no lines were input,
-set to the line before the target line, or to the first
-line of the file if there are no lines preceding the target line.
-.SP Options:
-Affected by the
-.OP altwerase ,
-.OP autoindent ,
-.OP beautify ,
-.OP showmatch ,
-.OP ttywerase
-and
-.OP wrapmargin
-options.
-.SE
-.KY cd
-.KY chdir
-.IP "chd[ir][!] [directory]"
-.Ip "cd[!] [directory]"
-Change the current working directory.
-The
-.LI directory
-argument is subjected to
-.XR sh 1
-word expansions.
-When invoked with no directory argument and the
-.LI HOME
-environment variable is set, the directory named by the
-.LI HOME
-environment variable becomes the new current directory.
-Otherwise, the new current directory becomes the directory returned
-by the
-.XR getpwent 3
-routine.
-.sp
-The
-.CO chdir
-command will fail if the file has been modified since the last complete
-write of the file.
-You can override this check by appending a
-.QT !
-character to the command.
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-Affected by the
-.OP cdpath
-option.
-.SE
-.KY copy
-.KY t
-.IP "[range] co[py] line [flags]"
-.Ip "[range] t line [flags]"
-Copy the specified lines (range) after the destination line.
-Line 0 may be specified to insert the lines at the beginning of
-the file.
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY delete
-.IP "[range] d[elete] [buffer] [count] [flags]"
-Delete the lines from the file.
-The deleted text is saved in the specified buffer, or, if no buffer
-is specified, in the unnamed buffer.
-If the command name is followed by a letter that could be interpreted
-as either a buffer name or a flag value (because neither a
-.LI count
-or
-.LI flags
-values were given),
-.CO ex
-treats the letter as a
-.LI flags
-value if the letter immediately follows the command name,
-without any whitespace separation.
-If the letter is preceded by whitespace characters,
-it treats it as a buffer name.
-.SS
-.SP Line:
-Set to the line following the deleted lines,
-or to the last line if the deleted lines were at the end.
-.SP Options:
-None.
-.SE
-.KY display
-.IP "di[splay] b[uffers] | s[creens] | t[ags]"
-Display buffers, screens or tags.
-The
-.CO display
-command takes one of three additional arguments, which are as follows:
-.SS
-.SP b[uffers]
-Display all buffers (including named, unnamed, and numeric)
-that contain text.
-.SP s[creens]
-Display the file names of all background screens.
-.SP t[ags]
-Display the tags stack.
-.SE
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY edit
-.IP "e[dit][!] [+cmd] [file]"
-.Ip "ex[!] [+cmd] [file]"
-Edit a different file.
-If the current buffer has been modified since the last complete write,
-the command will fail.
-You can override this by appending a
-.QT !
-character to the command name.
-.sp
-If the
-.QT +cmd
-option is specified, that
-.CO ex
-command will be executed in the new file.
-Any
-.CO ex
-command may be used, although the most common use of this feature is
-to specify a line number or search pattern to set the initial location
-in the new file.
-.SS
-.SP Line:
-If you have previously edited the file, the current line will be set
-to your last position in the file.
-If that position does not exist, or you have not previously edited the
-file, the current line will be set to the first line of the file if
-you are in
-.CO vi
-mode, and the last line of the file if you are in
-.CO ex .
-.SP Options:
-Affected by the
-.OP autowrite
-and
-.OP writeany
-options.
-.SE
-.KY exusage
-.IP "exu[sage] [command]"
-Display usage for an
-.CO ex
-command.
-If
-.LI command
-is specified, a usage statement for that command is displayed.
-Otherwise, usage statements for all
-.CO ex
-commands are displayed.
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY file
-.IP "f[ile] [file]"
-Display and optionally change the file name.
-If a file name is specified, the current pathname is changed to the
-specified name.
-The current pathname, the number of lines, and the current position
-in the file are displayed.
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY fg
-.IP "fg [name]"
-.CO Vi
-mode only.
-Foreground the specified screen.
-Swap the current screen with the specified backgrounded screen.
-If no screen is specified, the first background screen is foregrounded.
-.SS
-.SP Line:
-Set to the current line when the screen was last edited.
-.SP Options:
-None.
-.SE
-.KY global
-.IP "[range] g[lobal] /pattern/ [commands]"
-.KY v
-.Ip "[range] v /pattern/ [commands]"
-Apply commands to lines matching (or not matching) a pattern.
-The lines within the given range that match
-.PQ g[lobal] ,
-or do not match
-.PQ v
-the given pattern are selected.
-Then, the specified
-.CO ex
-command(s) are executed with the current line
-.PQ \&.
-set to each selected line.
-If no range is specified, the entire file is searched for matching,
-or not matching, lines.
-.sp
-Multiple commands can be specified, one per line, by escaping each
-.LI <newline>
-character with a backslash, or by separating commands with a
-.QT |
-character.
-If no commands are specified, the command defaults to the
-.CO print
-command.
-.sp
-For the
-.CO append ,
-.CO change
-and
-.CO insert
-commands, the input text must be part of the global command line.
-In this case, the terminating period can be omitted if it ends the commands.
-.sp
-The
-.CO visual
-command may also be specified as one of the
-.CO ex
-commands.
-In this mode, input is taken from the terminal.
-Entering a
-.CO Q
-command in
-.CO vi
-mode causes the next line matching the pattern to be selected and
-.CO vi
-to be reentered, until the list is exhausted.
-.sp
-The
-.CO global ,
-.CO v
-and
-.CO undo
-commands cannot be used as part of these commands.
-.sp
-The editor options
-.OP autoprint ,
-.OP autoindent ,
-and
-.OP report
-are turned off for the duration of the
-.CO global
-and
-.CO v
-commands.
-.SS
-.SP Line:
-The last line modified.
-.SP Options:
-None.
-.SE
-.KY help
-.IP "he[lp]"
-Display a help message.
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY insert
-.IP "[line] i[nsert][!]"
-The input text is inserted before the specified line.
-Following the command name with a
-.QT !
-character causes the
-.OP autoindent
-option setting to be toggled for the duration of this command.
-.SS
-.SP Line:
-Set to the last line input; if no lines were input,
-set to the line before the target line, or to the first line
-of the file if there are no lines preceding the target line.
-.SP Options:
-Affected by the
-.OP altwerase ,
-.OP autoindent ,
-.OP beautify ,
-.OP showmatch ,
-.OP ttywerase
-and
-.OP wrapmargin
-options.
-.SE
-.KY join
-.IP "[range] j[oin][!] [count] [flags]"
-Join lines of text together.
-.sp
-A
-.LI count
-specified to the
-.Sy join
-command specifies that the last line of the
-.LI range
-plus
-.LI count
-subsequent lines will be joined.
-(Note, this differs by one from the general rule where only
-.LI count - 1
-subsequent lines are affected.)
-.sp
-If the current line ends with a whitespace character, all whitespace
-is stripped from the next line.
-Otherwise, if the next line starts with a open parenthesis
-.PQ ( ,
-do nothing.
-Otherwise, if the current line ends with a question mark
-.PQ ? ,
-period
-.PQ \&.
-or exclamation point
-.PQ ! ,
-insert two spaces.
-Otherwise, insert a single space.
-.sp
-Appending a
-.QT !
-character to the command name causes a simpler join with no
-white-space processing.
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY list
-.IP "[range] l[ist] [count] [flags]"
-Display the lines unambiguously.
-Tabs are displayed as
-.QT ^I ,
-and the end of the line is marked with a
-.QT $
-character.
-.SS
-.SP Line:
-Set to the last line displayed.
-.SP Options:
-None.
-.SE
-.KY map
-.IP "map[!] [lhs rhs]"
-Define or display maps (for
-.CO vi
-only).
-.sp
-If
-.QT lhs
-and
-.QT rhs
-are not specified, the current set of command mode maps are displayed.
-If a
-.QT !
-character is appended to to the command,
-the text input mode maps are displayed.
-.sp
-Otherwise, when the
-.QT lhs
-character sequence is entered in
-.CO vi ,
-the action is as if the corresponding
-.QT rhs
-had been entered.
-If a
-.QT !
-character is appended to the command name,
-the mapping is effective during text input mode,
-otherwise, it is effective during command mode.
-This allows
-.QT lhs
-to have two different macro definitions at the same time: one for command
-mode and one for input mode.
-.sp
-Whitespace characters require escaping with a
-.LI <literal next>
-character to be entered in the
-.LI lhs
-string in visual mode.
-.sp
-Normally, keys in the
-.LI rhs
-string are remapped (see the
-.OP remap
-option),
-and it is possible to create infinite loops.
-However, keys which map to themselves are not further remapped,
-regardless of the setting of the
-.OP remap
-option.
-For example, the command
-.QT ":map n nz."
-maps the
-.QT n
-key to the
-.CO n
-and
-.CO z
-commands.
-.sp
-To exit an infinitely looping map, use the terminal
-.LI <interrupt>
-character.
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY mark
-.KY k
-.IP "[line] ma[rk] <character>"
-.Ip "[line] k <character>"
-Mark the line with the mark
-.LI <character> .
-The expressions
-.QT '<character>
-and
-.QT `<character>
-can then be used as an address in any command that uses one.
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY move
-.IP "[range] m[ove] line"
-Move the specified lines after the target line.
-A target line of 0 places the lines at the beginning of the file.
-.SS
-.SP Line:
-Set to the first of the moved lines.
-.SP Options:
-None.
-.SE
-.KY mkexrc
-.IP "mk[exrc][!] file"
-Write the abbreviations, editor options and maps to the specified
-file.
-Information is written in a form which can later be read back in
-using the
-.CO ex
-.CO source
-command.
-If
-.LI file
-already exists, the
-.CO mkexrc
-command will fail.
-This check can be overridden by appending a
-.QT !
-character to the command.
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY next
-.IP "n[ext][!] [file ...]"
-Edit the next file from the argument list.
-The
-.CO next
-command will fail if the file has been modified since the last complete
-write.
-This check can be overridden by appending the
-.QT !
-character to the command name.
-The argument list can optionally be replaced by specifying a new one
-as arguments to this command.
-In this case, editing starts with the first file on the new list.
-.SS
-.SP Line:
-Set as described for the
-.CO edit
-command.
-.SP Options:
-Affected by the options
-.OP autowrite
-and
-.OP writeany .
-.SE
-.KY open
-.IP "[line] o[pen] /pattern/ [flags]"
-Enter open mode.
-Open mode is the same as being in
-.CO vi ,
-but with a one-line window.
-All the standard
-.CO vi
-commands are available.
-If a match is found for the optional RE argument,
-the cursor is set to the start of the matching pattern.
-.sp
-.i "This command is not yet implemented."
-.SS
-.SP Line:
-Unchanged, unless the optional RE is specified, in which case it is
-set to the line where the matching pattern is found.
-.SP Options:
-Affected by the
-.OP open
-option.
-.SE
-.KY preserve
-.IP "pre[serve]"
-Save the file in a form that can later be recovered using the
-.CO ex
-.b \-r
-option.
-When the file is preserved, an email message is sent to the user.
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY previous
-.IP "prev[ious][!]"
-Edit the previous file from the argument list.
-The
-.CO previous
-command will fail if the file has been modified since the last complete
-write.
-This check can be overridden by appending the
-.QT !
-character to the command name.
-.SS
-.SP Line:
-Set as described for the
-.CO edit
-command.
-.SP Options:
-Affected by the options
-.OP autowrite
-and
-.OP writeany .
-None.
-.SE
-.KY print
-.IP "[range] p[rint] [count] [flags]"
-Display the specified lines.
-.SS
-.SP Line:
-Set to the last line displayed.
-.SP Options:
-None.
-.SE
-.KY put
-.IP "[line] pu[t] [buffer]"
-Append buffer contents to the current line.
-If a buffer is specified, its contents are appended to the line,
-otherwise, the contents of the unnamed buffer are used.
-.SS
-.SP Line:
-Set to the line after the current line.
-.SP Options:
-None.
-.SE
-.KY quit
-.IP "q[uit][!]"
-End the editing session.
-If the file has been modified since the last complete write, the
-.CO quit
-command will fail.
-This check may be overridden by appending a
-.QT !
-character to the command.
-.sp
-If there are more files to edit, the
-.CO quit
-command will fail.
-Appending a
-.QT !
-character to the command name or entering two
-.CO quit
-commands (i.e.
-.CO wq ,
-.CO quit ,
-.CO xit
-or
-.CO ZZ )
-in a row) will override this check and the editor will exit.
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY read
-.IP "[line] r[ead][!] [file]"
-Read a file.
-A copy of the specified file is appended to the line.
-If
-.LI line
-is 0, the copy is inserted at the beginning of the file.
-If no file is specified, the current file is read; if there is no
-current file, then
-.LI file
-becomes the current file.
-If there is no current file and no
-.LI file
-is specified, then the
-.CO read
-command will fail.
-.sp
-If
-.LI file
-is preceded by a
-.QT !
-character,
-.LI file
-is treated as if it were a shell command, and passed to the program
-named by the
-.LI SHELL
-environment variable.
-The standard and standard error outputs of that command are read into
-the file after the specified line.
-The special meaning of the
-.QT !
-character can be overridden by escaping it with a backslash
-.PQ \e
-character.
-.SS
-.SP Line:
-When executed from
-.CO ex ,
-the current line is set to the last line read.
-When executed from
-.CO vi ,
-the current line is set to the first line read.
-.SP Options:
-None.
-.SE
-.KY recover
-.IP "rec[over] file"
-Recover
-.LI file
-if it was previously saved.
-If no saved file by that name exists, the
-.CO recover
-command behaves similarly to the
-.CO edit
-command.
-.SS
-.SP Line:
-Set as described for the
-.CO edit
-command.
-.SP Options:
-None.
-.SE
-.KY resize
-.IP "res[ize] [+|-]size"
-.CO Vi
-mode only.
-Grow or shrink the current screen.
-If
-.LI size
-is a positive, signed number, the current screen is grown by that many lines.
-If
-.LI size
-is a negative, signed number, the current screen is shrunk by that many lines.
-If
-.LI size
-is not signed, the current screen is set to the specified
-.LI size .
-Applicable only to split screens.
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY rewind
-.IP "rew[ind][!]"
-Rewind the argument list.
-If the current file has been modified since the last complete write,
-the
-.CO rewind
-command will fail.
-This check may be overridden by appending the
-.QT !
-character to the command.
-.sp
-Otherwise, the current file is set to the first file in the argument
-list.
-.SS
-.SP Line:
-Set as described for the
-.CO edit
-command.
-.SP Options:
-Affected by the
-.OP autowrite
-and
-.OP writeany
-options.
-.SE
-.KY set
-.IP "se[t] [option[=[value]] ...] [nooption ...] [option? ...] [all]"
-Display or set editor options.
-When no arguments are specified, the editor option
-.OP term ,
-and any editor options whose values have been changed from the
-default settings are displayed.
-If the argument
-.LI all
-is specified, the values of all of editor options are displayed.
-.sp
-Specifying an option name followed by the character
-.QT ?
-causes the current value of that option to be displayed.
-The
-.QT ?
-can be separated from the option name by whitespace characters.
-The
-.QT ?
-is necessary only for Boolean valued options.
-Boolean options can be given values by the form
-.QT "set option"
-to turn them on, or
-.QT "set nooption"
-to turn them off.
-String and numeric options can be assigned by the form
-.QT "set option=value" .
-Any whitespace characters in strings can be included literally by preceding
-each with a 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
-whitespace characters.
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY shell
-.IP "sh[ell]"
-Run a shell program.
-The program named by the
-.OP shell
-option is run with a
-.b \-i
-(for interactive) flag.
-Editing is resumed when that program exits.
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY source
-.IP "so[urce] file"
-Read and execute
-.CO ex
-commands from a file.
-.CO Source
-commands may be nested.
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY split
-.IP "sp[lit] [file ...]"
-.CO Vi
-mode only.
-Split the screen.
-The current screen is split into two screens, of approximately equal size.
-If the cursor is in the lower half of the screen, the screen will split
-up, i.e. the new screen will be above the old one.
-If the cursor is in the upper half of the screen, the new screen will be
-below the old one.
-.sp
-If
-.LI file
-is specified, the new screen is editing that file, otherwise, both
-screens are editing the same file, and changes in each will be
-be reflected in the other.
-The argument list for the new screen consists of the list of files
-specified as arguments to this command, or, the current pathname if
-no files are specified.
-.SS
-.SP Line:
-If
-.LI file
-is specified, set as for the
-.CO edit
-command, otherwise unchanged.
-.SP Options:
-None.
-.SE
-.KY substitute
-.IP "[range] s[ubstitute] [/pattern/replace/] [options] [count] [flags]"
-.KY &
-.Ip "[range] & [options] [count] [flags]"
-.KY ~
-.Ip "[range] ~ [options] [count] [flags]"
-Make substitutions.
-Replace the first instance of
-.LI pattern
-with the string
-.LI replace
-on the specified line(s).
-If the
-.QT /pattern/repl/
-argument is not specified, the
-.QT /pattern/repl/
-from the previous
-.CO substitute
-command is used.
-.sp
-If
-.LI options
-includes the letter
-.QT c
-(confirm), you will be prompted for confirmation before each replacement
-is done.
-An affirmative response (in English, a
-.QT y
-character) causes the replacement to be made.
-A quit response (in English, a
-.QT q
-character) causes the
-.CO substitute
-command to be terminated.
-Any other response causes the replacement not to be made, and the
-.CO substitute
-command continues.
-If
-.LI options
-includes the letter
-.QT g
-(global), all nonoverlapping instances of
-.LI pattern
-in the line are replaced.
-.sp
-The
-.CO &
-version of the command is the same as not specifying a pattern
-or replacement string to the
-.CO substitute
-command, and the
-.QT &
-is replaced by the pattern and replacement information from the
-previous substitute command.
-.sp
-The
-.CO ~
-version of the command is the same as
-.CO &
-and
-.CO s ,
-except that the search pattern used is the last RE used in
-.i any
-command, not necessarily the one used in the last
-.CO substitute
-command.
-.sp
-For example, in the sequence
-.ft C
-.(b
-s/red/blue/
-/green
-~
-.)b
-.ft R
-the
-.QT ~
-is equivalent to
-.QT s/green/blue/ .
-.sp
-The
-.CO substitute
-command may be interrupted, using the terminal interrupt character.
-All substitutions completed before the interrupt are retained.
-.SS
-.SP Line:
-Set to the last line upon which a substitution was made.
-.SP Options:
-None.
-.SE
-.KY suspend
-.IP "su[spend][!]"
-.KY stop
-.Ip "st[op][!]"
-.KY <control-Z>
-.Ip <control-Z>
-Suspend the edit session.
-Appending a
-.QT !
-character to these commands turns off the
-.OP autowrite
-option for the command.
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-Affected by the
-.OP autowrite
-option.
-.SE
-.KY tag
-.IP "ta[g][!] tagstring"
-Edit the file containing the specified tag.
-Search for the tagstring, which can be in a different file.
-If the tag is in a different file, then the new file is edited.
-If the current file has been modified since the last complete write,
-the
-.CO tag
-command will fail.
-This check can be overridden by appending the
-.QT !
-character to the command name.
-.sp
-The
-.CO tag
-command searches for
-.LI tagstring
-in the tags file(s) specified by the
-.Op tags
-option.
-(See
-.XR ctags 1
-for more information on tags files.)
-.SS
-.SP Line:
-Set to the line indicated by the tag.
-.SP Options:
-Affected by the
-.OP autowrite ,
-.OP taglength ,
-.OP tags
-and
-.OP writeany
-options.
-.SE
-.KY tagpop
-.IP "tagp[op][!] [file | number]"
-Pop to the specified tag in the tags stack.
-If neither
-.LI file
-or
-.LI number
-is specified, the
-.CO tagpop
-command pops to the most recent entry on the tags stack.
-If
-.LI file
-or
-.LI number
-is specified, the
-.CO tagpop
-command pops to the most recent entry in the tags stack for that file,
-or numbered entry in the tags stack, respectively.
-(See the
-.CO display
-command for information on displaying the tags stack.)
-.sp
-If the file has been modified since the last complete write, the
-.CO tagpop
-command will fail.
-This check may be overridden by appending a
-.QT !
-character to the command name.
-.SS
-.SP Line:
-Set to the line indicated by the tag.
-.SP Options:
-Affected by the
-.OP autowrite ,
-and
-.OP writeany
-options.
-.SE
-.KY tagtop
-.IP "tagt[op][!]"
-Pop to the least recent tag on the tags stack, clearing the tags stack.
-.sp
-If the file has been modified since the last complete write, the
-.CO tagpop
-command will fail.
-This check may be overridden by appending a
-.QT !
-character to the command name.
-.SS
-.SP Line:
-Set to the line indicated by the tag.
-.SP Options:
-Affected by the
-.OP autowrite ,
-and
-.OP writeany
-options.
-.SE
-.KY unabbrev
-.IP "una[bbrev] lhs"
-Delete an abbreviation.
-Delete
-.LI lhs
-from the current list of abbreviations.
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY undo
-.IP "u[ndo]"
-Undo the last change made to the file.
-Changes made by
-.CO global ,
-.CO v ,
-.CO visual
-and map sequences are considered a single command.
-If repeated, the
-.CO u
-command alternates between these two states, and is its own inverse.
-.SS
-.SP Line:
-Set to the last line modified by the command.
-.SP Options:
-None.
-.SE
-.KY unmap
-.IP "unm[ap][!] lhs"
-Unmap a mapped string.
-Delete the command mode map definition for
-.LI lhs .
-If a
-.QT !
-character is appended to the command name, delete the text input mode
-map definition instead.
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY version
-.IP "ve[rsion]"
-Display the version of the
-.CO ex/vi
-editor.
-.KY visual
-.IP "[line] vi[sual] [type] [count] [flags]"
-.CO Ex
-mode only.
-Enter
-.CO vi .
-The
-.LI type
-is optional, and can be
-.QT \- ,
-.QT +
-or
-.QT ^ ,
-as in the
-.CO ex
-.CO z
-command, to specify the the position of the specified line in the screen
-window.
-(The default is to place the line at the top of the screen window.)
-A
-.LI count
-specifies the number of lines that will initially be displayed.
-(The default is the value of the
-.OP window
-editor option.)
-.SS
-.SP Line:
-Unchanged unless
-.LI line
-is specified, in which case it is set to that line.
-.SP Options:
-None.
-.SE
-.KY visual
-.IP "vi[sual][!] [+cmd] [file]"
-.CO Vi
-mode only.
-Edit a new file.
-Identical to the
-.QT "edit[!] [+cmd] [file]"
-command.
-.KY viusage
-.IP "viu[sage] [command]"
-Display usage for a
-.CO vi
-command.
-If
-.LI command
-is specified, a usage statement for that command is displayed.
-Otherwise, usage statements for all
-.CO vi
-commands are displayed.
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY write
-.IP "[range] w[rite][!] [>>] [file]"
-.Ip "[range] w[rite] [!] [file]"
-.KY wn
-.Ip "[range] wn[!] [>>] [file]"
-.KY wq
-.Ip "[range] wq[!] [>>] [file]"
-Write the file.
-The specified lines (the entire file, if no range is given) is written
-to
-.LI file .
-If
-.LI file
-is not specified, the current pathname is used.
-If
-.LI file
-is specified, and it exists, or if the current pathname was set using the
-.CO file
-command, and the file already exists, these commands will fail.
-Appending a
-.QT !
-character to the command name will override this check and the write
-will be attempted, regardless.
-.sp
-Specifying the optional
-.QT >>
-string will cause the write to be appended to the file, in which case
-no tests are made for the file already existing.
-.sp
-If the file is preceded by a
-.QT !
-character, the program named in the SHELL environment variable is
-invoked with file as its second argument, and the specified lines
-are passed as standard input to that command.
-The
-.QT !
-in this usage must be separated from command name by at least one
-whitespace character.
-The special meaning of the
-.QT !
-may be overridden by escaping it with a backslash
-.PQ \e
-character.
-.sp
-The
-.CO wq
-version of the write command will exit the editor after writing the file,
-if there are no further files to edit.
-Appending a
-.QT !
-character to the command name or entering two
-.QQ quit
-commands (i.e.
-.CO wq ,
-.CO quit ,
-.CO xit
-or
-.CO ZZ )
-in a row) will override this check and the editor will exit,
-ignoring any files that have not yet been edited.
-.sp
-The
-.CO wn
-version of the write command will move to the next file after writing
-the file, unless the write fails.
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-Affected by the
-.OP readonly
-and
-.OP writeany
-options.
-.SE
-.KY xit
-.IP "[range] x[it][!] [file]"
-Write the file if it has been modified.
-The specified lines are written to
-.LI file ,
-if the file has been modified since the last complete write to any
-file.
-If no
-.LI range
-is specified, the entire file is written.
-.sp
-The
-.CO xit
-command will exit the editor after writing the file,
-if there are no further files to edit.
-Appending a
-.QT !
-character to the command name or entering two
-.QQ quit
-commands (i.e.
-.CO wq ,
-.CO quit ,
-.CO xit
-or
-.CO ZZ )
-in a row) will override this check and the editor will exit,
-ignoring any files that have not yet been edited.
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-Affected by the
-.OP readonly
-and
-.OP writeany
-options.
-.SE
-.KY yank
-.IP "[range] ya[nk] [buffer] [count]"
-Copy the specified lines to a buffer.
-If no buffer is specified, the unnamed buffer is used.
-.SS
-.SP Line:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY z
-.IP "[line] z [type] [count] [flags]"
-Adjust the window.
-If no
-.LI type
-is specified, then
-.LI count
-lines following the specified line are displayed.
-The default
-.LI count
-is the value of the
-.OP window
-option.
-The
-.LI type
-argument changes the position at which
-.LI line
-is displayed on the screen by changing the number of lines
-displayed before and after
-.LI line .
-The following
-.LI type
-characters may be used:
-.SS
-.SP \-
-Place the line at the bottom of the screen.
-.SP +
-Place the line at the top of the screen.
-.SP \&.
-Place the line in the middle of the screen.
-.SP ^
-Write out count lines starting
-.LI "count * 2"
-lines before
-.LI line ;
-the net effect of this is that a
-.QT z^
-command following a
-.CO z
-command writes the previous page.
-.SP =
-Center
-.LI line
-on the screen with a line of hyphens displayed immediately before and
-after it.
-The number of preceding and following lines of text displayed are
-reduced to account for those lines.
-.SE
-.SS
-.SP Line:
-Set to the last line displayed, with the exception of the
-.Dq Li \&=
-.LI type ,
-where the current line is set to the line specified by the command.
-.SP Options:
-Affected by the
-.Sy window
-option.
-.SE
diff --git a/usr.bin/vi/USD.doc/vi.ref/merge.awk b/usr.bin/vi/USD.doc/vi.ref/merge.awk
deleted file mode 100644
index 16b51520a77..00000000000
--- a/usr.bin/vi/USD.doc/vi.ref/merge.awk
+++ /dev/null
@@ -1,16 +0,0 @@
-# @(#)merge.awk 8.3 (Berkeley) 5/26/94
-#
-# merge index entries into one line per label
-$1 == prev {
- printf ", %s", $2;
- next;
-}
-{
- if (NR != 1)
- printf "\n";
- printf "%s \t%s", $1, $2;
- prev = $1;
-}
-END {
- printf "\n"
-}
diff --git a/usr.bin/vi/USD.doc/vi.ref/ref.so b/usr.bin/vi/USD.doc/vi.ref/ref.so
deleted file mode 100644
index c0fddc3f6c7..00000000000
--- a/usr.bin/vi/USD.doc/vi.ref/ref.so
+++ /dev/null
@@ -1,127 +0,0 @@
-.\" Copyright (c) 1994
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\" 3. All advertising materials mentioning features or use of this software
-.\" must display the following acknowledgement:
-.\" This product includes software developed by the University of
-.\" California, Berkeley and its contributors.
-.\" 4. Neither the name of the University nor the names of its contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" @(#)ref.so 8.6 (Berkeley) 7/15/94
-.\"
-.\"
-.\" indented paragraph, with spaces between the items, bold font
-.de IP
-.\".tm arg 1 \\$1 arg 2 \\$2 arg 3 \\$3
-.sp 1
-.nr PS \\n(ps
-.nr ps 0
-.ip "\fB\\$1\fP" \\$2
-.nr ps \\n(PS
-.br
-..
-.\" indented paragraph, no spaces between the items, bold font
-.de Ip
-.\".tm arg 1 \\$1 arg 2 \\$2 arg 3 \\$3
-.nr PS \\n(ps
-.nr ps 0
-.ns
-.ip "\fB\\$1\fP" \\$2
-.nr ps \\n(PS
-.br
-..
-.\" start nested .IP
-.de SS
-.sp
-.ba +5n
-..
-.\" end nested .IP
-.de SE
-.ba -5n
-..
-.\" nested .IP, no spaces, normal font
-.de SP
-.\".tm arg 1 \\$1 arg 2 \\$2 arg 3 \\$3
-.nr PS \\n(ps
-.nr ps 0
-.ns
-.ip "\\$1" 9n
-.nr ps \\n(PS
-..
-.\" typewriter font
-.de LI
-\&\fC\\$1\fP\\$2
-..
-.\" ex/vi names in command font
-.de EV
-\&\fB\\$1\fP/\fB\\$2\fP\\$3
-..
-.\" command names
-.de CO
-\&\fB\\$1\fP\\$2
-..
-.\" key words for index
-.de KY
-.sy echo >>index '\\$1 \\n%'
-..
-.\" option names
-.de OP
-\&\fB\\$1\fP\\$2
-..
-.\" paren quoted (typewriter font)
-.de PQ
-(\*(lq\fC\\$1\fP\*(rq)\\$2
-..
-.\" quoted bold
-.de QB
-\*(lq\fB\\$1\fP\*(rq\\$2
-..
-.\" quoted command
-.de QC
-\*(lq\fB\\$1\fP\*(rq\\$2
-..
-.\" quoted option
-.de QO
-\*(lq\fB\\$1\fP\*(rq\\$2
-..
-.\" quoted (no font change)
-.de QQ
-\*(lq\\$1\*(rq\\$2
-..
-.\" quoted (typewriter font)
-.de QT
-\*(lq\fC\\$1\fP\*(rq\\$2
-..
-.\" section macro to build TOC
-.de SH
-.(x
-\\$2
-.)x
-.sh \\$1 "\\$2"
-..
-.\" manual section
-.de XR
-\&\fI\\$1\fP(\\$2)\\$3
-..
diff --git a/usr.bin/vi/USD.doc/vi.ref/set.opt.roff b/usr.bin/vi/USD.doc/vi.ref/set.opt.roff
deleted file mode 100644
index d59599d1426..00000000000
--- a/usr.bin/vi/USD.doc/vi.ref/set.opt.roff
+++ /dev/null
@@ -1,949 +0,0 @@
-.\" Copyright (c) 1994
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\" 3. All advertising materials mentioning features or use of this software
-.\" must display the following acknowledgement:
-.\" This product includes software developed by the University of
-.\" California, Berkeley and its contributors.
-.\" 4. Neither the name of the University nor the names of its contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" @(#)set.opt.roff 8.26 (Berkeley) 8/11/94
-.\"
-.SH 1 "Set Options"
-.pp
-There are a large number of options that may be set (or unset) to
-change the editor's behavior.
-This section describes the options, their abbreviations and their
-default values.
-.pp
-In each entry below, the first part of the tag line is the full name
-of the option, followed by any equivalent abbreviations.
-(Regardless of the abbreviations, it is only necessary to use the
-minimum number of characters necessary to distinguish an abbreviation
-from all other commands for it to be accepted, in
-.EV nex nvi .
-Historically, only the full name and the official abbreviations
-were accepted by
-.EV ex vi .
-Using full names in your startup files and environmental variables will
-probably make them more portable.)
-The part in square brackets is the default value of the option.
-Most of the options are boolean, i.e. they are either on or off,
-and do not have an associated value.
-.pp
-Options apply to both
-.CO ex
-and
-.CO vi
-modes, unless otherwise specified.
-.pp
-For information on modifying the options or to display the options and
-their current values, see the
-.QQ set
-command in the section entitled
-.QB "Ex Commands" .
-.KY altwerase
-.IP "altwerase [off]"
-.CO Vi
-only.
-Change how
-.CO vi
-does word erase during text input.
-When this option is set, text is broken up into three classes:
-alphabetic, numeric and underscore characters, other nonblank
-characters, and blank characters.
-Changing from one class to another marks the end of a word.
-In addition, the class of the first character erased is ignored
-(which is exactly what you want when erasing pathname components).
-.KY autoindent
-.IP "autoindent, ai [off]"
-If this option is set, whenever you create a new line (using the
-.CO vi
-.CO A ,
-.CO a ,
-.CO C ,
-.CO c ,
-.CO I ,
-.CO i ,
-.CO O ,
-.CO o ,
-.CO R ,
-.CO r ,
-.CO S ,
-and
-.CO s
-commands, or the
-.CO ex
-.CO append ,
-.CO change ,
-and
-.CO insert
-commands) the new line is automatically indented to align the cursor with
-the first nonblank character of the line from which you created it.
-Lines are indented using tab characters to the extent possible (based on
-the value of the
-.OP tabstop
-option) and then using space characters as necessary.
-For commands inserting text into the middle of a line, any blank characters
-to the right of the cursor are discarded, and the first nonblank character
-to the right of the cursor is aligned as described above.
-.sp
-The indent characters are themselves somewhat special.
-If you do not enter more characters on the new line before moving to
-another line, or entering
-.LI <escape> ,
-the indent character will be deleted and the line will be empty.
-For example, if you enter
-.LI <carriage-return>
-twice in succession,
-the line created by the first
-.LI <carriage-return>
-will not have any characters in it,
-regardless of the indentation of the previous or subsequent line.
-.sp
-Indent characters also require that you enter additional erase characters
-to delete them.
-For example,
-if you have an indented line, containing only blanks, the first
-.LI <word-erase>
-character you enter will erase up to end of the indent characters,
-and the second will erase back to the beginning of the line.
-(Historically, only the
-.CO <control-D>
-key would erase the indent characters.
-Both the
-.CO <control-D>
-key and the usual erase keys work in
-.CO nvi .)
-In addition, if the cursor is positioned at the end of the indent
-characters, the keys
-.QT 0<control-D>
-will erase all of the indent characters for the current line,
-resetting the indentation level to 0.
-Similarly, the keys
-.QT ^<control-D>
-will erase all of the indent characters for the current line,
-leaving the indentation level for future created lines unaffected.
-.sp
-Finally, if the
-.OP autoindent
-option is set, the
-.CO S
-and
-.CO cc
-commands change from the first nonblank of the line to the end of the
-line, instead of from the beginning of the line to the end of the line.
-.KY autoprint
-.IP "autoprint, ap [off]"
-.CO Ex
-only.
-Cause the current line to be automatically displayed after the
-.CO ex
-commands
-.CO < ,
-.CO > ,
-.CO copy ,
-.CO delete ,
-.CO join ,
-.CO move ,
-.CO put ,
-.CO t ,
-.CO Undo ,
-and
-.CO undo .
-This automatic display is suppressed during
-.CO global
-and
-.CO vglobal
-commands, and for any command where optional flags are used to explicitly
-display the line.
-.KY autowrite
-.IP "autowrite, aw [off]"
-If this option is set, the
-.CO vi
-.CO ! ,
-.CO ^^ ,
-.CO ^]
-and
-.CO <control-Z>
-commands, and the
-.CO ex
-.CO edit ,
-.CO next ,
-.CO rewind ,
-.CO stop ,
-.CO suspend ,
-.CO tag ,
-.CO tagpop ,
-and
-.CO tagtop
-commands automatically write the current file back to the current file name
-if it has been modified since it was last written.
-If the write fails, the command fails and goes no further.
-.sp
-Appending the optional force flag character
-.QT !
-to the
-.CO ex
-commands
-.CO next ,
-.CO rewind ,
-.CO stop ,
-.CO suspend ,
-.CO tag ,
-.CO tagpop ,
-and
-.CO tagtop
-stops the automatic write from being attempted.
-.sp
-(Historically, the
-.CO next
-command ignored the optional force flag.)
-Note, the
-.CO ex
-commands
-.CO edit ,
-.CO quit ,
-.CO shell ,
-and
-.CO xit
-are
-.i not
-affected by the
-.OP autowrite
-option.
-.KY beautify
-.IP "beautify, bf [off]"
-If this option is set, all control characters that are not currently being
-specially interpreted, other than
-.LI <tab> ,
-.LI <newline> ,
-and
-.LI <form-feed> ,
-are
-discarded from commands read in by
-.CO ex
-from command files, and from input text entered to
-.CO vi
-(either into the file or to the colon command line).
-Text files read by
-.EV ex vi
-are
-.i not
-affected by the
-.OP beautify
-option.
-.KY cdpath
-.IP "cdpath [environment variable CDPATH, or current directory]"
-This option is used to specify a colon separated list of directories
-which are used as path prefixes for any relative path names used as
-arguments for the
-.CO cd
-command.
-The value of this option defaults to the value of the environmental
-variable
-.LI CDPATH
-if it is set, otherwise to the current directory.
-For compatibility with the POSIX 1003.2 shell, the
-.CO cd
-command does
-.i not
-check the current directory as a path prefix for relative path names
-unless it is explicitly specified.
-It may be so specified by entering an empty string or a
-.QT \&.
-character into the
-.LI CDPATH
-variable or the option value.
-.KY columns
-.IP "columns, co [80]"
-The number of columns in the screen.
-Setting this option causes
-.EV ex vi
-to set (or reset) the environmental variable
-.LI COLUMNS .
-See the section entitled
-.QB "Sizing the Screen"
-more information.
-.KY comment
-.IP "comment [off]"
-.CO Vi
-only.
-If the first non-empty line of the file begins with the string
-.QT /\&* ,
-this option causes
-.CO vi
-to skip to the end of that C-language comment (probably a terribly boring
-legal notice) before displaying the file.
-.KY directory
-.IP "directory, dir [environment variable TMPDIR, or /tmp]"
-The directory where temporary files are created.
-The environmental variable
-.LI TMPDIR
-is used as the default value if it exists, otherwise
-.LI /tmp
-is used.
-.KY edcompatible
-.IP "edcompatible, ed [off]"
-Remember the values of the
-.QQ c
-and
-.QQ g
-suffices to the
-.CO substitute
-commands, instead of initializing them as unset for each new
-command.
-Specifying pattern and replacement strings to the
-.CO substitute
-command unsets the
-.QQ c
-and
-.QQ g
-suffices as well.
-.KY errorbells
-.IP "errorbells, eb [off]"
-.CO Ex
-only.
-.CO Ex
-error messages are normally presented in inverse video.
-If that is not possible for the terminal, setting this option causes
-error messages to be announced by ringing the terminal bell.
-.KY exrc
-.IP "exrc, ex [off]"
-If this option is turned off in the system or $HOME startup files,
-the local startup files are never read (unless they are the same
-as the system or $HOME startup files).
-Turning it on has no effect, i.e. the normal checks for local startup
-files are performed, regardless.
-See the section entitled
-.QB "Startup Information"
-for more information.
-.KY extended
-.IP "extended [off]"
-This option causes all regular expressions to be treated as POSIX
-1003.2 Extended Regular Expressions (which are similar to historic
-.XR egrep 1
-style expressions).
-.KY flash
-.IP "flash [on]"
-This option causes the screen to flash instead of beeping the keyboard,
-on error, if the terminal has the capability.
-.KY hardtabs
-.IP "hardtabs, ht [8]"
-This option defines the spacing between hardware tab settings, i.e.
-the tab expansion done by the operating system and/or the terminal
-itself.
-As
-.EV nex nvi
-never writes
-.LI <tab>
-characters to the terminal, unlike historic versions of
-.EV ex vi ,
-this option does not currently have any affect.
-.KY ignorecase
-.IP "ignorecase, ic [off]"
-This option causes regular expressions, both in
-.CO ex
-commands and in searches,
-to be evaluated in a case-insensitive manner.
-.KY keytime
-.IP "keytime [6]"
-The 10th's of a second
-.EV ex vi
-waits for a subsequent key to complete a key mapping.
-.KY leftright
-.IP "leftright [off]"
-.CO Vi
-only.
-This option causes the screen to be scrolled left-right to view
-lines longer than the screen, instead of the traditional
-.CO vi
-screen interface which folds long lines at the right-hand margin
-of the terminal.
-.KY lines
-.IP "lines, li [24]"
-.CO Vi
-only.
-The number of lines in the screen.
-Setting this option causes
-.EV ex vi
-to set (or reset) the environmental variable
-.LI LINES .
-See the section entitled
-.QB "Sizing the Screen"
-for more information.
-.KY lisp
-.IP "lisp [off]"
-.CO Vi
-only.
-This option changes the behavior of the
-.CO vi
-.CO ( ,
-.CO ) ,
-.CO { ,
-.CO } ,
-.CO [[
-and
-.CO ]]
-commands to match the Lisp language.
-Also, the
-.OP autoindent
-option's behavior is changed to be appropriate for Lisp.
-.sp
-.i "This option is not yet implemented."
-.KY list
-.IP "list [off]"
-This option causes lines to be displayed in an unambiguous fashion.
-Specifically, tabs are displayed as control characters, i.e.
-.QT ^I ,
-and the ends of lines are marked with a
-.QT $
-character.
-.KY magic
-.IP "magic [on]"
-This option is on by default.
-Turning the
-.OP magic
-option off causes all regular expression characters except for
-.QT ^
-and
-.QT $ ,
-to be treated as ordinary characters.
-To re-enable characters individually, when the
-.OP magic
-option is off,
-precede them with a backslash
-.QT \e
-character.
-See the section entitled
-.QB "Regular Expressions and Replacement Strings"
-for more information.
-.KY matchtime
-.IP "matchtime [7]"
-.CO Vi
-only.
-The 10th's of a second
-.EV ex vi
-pauses on the matching character when the
-.OP showmatch
-option is set.
-.KY mesg
-.IP "mesg [on]"
-This option allows other users to contact you using the
-.XR talk 1
-and
-.XR write 1
-utilities, while you are editing.
-.EV Ex vi
-does not turn message on, i.e. if messages were turned off when the
-editor was invoked, they will stay turned off.
-This option only permits you to disallow messages for the edit session.
-See the
-.XR mesg 1
-utility for more information.
-.KY modelines
-.IP "modelines, modeline [off]"
-If the
-.OP modelines
-option is set,
-.EV ex vi
-has historically scanned the first and last five lines of each file as
-it is read for editing, looking for any
-.CO ex
-commands that have been placed in those lines.
-After the startup information has been processed, and before the user
-starts editing the file, any commands embedded in the file are executed.
-.sp
-Commands were recognized by the letters
-.QQ e
-or
-.QQ v
-followed by
-.QQ x
-or
-.QQ i ,
-at the beginning of a line or following a tab or space character,
-and followed by a
-.QQ : ,
-an
-.CO ex
-command, and another
-.QQ : .
-.sp
-This option is a security problem of immense proportions,
-and should not be used under any circumstances.
-.sp
-.i "This option will never be implemented."
-.KY number
-.IP "number, nu [off]"
-Precede each line displayed with its current line number.
-.KY octal
-.IP "octal [off]"
-Display unknown characters as octal numbers, instead of the default
-hexadecimal.
-.KY open
-.IP "open [on]"
-.CO Ex
-only.
-If this option is not set, the
-.CO open
-and
-.CO visual
-commands are disallowed.
-.KY optimize
-.IP "optimize, opt [on]"
-.CO Vi
-only.
-Throughput of text is expedited by setting the terminal not to do automatic
-carriage returns when printing more than one (logical) line of output,
-greatly speeding output on terminals without addressable cursors when text
-with leading white space is printed.
-.sp
-.i "This option is not yet implemented."
-.KY paragraphs
-.IP "paragraphs, para [IPLPPPQPP LIpplpipbp]"
-.CO Vi
-only.
-Define additional paragraph boundaries for the
-.CO {
-and
-.CO }
-commands.
-The value of this option must be a character string consisting
-of zero or more character pairs.
-.sp
-In the text to be edited, the character string
-.LI "<newline>.<char-pair>" ,
-(where
-.LI <char-pair>
-is one of the character pairs in the option's value)
-defines a paragraph boundary.
-For example, if the option were set to
-.LI "LaA<space>##" ,
-then all of the following additional paragraph boundaries would be
-recognized:
-.sp
-.(l
-<newline>.La
-<newline>.A<space>
-<newline>.##
-.)l
-.KY prompt
-.IP "prompt [on]"
-.CO Ex
-only.
-This option causes
-.CO ex
-to prompt for command input with a
-.QT :
-character; when it is not set, no prompt is displayed.
-.KY readonly
-.IP "readonly, ro [off]"
-This option causes a force flag to be required to attempt to write
-the file back to the original file name.
-Setting this option is equivalent to using the
-.b \-R
-command line option, or editing a file which lacks write permission.
-.KY recdir
-.IP "recdir [/var/tmp/vi.recover]"
-The directory where recovery files are stored.
-.sp
-If you change the value of
-.CO recdir ,
-be careful to choose a directory whose contents are not regularly
-deleted.
-Bad choices include directories in memory based filesystems,
-or
-.LI /tmp ,
-on most systems,
-as their contents are removed when the machine is rebooted.
-.sp
-Public directories like
-.LI /usr/tmp
-and
-.LI /var/tmp
-are usually safe, although some sites periodically prune old files
-from them.
-There is no requirement that you use a public directory,
-e.g. a sub-directory of your home directory will work fine.
-.sp
-Finally, if you change the value of
-.CO recdir ,
-you must modify the recovery script to operate in your chosen recovery
-area.
-.sp
-See the section entitled
-.QB "Recovery"
-for further information.
-.KY redraw
-.IP "redraw, re [off]"
-.CO Vi
-only.
-The editor simulates (using great amounts of output), an intelligent
-terminal on a dumb terminal (e.g. during insertions in
-.CO vi
-the characters to the right of the cursor are refreshed as each input
-character is typed).
-.sp
-.i "This option is not yet implemented."
-.KY remap
-.IP "remap [on]"
-If this option is set,
-it is possible to define macros in terms of other macros.
-Otherwise, each key is only remapped up to one time.
-For example, if
-.QT A
-is mapped to
-.QT B ,
-and
-.QT B
-is mapped to
-.QT C ,
-The keystroke
-.QT A
-will be mapped to
-.QT C
-if the
-.OP remap
-option is set, and to
-.QT B
-if it is not set.
-.KY report
-.IP "report [5]"
-Set the threshold of the number of lines that need to be changed or
-yanked before a message will be displayed to the user.
-For everything but the yank command, the value is the largest value
-about which the editor is silent, i.e. by default, 6 lines must be
-deleted before the user is notified.
-However, if the number of lines yanked is greater than
-.i "or equal to"
-the set value, it is reported to the user.
-.KY ruler
-.IP "ruler [off]"
-.CO Vi
-only.
-Display a row/column ruler on the colon command line.
-.KY scroll
-.IP "scroll, scr [window / 2]"
-Set the number of lines scrolled by the
-.CO vi
-.CO <control-D>
-and
-.CO <control-U>
-commands.
-.sp
-Historically, the
-.CO ex
-.CO z
-command, when specified without a count, used two times the size of the
-scroll value; the POSIX 1003.2 standard specified the window size, which
-is a better choice.
-.KY sections
-.IP "sections, sect [NHSHH HUnhsh]"
-.CO Vi
-only.
-Define additional section boundaries for the
-.CO [[
-and
-.CO ]]
-commands.
-The
-.OP sections
-option should be set to a character string consisting of zero or
-more character pairs.
-In the text to be edited, the character string
-.LI "<newline>.<char-pair>" ,
-(where
-.LI <char-pair>
-is one of the character pairs in the option's value),
-defines a section boundary in the same manner that
-.OP paragraph
-option boundaries are defined.
-.KY shell
-.IP "shell, sh [environment variable SHELL, or /bin/sh]"
-Select the shell used by the editor.
-The specified path is the pathname of the shell invoked by the
-.CO vi
-.CO !
-shell escape command and by the
-.CO ex
-.CO shell
-command.
-This program is also used to resolve any shell meta-characters in
-.CO ex
-commands.
-.KY shiftwidth
-.IP "shiftwidth, sw [8]"
-Set the autoindent and shift command indentation width.
-This width is used by the
-.OP autoindent
-option and by the
-.CO < ,
-.CO > ,
-and
-.CO shift
-commands.
-.KY showdirty
-.IP "showdirty [off]"
-.CO Vi
-only.
-Display an asterisk on the colon command line if the file has been modified.
-.KY showmatch
-.IP "showmatch, sm [off]"
-.CO Vi
-only.
-This option causes
-.CO vi ,
-when a
-.QT }
-or
-.QT )
-is entered, to briefly move the cursor the matching
-.QT {
-or
-.QT ( .
-See the
-.OP matchtime
-option for more information.
-.KY showmode
-.IP "showmode [off]"
-.CO Vi
-only.
-This option causes
-.CO vi
-to display a string identifying the current editor mode on the
-colon command line.
-.KY sidescroll
-.IP "sidescroll [16]"
-.CO Vi
-only.
-Sets the number of columns that are shifted to the left or right,
-when
-.CO vi
-is doing left-right scrolling and the left or right margin is
-crossed.
-See the
-.OP leftright
-option for more information.
-.KY slowopen
-.IP "slowopen, slow [off]"
-This option affects the display algorithm used by
-.CO vi ,
-holding off display updating during input of new text to improve
-throughput when the terminal in use is slow and unintelligent.
-.sp
-.i "This option is not yet implemented."
-.KY sourceany
-.IP "sourceany [off]"
-If this option is turned on,
-.CO vi
-historically read startup files that were owned by someone other than
-the editor user.
-See the section entitled
-.QB "Startup Information"
-for more information.
-This option is a security problem of immense proportions,
-and should not be used under any circumstances.
-.sp
-.i "This option will never be implemented."
-.KY tabstop
-.IP "tabstop, ts [8]"
-This option sets tab widths for the editor display.
-.KY taglength
-.IP "taglength, tl [0]"
-This option sets the maximum number of characters that are considered
-significant in a tag name.
-Setting the value to 0 makes all of the characters in the tag name
-significant.
-.KY tags
-.IP "tags, tag [tags /var/db/libc.tags /sys/kern/tags]"
-Sets the list of tags files, in search order,
-which are used when the editor searches for a tag.
-.KY term
-.IP "term, ttytype, tty [environment variable TERM]"
-Set the terminal type.
-Setting this option causes
-.EV ex vi
-to set (or reset) the environmental variable
-.LI TERM .
-.KY terse
-.IP "terse [off]"
-This option has historically made editor messages less verbose.
-It has no effect in this implementation.
-See the
-.OP verbose
-option for more information.
-.KY tildeop
-.IP "tildeop"
-Modify the
-.CO ~
-command to take an associated motion.
-.KY timeout
-.IP "timeout, to [on]"
-If this option is set,
-.EV ex vi
-waits for a specific period for a subsequent key to complete a key
-mapping (see the
-.OP keytime
-option).
-If the option is not set, the editor waits until enough keys are
-entered to resolve the ambiguity, regardless of how long it takes.
-.KY ttywerase
-.IP "ttywerase [off]"
-.CO Vi
-only.
-This option changes how
-.CO vi
-does word erase during text input.
-If this option is set, text is broken up into two classes,
-blank characters and nonblank characters.
-Changing from one class to another marks the end of a word.
-.KY verbose
-.IP "verbose [off]"
-.CO Vi
-only.
-.CO Vi
-historically bells the terminal for many obvious mistakes, e.g. trying
-to move past the left-hand margin, or past the end of the file.
-If this option is set, an error message is displayed for all errors.
-.KY w300
-.IP "w300 [no default]"
-.CO Vi
-only.
-Set the window size if the baud rate is less than 1200 baud.
-See the
-.OP window
-option for more information.
-.KY w1200
-.IP "w1200 [no default]"
-.CO Vi
-only.
-Set the window size if the baud rate is equal to 1200 baud.
-See the
-.OP window
-option for more information.
-.KY w9600
-.IP "w9600 [no default]"
-.CO Vi
-only.
-Set the window size if the baud rate is greater than 1200 baud.
-See the
-.OP window
-option for more information.
-.KY warn
-.IP "warn [on]"
-.CO Ex
-only.
-This option causes a warning message to the terminal if the file has
-been modified, since it was last written, before a
-.CO !
-command.
-.KY window
-.IP "window, w, wi [environment variable LINES]"
-This option determines the default number of lines in a screenful,
-as written by the
-.CO z
-command.
-It also determines the number of lines scrolled by the
-.CO vi
-commands
-.CO <control-F>
-and
-.CO <control-B> .
-The value of window can be unrelated to the real screen size,
-although it starts out as the number of lines on the screen (see
-the section entitled
-.QB "Sizing the Screen"
-for more information).
-Setting the value of the
-.OP window
-option is the same as using the
-.b \-w
-command line option.
-.sp
-If the value of the
-.OP window
-option (as set by the
-.OP window ,
-.OP w300 ,
-.OP w1200
-or
-.OP w9600
-options) is smaller than the actual size of the screen, large screen
-movements will result in displaying only that smaller number of lines
-on the screen.
-(Further movements in that same area will result in the screen being
-filled.)
-This can provide a performance improvement when viewing different
-places in one or more files over a slow link.
-.KY wrapmargin
-.IP "wrapmargin, wm [0]"
-.CO Vi
-only.
-If the value of the
-.OP wrapmargin
-option is non-zero,
-.CO vi
-will split lines so that they end at least that number of characters
-before the right-hand margin of the screen.
-(Note, the value of
-.OP wrapmargin
-is
-.i not
-a text length.
-In a screen that is 80 columns wide, the command
-.QT ":set wrapmargin=8"
-attempts to keep the lines less than or equal to 72 columns wide.)
-.sp
-Lines are split at the previous whitespace character closest to the
-number.
-Any trailing whitespace characters before that character are deleted.
-If the line is split because of an inserted
-.LI <space>
-or
-.LI <tab>
-character, and you then enter another
-.LI <space>
-character, it is discarded.
-.sp
-If wrapmargin is set to 0,
-or if there is no blank character upon which to split the line,
-the line is not broken.
-.KY wrapscan
-.IP "wrapscan, ws [on]"
-This option causes searches to wrap around the end or the beginning
-of the file, and back to the starting point.
-Otherwise, the end or beginning of the file terminates the search.
-.KY writeany
-.IP "writeany, wa [off]"
-If this option is set, file-overwriting checks that would usually be
-made before the
-.CO write
-and
-.CO xit
-commands, or before an automatic write (see the
-.OP autowrite
-option), are not made.
-This allows a write to any file, provided the file permissions allow it.
diff --git a/usr.bin/vi/USD.doc/vi.ref/spell.ok b/usr.bin/vi/USD.doc/vi.ref/spell.ok
deleted file mode 100644
index 60084e31bcf..00000000000
--- a/usr.bin/vi/USD.doc/vi.ref/spell.ok
+++ /dev/null
@@ -1,270 +0,0 @@
-Amir
-Autoprint
-BRE's
-Bostic
-Bourne
-DOUBLEQUOTE
-Dq
-Ds
-ERE's
-EXINIT
-Englar
-Ev
-FF
-Fa
-Fl
-HUnhsh
-IPLPPPQPP
-Kirkendall
-Korn
-LIpplpipbp
-LaA
-Li
-Lowercase
-MINUSSIGN
-Makefiles
-NEX
-NEXINIT
-NHSHH
-NVI
-Nex
-Nvi
-OS
-POSIX
-PostScript
-RE's
-README
-RECDIR
-Reference''USD:13
-SIGHUP
-SIGWINCH
-SQUOTE
-Se
-Std
-Std1003.2
-Sy
-TANDARDS
-TIOCGWINSZ
-TMPDIR
-Todo
-USD.doc
-USD:13
-UUNET
-Vx
-Whitespace
-XOFF
-XON
-XOptions
-XXCOLUMNS
-XXXX
-XXXXXX
-XXb
-ZZ
-ab
-abbrev
-ags
-ai
-al
-altwerase
-arg
-args
-autoindent
-autoprint
-autowrite
-aw
-bbrev
-bf
-bigword
-bigwords
-bostic
-brev
-bugs.current
-c2w
-carat
-cdy
-changelog
-chd
-cmd
-count1
-count2
-creens
-cs.berkeley.edu
-db
-dbopen
-def
-di
-dir
-dit
-docs
-eFlRsv
-eFlRv
-ead
-eb
-edcompatible
-elete
-elvis
-email
-enum
-eof
-errorbells
-esc
-ex.cmd.roff
-exrc
-ext
-exu
-exusage
-fi
-filesystem
-filesystems
-ftp.cs.berkeley.edu
-ftp.uu.net
-gdb
-gdb.script
-gs
-gzip'd
-halfbyte
-hange
-hangup
-hardtabs
-ht
-ic
-ifdef
-ignorecase
-ile
-ind
-ious
-ir
-ist
-ize
-keystroke
-keystrokes
-keytime
-leftright
-lhs
-li
-lib
-libc.tags
-lobal
-lowercase
-lp
-matchtime
-mber
-meta
-mk
-mkexrc
-modeful
-modeline
-modelines
-ndo
-nex
-nexrc
-nk
-nomagic
-nooption
-nsert
-nul
-nvi
-nvi.tar.Z
-nvi.tar.z
-nz
-oin
-op
-ove
-para
-pathname
-pathnames
-ppend
-pu
-py
-rc.local
-readonly
-rec
-recdir
-recfile
-recover.XXXX
-recover.XXXXXX
-recover.c
-recover.script
-remapmax
-res
-rew
-rhs
-ript
-rk
-ro
-roff
-rsion
-sc
-scr
-screeen
-se
-set.opt.roff
-shiftwidth
-showmatch
-showmode
-sidescroll
-slowopen
-sm
-sourceany
-sp
-spell.ok
-st
-sual
-svi
-sw
-ta
-tabstop
-taglength
-tagp
-tagpop
-tagstring
-tagt
-tagtop
-terminfo
-th
-tildeop
-tl
-tmp
-ts
-ttytype
-ttywerase
-uR
-ubstitute
-ucb
-uffers
-uit
-una
-unabbrev
-unm
-uppercase
-urce
-uunet
-var
-ve
-vglobal
-vi.0.ps
-vi.0.txt
-vi.1
-vi.XXXX
-vi.XXXXXX
-vi.cmd.roff
-vi.exrc
-vi.recover
-vibackup
-virecovery
-viu
-viusage
-wa
-whitespace
-wi
-wm
-wn
-wq
-wrapmargin
-wrapscan
-writeany
-ws
-xaw
-xit
-ya
-yy
diff --git a/usr.bin/vi/USD.doc/vi.ref/vi.cmd.roff b/usr.bin/vi/USD.doc/vi.ref/vi.cmd.roff
deleted file mode 100644
index 57c0d372af6..00000000000
--- a/usr.bin/vi/USD.doc/vi.ref/vi.cmd.roff
+++ /dev/null
@@ -1,2984 +0,0 @@
-.\" Copyright (c) 1994
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\" 3. All advertising materials mentioning features or use of this software
-.\" must display the following acknowledgement:
-.\" This product includes software developed by the University of
-.\" California, Berkeley and its contributors.
-.\" 4. Neither the name of the University nor the names of its contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" @(#)vi.cmd.roff 8.28 (Berkeley) 7/17/94
-.\"
-.SH 1 "Vi Description"
-.pp
-.CO Vi
-takes up the entire screen to display the edited file,
-except for the bottom line of the screen.
-The bottom line of the screen is used to enter
-.CO ex
-commands, and for
-.CO vi
-error and informational messages.
-If no other information is being displayed,
-the default display can show the current cursor row and cursor column,
-an indication of whether the file has been modified,
-and the current mode of the editor.
-See the
-.OP ruler ,
-.OP showdirty
-and
-.OP showmode
-options for more information.
-.pp
-Empty lines do not have any special representation on the screen,
-but lines on the screen that would logically come after the end of
-the file are displayed as a single tilde
-.PQ ~
-character.
-To differentiate between empty lines and lines consisting of only
-whitespace characters, use the
-.OP list
-option.
-Historically, implementations of
-.CO vi
-have also displayed some lines as single asterisk
-.PQ @
-characters.
-These were lines that were not correctly displayed, i.e. lines on the
-screen that did not correspond to lines in the file, or lines that did
-not fit on the current screen.
-.CO Nvi
-never displays lines in this fashion.
-.pp
-.CO Vi
-is a modeful editor, i.e. it has two modes,
-.QQ command
-mode and
-.QQ "text input"
-mode.
-When
-.CO vi
-first starts, it is in command mode.
-There are several commands that change
-.CO vi
-into text input mode.
-The
-.LI <escape>
-character is used to resolve the text input into the file,
-and exit back into command mode.
-In
-.CO vi
-command mode, the cursor is always positioned on the last column of
-characters which take up more than one column on the screen.
-In
-.CO vi
-text insert mode, the cursor is positioned on the first column of
-characters which take up more than one column on the screen.
-.pp
-Generally, if the cursor line and cursor column are not on the screen,
-then the screen is scrolled (if the target cursor is close) or repainted
-(if the target cursor is far away) so that the cursor is on the screen.
-If the screen is scrolled, it is moved a minimal amount, and the cursor
-line will usually appear at the top or bottom of the screen.
-In the screen is repainted, the cursor line will appear in the center of
-the screen, unless the cursor is sufficiently close to the beginning or
-end of the file that this is not possible.
-If the
-.OP leftright
-option is set, the screen may be scrolled or repainted in a horizontal
-direction as well as in a vertical one.
-.pp
-A major difference between the historical
-.CO vi
-presentation and
-.CO nvi
-is in the scrolling and screen oriented position commands,
-.CO <control-B> ,
-.CO <control-D> ,
-.CO <control-E> ,
-.CO <control-F> ,
-.CO <control-U> ,
-.CO <control-Y> ,
-.CO H ,
-.CO L
-and
-.CO M .
-In historical implementations of
-.CO vi ,
-these commands acted on physical (as opposed to logical, or screen)
-lines.
-For lines that were sufficiently long in relation to the size of the
-screen, this meant that single line scroll commands might repaint the
-entire screen, scrolling or screen positioning command might not change
-the screen or move the cursor at all, and some lines simply could not
-be displayed, even though
-.CO vi
-would edit the file that contained them.
-In
-.CO nvi ,
-these commands act on logical, i.e. screen lines.
-You are unlikely to notice any difference unless you are editing files
-with lines significantly longer than a screen width.
-.pp
-.CO Vi
-keeps track of the currently
-.QQ "most attractive"
-cursor position.
-Each command description (for commands that can change the current
-cursor position),
-specifies if the cursor is set to a specific location in the line,
-or if it is moved to the
-.QQ "most attractive cursor position" .
-The latter means that the cursor is moved to the cursor position
-that is vertically as close as possible to the current cursor
-position.
-If the current line is shorter than the cursor position
-.CO vi
-would select, the cursor is positioned on the last character in the line.
-(If the line is empty, the cursor is positioned on the first column
-of the line.)
-If a command moves the cursor to the most attractive position,
-it does not alter the current cursor position, and a subsequent
-movement will again attempt to move the cursor to that position.
-Therefore, although a movement to a line shorter than the currently
-most attractive position will cause the cursor to move to the end of
-that line, a subsequent movement to a longer line will cause the
-cursor to move back to the most attractive position.
-.pp
-In addition, the
-.CO $
-command makes the end of each line the most attractive cursor position
-rather than a specific column.
-.pp
-Each
-.CO vi
-command described below notes where the cursor ends up after it is
-executed.
-This position is described in terms of characters on the line, i.e.
-.QQ "the previous character" ,
-or,
-.QQ "the last character in the line" .
-This is to avoid needing to continually refer to on what part of the
-character the cursor rests.
-.pp
-The following words have special meaning for
-.CO vi
-commands.
-.KY "previous context"
-.IP "previous context"
-The position of the cursor before the command which caused the
-last absolute movement was executed.
-Each
-.CO vi
-command described in the next section that is considered an
-absolute movement is so noted.
-In addition, specifying
-.i any
-address to an
-.CO ex
-command is considered an absolute movement.
-.KY "motion"
-.IP "motion"
-A second
-.CO vi
-command can be used as an optional trailing argument to the
-.CO vi
-.CO \&! ,
-.CO \&< ,
-.CO \&> ,
-.CO \&c ,
-.CO \&d ,
-.CO \&y ,
-and (depending on the
-.OP tildeop
-option)
-.CO \&~
-commands.
-This command indicates the end of the region of text that's affected by
-the command.
-The motion command may be either the command character repeated (in
-which case it means the current line) or a cursor movement command.
-In the latter case, the region affected by the command is from the
-starting or stopping cursor position which comes first in the file,
-to immediately before the starting or stopping cursor position which
-comes later in the file.
-Commands that operate on lines instead of using beginning and ending
-cursor positions operate on all of the lines that are wholly or
-partially in the region.
-In addition, some other commands become line oriented depending on
-where in the text they are used.
-The command descriptions below note these special cases.
-.sp
-The following commands may all be used as motion components for
-.CO vi
-commands:
-.sp
-.ne 12v
-.ft C
-.TS
-r r r r.
-<control-A> <control-H> <control-J> <control-M>
-<control-N> <control-P> <space> $
-% '<character> ( )
-+ , - /
-0 ; ? B
-E F G H
-L M N T
-W [[ ]] ^
-\&_ `<character> b e
-f h j k
-l n t w
-{ | }
-.TE
-.ft R
-.sp
-The optional count prefix available for some of the
-.CO vi
-commands that take motion commands, or the count prefix available
-for the
-.CO vi
-commands that are used as motion components,
-may be included and is
-.i always
-considered part of the motion argument.
-For example, the commands
-.QT c2w
-and
-.QT 2cw
-are equivalent, and the region affected by the
-.CO c
-command is two words of text.
-In addition, if the optional count prefix is specified for both the
-.CO vi
-command and its motion component, the effect is multiplicative and
-is considered part of the motion argument.
-For example, the commands
-.QT 4cw
-and
-.QT 2c2w
-are equivalent, and the region affected by the
-.CO c
-command is four words of text.
-.KY "count"
-.IP "count"
-A positive number used as an optional argument to most commands,
-either to give a size or a position (for display or movement commands),
-or as a repeat count (for commands that modify text).
-The count argument is always optional and defaults to 1 unless otherwise
-noted in the command description.
-.sp
-When a
-.CO vi
-command synopsis shows both a
-.LI [buffer]
-and
-.LI [count] ,
-they may be presented in any order.
-.KY "bigword"
-.IP "bigword"
-A set of non-whitespace characters preceded and followed by whitespace
-characters or the beginning or end of the file or line.
-.sp
-Groups of empty lines (or lines containing only whitespace characters)
-are treated as a single bigword.
-.KY word
-.IP word
-Generally, in languages where it is applicable,
-.CO vi
-recognizes two kinds of words.
-First, a sequence of letters, digits and underscores, delimited at both
-ends by: characters other than letters, digits, or underscores; the
-beginning or end of a line; the beginning or end of the file.
-Second, a sequence of characters other than letters, digits, underscores,
-or whitespace characters, delimited at both ends by: a letter, digit,
-underscore, or whitespace character;
-the beginning or end of a line; the beginning or end of the file.
-.sp
-Groups of empty lines (or lines containing only whitespace characters)
-are treated as a single word.
-.KY "paragraph"
-.IP "paragraph"
-An area of text that begins with either the beginning of a file,
-an empty line, or a section boundary, and continues until either
-an empty line, section boundary, or the end of the file.
-.sp
-Groups of empty lines (or lines containing only whitespace characters)
-are treated as a single paragraph.
-.sp
-Additional paragraph boundaries can be defined using the
-.OP paragraph
-option.
-.KY "section"
-.IP "section"
-An area of text that starts with the beginning of the file or a line
-whose first character is an open brace
-.PQ {
-and continues until the next section or the end of the file.
-.sp
-Additional section boundaries can be defined using the
-.OP sections
-option.
-.KY "sentence"
-.IP "sentence"
-An area of text that begins with either the beginning of the file or the
-first nonblank character following the previous sentence, paragraph, or
-section boundary and continues until the end of the file or a or a period
-.PQ \&.
-exclamation point
-.PQ !
-or question mark
-.PQ ?
-character,
-followed by either an end-of-line or two whitespace characters.
-Any number of closing parentheses
-.PQ ) ,
-brackets
-.PQ ]
-or double-quote
-.PQ """"
-characters can appear between the period, exclamation point,
-or question mark and the whitespace characters or end-of-line.
-.sp
-Groups of empty lines (or lines containing only whitespace characters)
-are treated as a single sentence.
-.SH 1 "Vi Commands"
-.pp
-The following section describes the commands available in the command
-mode of the
-.CO vi
-editor.
-In each entry below, the tag line is a usage synopsis for the command
-character.
-In addition, the final line and column the cursor rests upon,
-and any options which affect the command are noted.
-.KY <control-A>
-.IP "[count] <control-A>"
-Search forward
-.LI count
-times for the current word.
-The current word begins at the first non-whitespace character on or
-after the current cursor position,
-and extends up to the next non-word character or the end of the line.
-The search is literal, i.e. no characters in the word have any special
-meaning in terms of Regular Expressions.
-It is an error if no matching pattern is found between the starting position
-and the end of the file.
-.sp
-The
-.CO <control-A>
-command is an absolute movement.
-The
-.CO <control-A>
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-character oriented.
-.SS
-.SP Line:
-Set to the line where the word is found.
-.SP Column:
-Set to the first character of the word.
-.SP Options:
-Affected by the
-.OP extended ,
-.OP ignorecase
-and
-.OP wrapscan
-options.
-.SE
-.KY <control-B>
-.IP "[count] <control-B>"
-Page backward
-.LI count
-screens.
-Two lines of overlap are maintained by displaying the window
-starting at line
-.LI "(top_line - count * window_size) + 2" ,
-where
-.LI window_size
-is the value of the
-.OP window
-option.
-(In the case of split screens, this size is corrected to the
-current screen size.)
-This is an error if the movement is past the beginning of the file.
-.sp
-The
-.CO <control-B>
-command is an absolute movement.
-.SS
-.SP Line:
-Set to the last line of text displayed on the screen.
-.SP Column:
-Set to the first nonblank character of the line.
-.SP Options:
-None.
-.SE
-.KY <control-D>
-.IP "[count] <control-D>"
-Scroll forward
-.LI count
-lines.
-If
-.LI count
-is not specified, scroll forward the number of lines specified by the last
-.CO <control-D>
-or
-.CO <control-U>
-command.
-If this is the first
-.CO <control-D>
-or
-.CO <control-U>
-command,
-scroll forward half the number of lines in the screen.
-(In the case of split screens, the default scrolling distance is
-corrected to half the current screen size.)
-This is an error if the movement is past the end of the file.
-.sp
-The
-.CO <control-D>
-command is an absolute movement.
-.SS
-.SP Line:
-Set to the current line plus the number of lines scrolled.
-.SP Column:
-Set to the first nonblank character of the line.
-.SP Options:
-None.
-.SE
-.KY <control-E>
-.IP "[count] <control-E>"
-Scroll forward
-.LI count
-lines, leaving the cursor on the current line and column, if possible.
-This is an error if the movement is past the end of the file.
-.SS
-.SP Line:
-Unchanged unless the current line scrolls off the screen,
-in which case it is set to the first line on the screen.
-.SP Column:
-Unchanged unless the current line scrolls off the screen,
-in which case it is set to the most attractive cursor position.
-.SP Options:
-None.
-.SE
-.KY <control-F>
-.IP "[count] <control-F>"
-Page forward
-.LI count
-screens.
-Two lines of overlap are maintained by displaying the window
-starting at line
-.LI "top_line + count * window_size - 2" ,
-where
-.LI window_size
-is the value of the
-.OP window
-option.
-(In the case of split screens, this size is corrected to the
-current screen size.)
-This is an error if the movement is past the end of the file.
-.sp
-The
-.CO <control-F>
-command is an absolute movement.
-.SS
-.SP Line:
-Set to the first line on the screen.
-.SP Column:
-Set to the first nonblank character of the current line.
-.SP Options:
-None.
-.SE
-.KY <control-G>
-.IP "<control-G>"
-Display the file information.
-The information includes the current pathname, the current line,
-the number of total lines in the file, the current line as a percentage
-of the total lines in the file, if the file has been modified,
-was able to be locked, if the file's name has been changed,
-and if the edit session is read-only.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY <control-H>
-.IP "<control-H>"
-.Ip "[count] h"
-Move the cursor back
-.LI count
-characters in the current line.
-This is an error if the cursor is on the first character in the line.
-.sp
-The
-.CO <control-H>
-and
-.CO h
-commands may be used as the motion component of other
-.CO vi
-commands,
-in which case any text copied into a buffer is character oriented.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-Set to the
-.LI "current - count"
-character, or, the first character in the line if
-.LI count
-is greater than or equal to the number of characters in the line
-before the cursor.
-.SP Options:
-None.
-.SE
-.KY <control-J>
-.IP "[count] <control-J>"
-.KY <control-N>
-.Ip "[count] <control-N>"
-.KY j
-.Ip "[count] j"
-Move the cursor down
-.LI count
-lines without changing the current column.
-This is an error if the movement is past the end of the file.
-.sp
-The
-.CO <control-J> ,
-.CO <control-N>
-and
-.CO j
-commands may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-line oriented.
-.SS
-.SP Line:
-Set to the current line plus
-.LI count .
-.SP Column:
-The most attractive cursor position.
-.SP Options:
-None.
-.SE
-.KY <control-L>
-.IP "<control-L>"
-.KY <control-R>
-.Ip "<control-R>"
-Repaint the screen.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY <control-M>
-.IP "[count] <control-M>"
-.KY +
-.Ip "[count] +"
-Move the cursor down
-.LI count
-lines to the first nonblank character of that line.
-This is an error if the movement is past the end of the file.
-.sp
-The
-.CO <control-M>
-and
-.CO +
-commands may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-line oriented.
-.SS
-.SP Line:
-Set to the current line plus
-.LI count .
-.SP Column:
-Set to the first nonblank character in the line.
-.SP Options:
-None.
-.SE
-.KY <control-P>
-.IP "[count] <control-P>"
-.KY k
-.Ip "[count] k"
-Move the cursor up
-.LI count
-lines, without changing the current column.
-This is an error if the movement is past the beginning of the file.
-.sp
-The
-.CO <control-P>
-and
-.CO k
-commands may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-line oriented.
-.SS
-.SP Line:
-Set to the current line minus count.
-.SP Column:
-The most attractive cursor position.
-.SP Options:
-None.
-.SE
-.KY <control-T>
-.IP "<control-T>"
-Return to the most recent tag context.
-The
-.CO <control-T>
-command is an absolute movement.
-.SS
-.SP Line:
-Set to the context of the previous tag command.
-.SP Column:
-Set to the context of the previous tag command.
-.SP Options:
-None.
-.SE
-.KY <control-U>
-.IP "<control-U>"
-Scroll backward
-.LI count
-lines.
-If
-.LI count
-is not specified, scroll backward the number of lines specified by the
-last
-.CO <control-D>
-or
-.CO <control-U>
-command.
-If this is the first
-.CO <control-D>
-or
-.CO <control-U>
-command,
-scroll backward half the number of lines in the screen.
-(In the case of split screens, the default scrolling distance is
-corrected to half the current screen size.)
-This is an error if the movement is past the beginning of the file.
-.sp
-The
-.CO <control-U>
-command is an absolute movement.
-.SS
-.SP Line:
-Set to the current line minus the amount scrolled.
-.SP Column:
-Set to the first nonblank character in the line.
-.SP Options:
-None.
-.SE
-.KY <control-W>
-.IP "<control-W>"
-Switch to the next lower screen in the window, or, to the first
-screen if there are no lower screens in the window.
-.SS
-.SP Line:
-Set to the previous cursor position in the window.
-.SP Column:
-Set to the previous cursor position in the window.
-.SP Options:
-None.
-.SE
-.KY <control-Y>
-.IP "<control-Y>"
-Scroll backward
-.LI count
-lines, leaving the current line and column as is, if possible.
-This is an error if the movement is past the beginning of the file.
-.SS
-.SP Line:
-Unchanged unless the current line scrolls off the screen,
-in which case it is set to the last line of text displayed
-on the screen.
-.SP Column:
-Unchanged unless the current line scrolls off the screen,
-in which case it is the most attractive cursor position.
-.SP Options:
-None.
-.SE
-.KY <control-Z>
-.IP "<control-Z>"
-Suspend the current editor session.
-If the file has been modified since it was last completely written,
-and the
-.OP autowrite
-option is set, the file is written before the editor session is
-suspended.
-If this write fails, the editor session is not suspended.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-Unchanged.
-.SP Options:
-Affected by the
-.OP autowrite
-option.
-.SE
-.KY <escape>
-.IP "<escape>"
-Execute
-.CO ex
-commands or cancel partial commands.
-If an
-.CO ex
-command is being entered (e.g.
-.CO / ,
-.CO ? ,
-.CO :
-or
-.CO ! ),
-the command is executed.
-If a partial command has been entered, e.g.
-.QL "[0-9]*" ,
-or
-.QL "[0-9]*[!<>cdy]" ,
-the command is cancelled.
-Otherwise, it is an error.
-.SS
-.SP Line:
-When an
-.CO ex
-command is being executed, the current line is set as described for
-that command.
-Otherwise, unchanged.
-.SP Column:
-When an
-.CO ex
-command is being executed, the current column is set as described for
-that command.
-Otherwise, unchanged.
-.SP Options:
-None.
-.SE
-.KY <control-]>
-.IP "<control-]>"
-Push a tag reference onto the tag stack.
-The tags files (see the
-.OP tags
-option for more information) are searched for a tag matching the
-current word.
-The current word begins at the first non-whitespace character on or
-after the current cursor position,
-and extends up to the next non-word character or the end of the line.
-If a matching tag is found, the current file is discarded and the
-file containing the tag reference is edited.
-.sp
-If the current file has been modified since it was last completely
-written, the command will fail.
-The
-.CO <control-]>
-command is an absolute movement.
-.SS
-.SP Line:
-Set to the line containing the matching tag string.
-.SP Column:
-Set to the start of the matching tag string.
-.SP Options:
-Affected by the
-.OP tags
-and
-.OP taglength
-options.
-.SE
-.KY <control-^>
-.IP "<control-^>"
-Switch to the most recently edited file.
-.sp
-If the file has been modified since it was last completely written,
-and the
-.OP autowrite
-option is set, the file is written out.
-If this write fails, the command will fail.
-Otherwise, if the current file has been modified since it was last
-completely written, the command will fail.
-.SS
-.SP Line:
-Set to the line the cursor was on when the file was last edited.
-.SP Column:
-Set to the column the cursor was on when the file was last edited.
-.SP Options:
-Affected by the
-.OP autowrite
-option.
-.SE
-.KY <space>
-.IP "[count] <space>"
-.KY l
-.Ip "[count] l"
-Move the cursor forward
-.LI count
-characters without changing the current line.
-This is an error if the cursor is on the last character in the line.
-.sp
-The
-.CO <space>
-and
-.CO \&l
-commands may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-character oriented.
-In addition, these commands may be used as the motion components
-of other commands when the cursor is on the last character in the
-line, without error.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-Set to the current character plus the next
-.LI count
-characters, or to the last character on the line if
-.LI count
-is greater than the number of characters in the line after the
-current character.
-.SP Options:
-None.
-.SE
-.KY !
-.IP "[count] ! motion shell-argument(s)"
-Replace text with results from a shell command.
-Pass the lines specified by the
-.LI count
-and
-.LI motion
-arguments as standard input to the program named by the
-.OP shell
-option, and replace those lines with the output (both
-standard error and standard output) of that command.
-.sp
-After the motion is entered,
-.CO vi
-prompts for arguments to the shell command.
-.sp
-Within those arguments,
-.QT %
-and
-.QT #
-characters are expanded to the current and alternate pathnames,
-respectively.
-The
-.QT !
-character is expanded with the command text of the previous
-.CO !
-or
-.CO :!
-commands.
-(Therefore, the command
-.CO !!
-repeats the previous
-.CO !
-command.)
-The special meanings of
-.QT % ,
-.QT #
-and
-.QT !
-can be overridden by escaping them with a backslash.
-If no
-.CO !
-or
-.CO :!
-command has yet been executed, it is an error to use an unescaped
-.QT !
-character.
-The
-.CO !
-command does
-.i not
-do shell expansion on the strings provided as arguments.
-If any of the above expansions change the arguments the user entered,
-the command is redisplayed at the bottom of the screen.
-.sp
-.CO Vi
-then executes the program named by the
-.OP shell
-option, with a
-.b \-c
-flag followed by the arguments (which are bundled into a single argument).
-.sp
-The
-.CO !
-command is permitted in an empty file.
-.sp
-If the file has been modified since it was last completely written,
-the
-.CO !
-command will warn you.
-.SS
-.SP Line:
-The first line of the replaced text.
-.SP Column:
-The first column of the replaced text.
-.SP Options:
-Affected by the
-.OP shell
-option.
-.SE
-.KY #
-.IP "[count] # +|-|#"
-Increment or decrement the current number.
-The current number begins at the first non-number character on or
-before the current cursor position, or the beginning of the line,
-and extends up to the first non-number character on or after the
-current cursor position or the end of the line.
-If the trailing character is a
-.LI \&+ ,
-the number is incremented by
-.LI count .
-If the trailing character is a
-.LI \&- ,
-the number is decremented by
-.LI count .
-If the trailing character is a
-.LI \&# ,
-the previous increment or decrement is repeated.
-.sp
-The format of the number (decimal, hexadecimal, and octal,
-and leading 0's) is retained unless the new value cannot be
-represented in the previous format.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-Set to the first character in the cursor word.
-.SP Options:
-None.
-.SE
-.KY $
-.IP "[count] $"
-Move the cursor to the end of a line.
-If
-.LI count
-is specified, the cursor moves down
-.LI "count - 1"
-lines.
-.sp
-It is not an error to use the
-.CO $
-command when the cursor is on the last character in the line or
-when the line is empty.
-.sp
-The
-.CO $
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-character oriented, unless the cursor is at, or before the first
-nonblank character in the line, in which case it is line oriented.
-It is not an error to use the
-.CO $
-command as a motion component when the cursor is on the last character
-in the line, although it is an error when the line is empty.
-.SS
-.SP Line:
-Set to the current line plus
-.LI count
-minus 1.
-.SP Column:
-Set to the last character in the line.
-.SP Options:
-None.
-.SE
-.KY %
-.IP %
-Move to the matching character.
-The cursor moves to the parenthesis or curly brace which
-.i matches
-the parenthesis or curly brace found at the current cursor position
-or which is the closest one to the right of the cursor on the line.
-It is an error to execute the
-.CO %
-command on a line without a parenthesis or curly brace.
-Historically, any
-.LI count
-specified to the
-.CO %
-command was ignored.
-.sp
-The
-.CO %
-command is an absolute movement.
-The
-.CO %
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-character oriented, unless the starting point of the region is at
-or before the first nonblank character on its line, and the ending
-point is at or after the last nonblank character on its line, in
-which case it is line oriented.
-.SS
-.SP Line:
-Set to the line containing the matching character.
-.SP Column:
-Set to the matching character.
-.SP Options:
-None.
-.SE
-.KY &
-.IP "&"
-Repeat the previous substitution command on the current line.
-.sp
-Historically, any
-.LI count
-specified to the
-.CO &
-command was ignored.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-Unchanged if the cursor was on the last character in the line,
-otherwise, set to the first nonblank character in the line.
-.SP Options:
-Affected by the
-.OP edcompatible ,
-.OP extended ,
-.OP ignorecase
-and
-.OP magic
-options.
-.SE
-.KY SQUOTE<character>
-.IP \'<character>
-.KY `<character>
-.Ip `<character>
-Return to a context marked by the character
-.LI <character> .
-If
-.LI <character>
-is the
-.QT '
-or
-.QT `
-character, return to the previous context.
-If
-.LI <character>
-is any other character,
-return to the context marked by that character (see the
-.CO m
-command for more information).
-If the command is the
-.CO \'
-command, only the line value is restored,
-and the cursor is placed on the first nonblank character of that line.
-If the command is the
-.CO `
-command, both the line and column values are restored.
-.sp
-It is an error if the context no longer exists because of
-line deletion.
-(Contexts follow lines that are moved, or which are deleted
-and then restored.)
-.sp
-The
-.CO \'
-and
-.CO `
-commands are both absolute movements.
-They may be used as a motion component for other
-.CO vi
-commands.
-For the
-.CO \'
-command, any text copied into a buffer is line oriented.
-For the
-.CO `
-command, any text copied into a buffer is character oriented, unless
-it both starts and stops at the first character in the line, in which
-case it is line oriented.
-In addition, when using the
-.CO `
-command as a motion component,
-commands which move backward and started at the first character in the
-line, or move forward and ended at the first character in the line,
-are corrected to the last character of the starting and ending lines,
-respectively.
-.SS
-.SP Line:
-Set to the line from the context.
-.SP Column:
-Set to the first nonblank character in the line, for the
-.CO \'
-command, and set to the context's column for the
-.CO `
-command.
-.SP Options:
-None.
-.SE
-.KY (
-.IP "[count] ("
-Back up
-.LI count
-sentences.
-.sp
-The
-.CO (
-command is an absolute movement.
-The
-.CO (
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-character oriented, unless the starting and stopping points of the
-region are the first character in the line, in which case it is
-line oriented.
-In the latter case, the stopping point of the region is adjusted
-to be the end of the line immediately before it, and not the original
-cursor position.
-.SS
-.SP Line:
-Set to the line containing the beginning of the sentence.
-.SP Column:
-Set to the first nonblank character of the sentence.
-.SP Options:
-None.
-.SE
-.KY )
-.IP "[count] )"
-Move forward
-.LI count
-sentences.
-.sp
-The
-.CO )
-command is an absolute movement.
-The
-.CO )
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-character oriented, unless the starting point of the region is the
-first character in the line, in which case it is line oriented.
-In the latter case, if the stopping point of the region is also
-the first character in the line, it is adjusted to be the end of the
-line immediately before it.
-.SS
-.SP Line:
-Set to the line containing the beginning of the sentence.
-.SP Column:
-Set to the first nonblank character of the sentence.
-.SP Options:
-None.
-.SE
-.KY ,
-.IP "[count] ,"
-Reverse find character
-.LI count
-times.
-Reverse the last
-.CO F ,
-.CO f ,
-.CO T
-or
-.CO t
-command, searching the other way in the line,
-.LI count
-times.
-.sp
-The
-.CO ,
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-character oriented.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-Set to the searched-for character.
-.SP Options:
-None.
-.SE
-.KY MINUSSIGN
-.IP "[count] \-"
-Move to first nonblank of the previous line,
-.LI count
-times.
-.sp
-This is an error if the movement is past the beginning of the file.
-.sp
-The
-.CO -
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-line oriented.
-.SS
-.SP Line:
-Set to the current line minus
-.LI count .
-.SP Column:
-Set to the first nonblank character in the line.
-.SP Options:
-None.
-.SE
-.KY \&.
-.IP "[count] \&."
-Repeat the last
-.CO vi
-command that modified text.
-The repeated command may be a command and motion component combination.
-If
-.LI count
-is specified, it replaces
-.i both
-the count specified for the repeated command, and, if applicable, for
-the repeated motion component.
-If
-.LI count
-is not specified, the counts originally specified to the command being
-repeated are used again.
-.sp
-As a special case, if the
-.CO \.
-command is executed immediately after the
-.CO u
-command, the change log is rolled forward or backward, depending on
-the action of the
-.CO u
-command.
-.SS
-.SP Line:
-Set as described for the repeated command.
-.SP Column:
-Set as described for the repeated command.
-.SP Options:
-None.
-.SE
-.KY /RE/
-.IP "/RE<carriage-return>"
-.Ip "/RE/ [offset]<carriage-return>"
-.KY ?RE?
-.Ip "?RE<carriage-return>"
-.Ip "?RE? [offset]<carriage-return>"
-.KY N
-.Ip "N"
-.KY n
-.Ip "n"
-Search forward or backward for a regular expression.
-The commands beginning with a slash
-.PQ /
-character are forward searches, the commands beginning with a
-question mark
-.PQ ?
-are backward searches.
-.CO Vi
-prompts with the leading character on the last line of the screen
-for a string.
-It then searches forward or backward in the file for the next
-occurrence of the string, which is interpreted as a Basic Regular
-Expression.
-.sp
-The
-.CO /
-and
-.CO ?
-commands are absolute movements.
-They may be used as the motion components of other
-.CO vi
-commands, in which case any text copied into a buffer is
-character oriented, unless the search started and ended on
-the first column of a line, in which case it is line oriented.
-In addition, forward searches ending at the first character of a line,
-and backward searches beginning at the first character in the line,
-are corrected to begin or end at the last character of the previous line.
-(Note, forward and backward searches can occur for both
-.CO /
-and
-.CO ?
-commands, if the
-.OP wrapscan
-option is set.)
-.sp
-If an offset from the matched line is specified (i.e. a trailing
-.QT /
-or
-.QT ?
-character is followed by a signed offset), the buffer will always
-be line oriented (e.g.
-.QT /string/+0
-will always guarantee a line orientation).
-.sp
-The
-.CO n
-command repeats the previous search.
-.sp
-The
-.CO N
-command repeats the previous search, but in the reverse direction.
-.sp
-Missing RE's (e.g.
-.QT //<carriage-return> ,
-.QT /<carriage-return> ,
-.QT ??<carriage-return> ,
-or
-.QT ?<carriage-return>
-search for the last search RE, in the indicated direction.
-.sp
-Searches may be interrupted using the
-.LI <interrupt>
-character.
-.SS
-.SP Line:
-Set to the line in which the match occurred.
-.SP Column:
-Set to the first character of the matched string.
-.SP Options:
-Affected by the
-.OP edcompatible ,
-.OP extended ,
-.OP ignorecase ,
-.OP magic ,
-and
-.OP wrapscan
-options.
-.SE
-.KY 0
-.IP "0"
-Move to the first character in the current line.
-It is not an error to use the
-.CO 0
-command when the cursor is on the first character in the line,
-.sp
-The
-.CO 0
-command may be used as the motion component of other
-.CO vi
-commands, in which case it is an error if the cursor is on the
-first character in the line.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-Set to the first character in the line.
-.SP Options:
-None.
-.SE
-.KY :
-.IP ":"
-Execute an ex command.
-.CO Vi
-prompts for an
-.CO ex
-command on the last line of the screen, using a colon
-.PQ :
-character.
-The command is terminated by a
-.LI <carriage-return> ,
-.LI <newline>
-or
-.LI <escape>
-character; all of these characters may be escaped by using a
-.LI "<literal next>"
-character.
-The command is then executed.
-.sp
-If the
-.CO ex
-command writes to the screen,
-.CO vi
-will prompt the user for a
-.LI <carriage-return>
-before continuing
-when the
-.CO ex
-command finishes.
-Large amounts of output from the
-.CO ex
-command will be paged for the user, and the user prompted for a
-.LI <carriage-return>
-or
-.LI <space>
-key to continue.
-In some cases, a quit (normally a
-.QQ q
-character) or
-.LI <interrupt>
-may be entered to interrupt the
-.CO ex
-command.
-.sp
-When the
-.CO ex
-command finishes, and the user is prompted to resume visual mode,
-it is also possible to enter another
-.QT :
-character followed by another
-.CO ex
-command.
-.SS
-.SP Line:
-The current line is set as described for the
-.CO ex
-command.
-.SP Column:
-The current column is set as described for the
-.CO ex
-command.
-.SP Options:
-None.
-.SE
-.KY ;
-.IP "[count] ;"
-Repeat the last character find
-.LI count
-times.
-The last character find is one of the
-.CO F ,
-.CO f ,
-.CO T
-or
-.CO t
-commands.
-.sp
-The
-.CO ;
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-character oriented.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-Set to the searched-for character.
-.SP Options:
-None.
-.SE
-.KY <
-.IP "[count] < motion"
-.KY >
-.Ip "[count] > motion"
-Shift lines left or right.
-Shift the number of lines in the region specified by the motion component,
-times
-.LI count ,
-left (for the
-.CO <
-command) or right (for the
-.CO >
-command) by the number of columns specified by the
-.OP shiftwidth
-option.
-Only whitespace characters are deleted when shifting left;
-once the first character in the line contains a nonblank character,
-the
-.CO shift
-will succeed, but the line will not be modified.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-Set to the first nonblank character in the line.
-.SP Options:
-Affected by the
-.OP shiftwidth
-option.
-.SE
-.KY @
-.IP "@ buffer"
-Execute a named buffer.
-Execute the named buffer as
-.CO vi
-commands.
-The buffer may include
-.CO ex
-commands, too, but they must be expressed as a
-.CO :
-command.
-If the buffer is line oriented,
-.LI <newline>
-characters are logically appended to each line of the buffer.
-If the buffer is character oriented,
-.LI <newline>
-characters are logically appended to all but the last line in the buffer.
-.sp
-If the buffer name is
-.QT @ ,
-or
-.QT * ,
-then the last buffer executed shall be used.
-It is an error to specify
-.QT @@
-or
-.QT **
-if there were no buffer previous executions.
-The text of a macro may contain an
-.CO @
-command,
-and it is possible to create infinite loops in this manner.
-(The
-.LI <interrupt>
-character may be used to interrupt the loop.)
-.SS
-.SP Line:
-The current line is set as described for the command(s).
-.SP Column:
-The current column is set as described for the command(s).
-.SP Options:
-None.
-.SE
-.KY A
-.IP "[count] A"
-Enter input mode, appending the text after the end of the line.
-If
-.LI count
-is specified, the text is repeatedly input
-.LI "count - 1"
-more times after input mode is exited.
-.SS
-.SP Line:
-Set to the last line upon which characters were entered.
-.SP Column:
-Set to the last character entered.
-.SP Options:
-Affected by the
-.OP altwerase ,
-.OP autoindent ,
-.OP beautify ,
-.OP showmatch ,
-.OP ttywerase
-and
-.OP wrapmargin
-options.
-.SE
-.KY B
-.IP "[count] B"
-Move backward
-.LI count
-bigwords.
-Move the cursor backward to the beginning of a bigword by repeating the
-following algorithm: if the current position is at the beginning of a
-bigword or the character at the current position cannot be part of a bigword,
-move to the first character of the preceding bigword.
-Otherwise, move to the first character of the bigword at the current position.
-If no preceding bigword exists on the current line, move to the first
-character of the last bigword on the first preceding line that contains a
-bigword.
-.sp
-The
-.CO B
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-character oriented.
-.SS
-.SP Line:
-Set to the line containing the word selected.
-.SP Column:
-Set to the first character of the word selected.
-.SP Options:
-None.
-.SE
-.KY C
-.IP "[buffer] [count] C"
-Change text from the current position to the end-of-line.
-If
-.LI count
-is specified, the input text replaces from the current position to
-the end-of-line, plus
-.LI "count - 1"
-subsequent lines.
-.SS
-.SP Line:
-Set to the last line upon which characters were entered.
-.SP Column:
-Set to the last character entered.
-.SP Options:
-Affected by the
-.OP altwerase ,
-.OP autoindent ,
-.OP beautify ,
-.OP showmatch ,
-.OP ttywerase
-and
-.OP wrapmargin
-options.
-.SE
-.KY D
-.IP "[buffer] D"
-Delete text from the current position to the end-of-line.
-.sp
-It is not an error to execute the
-.CO D
-command on an empty line.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-Set to the character before the current character, or, column 1 if
-the cursor was on column 1.
-.SP Options:
-None.
-.SE
-.KY E
-.IP "[count] E"
-Move forward
-.LI count
-end-of-bigwords.
-Move the cursor forward to the end of a bigword by repeating the
-following algorithm: if the current position is the end of a
-bigword or the character at that position cannot be part of a bigword,
-move to the last character of the following bigword.
-Otherwise, move to the last character of the bigword at the current
-position.
-If no succeeding bigword exists on the current line,
-move to the last character of the first bigword on the next following
-line that contains a bigword.
-.sp
-The
-.CO E
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-character oriented.
-.SS
-.SP Line:
-Set to the line containing the word selected.
-.SP Column:
-Set to the last character of the word selected.
-.SP Options:
-None.
-.SE
-.KY F
-.IP "[count] F <character>"
-Search
-.LI count
-times backward through the current line for
-.LI <character> .
-.sp
-The
-.CO F
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-character oriented.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-Set to the searched-for character.
-.SP Options:
-None.
-.SE
-.KY G
-.IP "[count] G"
-Move to line
-.LI count ,
-or the last line of the file if
-.LI count
-not specified.
-.sp
-The
-.CO G
-command is an absolute movement.
-The
-.CO \&G
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-line oriented.
-.SS
-.SP Line:
-Set to
-.LI count ,
-if specified, otherwise, the last line.
-.SP Column:
-Set to the first nonblank character in the line.
-.SP Options:
-None.
-.SE
-.KY H
-.IP "[count] H"
-Move to the screen line
-.LI "count - 1"
-lines below the top of the screen.
-.sp
-The
-.CO H
-command is an absolute movement.
-The
-.CO H
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-line oriented.
-.SS
-.SP Line:
-Set to the line
-.LI "count - 1"
-lines below the top of the screen.
-.SP Column:
-Set to the first nonblank character of the
-.i screen
-line.
-.SP Options:
-None.
-.SE
-.KY I
-.IP "[count] I"
-Enter input mode, inserting the text at the beginning of the line.
-If
-.LI count
-is specified, the text input is repeatedly input
-.LI "count - 1"
-more times.
-.SS
-.SP Line:
-Set to the last line upon which characters were entered.
-.SP Column:
-Set to the last character entered.
-.SP Options:
-None.
-.SE
-.KY J
-.IP "[count] J"
-Join lines.
-If
-.LI count
-is specified,
-.LI count
-lines are joined; a minimum of two lines are always joined,
-regardless of the value of
-.LI count .
-.sp
-If the current line ends with a whitespace character, all whitespace
-is stripped from the next line.
-Otherwise, if the next line starts with a open parenthesis
-.PQ (
-do nothing.
-Otherwise, if the current line ends with a question mark
-.PQ ? ,
-period
-.PQ \&.
-or exclamation point
-.PQ ! ,
-insert two spaces.
-Otherwise, insert a single space.
-.sp
-It is not an error to join lines past the end of the file,
-i.e. lines that do not exist.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-Set to the character after the last character of the next-to-last
-joined line.
-.SP Options:
-None.
-.SE
-.KY L
-.IP "[count] L"
-Move to the screen line
-.LI "count - 1"
-lines above the bottom of the screen.
-.sp
-The
-.CO L
-command is an absolute movement.
-The
-.CO L
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-line oriented.
-.SS
-.SP Line:
-Set to the line
-.LI "count - 1"
-lines above the bottom of the screen.
-.SP Column:
-Set to the first nonblank character of the
-.i screen
-line.
-.SP Options:
-None.
-.SE
-.KY M
-.IP " M"
-Move to the screen line in the middle of the screen.
-.sp
-The
-.CO M
-command is an absolute movement.
-The
-.CO M
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-line oriented.
-.sp
-Historically, any
-.LI count
-specified to the
-.CO M
-command was ignored.
-.SS
-.SP Line:
-Set to the line in the middle of the screen.
-.SP Column:
-Set to the first nonblank character of the
-.i screen
-line.
-.SP Options:
-None.
-.SE
-.KY O
-.IP "[count] O"
-Enter input mode, appending text in a new line above the current line.
-If
-.LI count
-is specified, the text input is repeatedly input
-.LI "count - 1"
-more times.
-.sp
-Historically, any
-.LI count
-specified to the
-.CO O
-command was ignored.
-.SS
-.SP Line:
-Set to the last line upon which characters were entered.
-.SP Column:
-Set to the last character entered.
-.SP Options:
-Affected by the
-.OP altwerase ,
-.OP autoindent ,
-.OP beautify ,
-.OP showmatch ,
-.OP ttywerase
-and
-.OP wrapmargin
-options.
-.SE
-.KY P
-.IP "[buffer] P"
-Insert text from a buffer.
-Text from the buffer (the unnamed buffer by default) is inserted
-before the current column or, if the buffer is line oriented,
-before the current line.
-.SS
-.SP Line:
-Set to the lowest numbered line insert,
-if the buffer is line oriented, otherwise unchanged.
-.SP Column:
-Set to the first nonblank character of the appended text,
-if the buffer is line oriented, otherwise, the last character
-of the appended text.
-.SP Options:
-None.
-.SE
-.KY Q
-.IP "Q"
-Exit
-.CO vi
-(or visual) mode and switch to
-.CO ex
-mode.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-No longer relevant.
-.SP Options:
-None.
-.SE
-.KY R
-.IP "[count] R"
-Enter input mode, replacing the characters in the current line.
-If
-.LI count
-is specified, the text input is repeatedly input
-.LI "count - 1"
-more times.
-.sp
-If the end of the current line is reached, no more characters are
-replaced and any further characters input are appended to the line.
-.SS
-.SP Line:
-Set to the last line upon which characters were entered.
-.SP Column:
-Set to the last character entered.
-.SP Options:
-Affected by the
-.OP altwerase ,
-.OP autoindent ,
-.OP beautify ,
-.OP showmatch ,
-.OP ttywerase
-and
-.OP wrapmargin
-options.
-.SE
-.KY S
-.IP "[buffer] [count] S"
-Substitute
-.LI count
-lines.
-.SS
-.SP Line:
-Set to the last line upon which characters were entered.
-.SP Column:
-Set to the last character entered.
-.SP Options:
-Affected by the
-.OP altwerase ,
-.OP autoindent ,
-.OP beautify ,
-.OP showmatch ,
-.OP ttywerase
-and
-.OP wrapmargin
-options.
-.SE
-.KY T
-.IP "[count] T <character>"
-Search backward,
-.LI count
-times,
-through the current line for the character
-.i after
-the specified
-.LI <character> .
-.sp
-The
-.CO T
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-character oriented.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-Set to the character
-.i after
-the searched-for character.
-.SP Options:
-None.
-.SE
-.KY U
-.IP "U"
-Restore the current line to its state before the cursor last
-moved to it.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-The first character in the line.
-.SP Options:
-None.
-.SE
-.KY W
-.IP "[count] W"
-Move forward
-.LI count
-bigwords.
-Move the cursor forward to the beginning of a bigword by repeating the
-following algorithm: if the current position is within a bigword or the
-character at that position cannot be part of a bigword, move to the first
-character of the next bigword.
-If no subsequent bigword exists on the current line,
-move to the first character of the first bigword on the first following
-line that contains a bigword.
-.sp
-The
-.CO W
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-character oriented.
-.SS
-.SP Line:
-The line containing the word selected.
-.SP Column:
-The first character of the word selected.
-.SP Options:
-None.
-.SE
-.KY X
-.IP "[buffer] [count] X"
-Delete
-.LI count
-characters before the cursor.
-If the number of characters to be deleted is greater than or equal to
-the number of characters to the beginning of the line, all of the
-characters before the current cursor position, to the beginning of the
-line, are deleted.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-Set to the current character minus
-.LI count ,
-or the first character if count is greater than the number of
-characters in the line before the cursor.
-.SP Options:
-None.
-.SE
-.KY Y
-.IP "[buffer] [count] Y"
-Copy (or
-.QQ yank )
-.LI count
-lines into the specified buffer.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY ZZ
-.IP "ZZ"
-Write the file and exit
-.CO vi .
-The file is only written if it has been modified since the last
-complete write of the file to any file.
-.sp
-The
-.CO ZZ
-command will exit the editor after writing the file,
-if there are no further files to edit.
-Entering two
-.QQ quit
-commands (i.e.
-.CO wq ,
-.CO quit ,
-.CO xit
-or
-.CO ZZ )
-in a row will override this check and the editor will exit,
-ignoring any files that have not yet been edited.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY [[
-.IP "[count] [["
-Back up
-.LI count
-section boundaries.
-.sp
-The
-.CO [[
-command is an absolute movement.
-The
-.CO [[
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-character oriented, unless the starting position is column 0,
-in which case it is line oriented.
-.sp
-This is an error if the movement is past the beginning of the file.
-.SS
-.SP Line:
-Set to the previous line that is
-.LI count
-section boundaries back,
-or the first line of the file if no more section boundaries exist
-preceding the current line.
-.SP Column:
-Set to the first nonblank character in the line.
-.SP Options:
-Affected by the
-.OP sections
-option.
-.SE
-.KY ]]
-.IP "[count] ]]"
-Move forward
-.LI count
-section boundaries.
-.sp
-The
-.CO ]]
-command is an absolute movement.
-The
-.CO ]]
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-character oriented, unless the starting position is column 0,
-in which case it is line oriented.
-.sp
-This is an error if the movement is past the end of the file.
-.SS
-.SP Line:
-Set to the line that is
-.LI count
-section boundaries forward,
-or to the last line of the file if no more section
-boundaries exist following the current line.
-.SP Column:
-Set to the first nonblank character in the line.
-.SP Options:
-Affected by the
-.OP sections
-option.
-.SE
-.KY ^
-.IP "\&^"
-Move to first nonblank character on the current line.
-.sp
-The
-.CO ^
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-character oriented.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-Set to the first nonblank character of the current line.
-.SP Options:
-None.
-.SE
-.KY _
-.IP "[count] _"
-Move down
-.LI "count - 1"
-lines, to the first nonblank character.
-The
-.CO _
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-line oriented.
-.sp
-It is not an error to execute the
-.CO _
-command when the cursor is on the first character in the line.
-.SS
-.SP Line:
-The current line plus
-.LI "count - 1" .
-.SP Column:
-The first nonblank character in the line.
-.SP Options:
-None.
-.SE
-.KY a
-.IP "[count] a"
-Enter input mode, appending the text after the cursor.
-If
-.LI count
-is specified, the text input is repeatedly input
-.LI "count - 1"
-more times.
-.SS
-.SP Line:
-Set to the last line upon which characters were entered.
-.SP Column:
-Set to the last character entered.
-.SP Options:
-Affected by the
-.OP altwerase ,
-.OP autoindent ,
-.OP beautify ,
-.OP showmatch ,
-.OP ttywerase
-and
-.OP wrapmargin
-options.
-.SE
-.KY b
-.IP "[count] b"
-Move backward
-.LI count
-words.
-Move the cursor backward to the beginning of a word by repeating the
-following algorithm: if the current position is at the beginning of a word,
-move to the first character of the preceding word.
-Otherwise, the current position moves to the first character of the word
-at the current position.
-If no preceding word exists on the current line, move to the first
-character of the last word on the first preceding line that contains
-a word.
-.sp
-The
-.CO b
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-character oriented.
-.SS
-.SP Line:
-Set to the line containing the word selected.
-.SP Column:
-Set to the first character of the word selected.
-.SP Options:
-None.
-.SE
-.KY c
-.IP "[buffer] [count] c motion"
-Change a region of text.
-If only part of a single line is affected, then the last character
-being changed is marked with a
-.QT $ .
-Otherwise, the region of text is deleted, and input mode is entered.
-.sp
-If
-.LI count
-is specified, it is applied to the
-.LI motion .
-.SS
-.SP Line:
-Set to the last line upon which characters were entered.
-.SP Column:
-Set to the last character entered.
-.SP Options:
-Affected by the
-.OP altwerase ,
-.OP autoindent ,
-.OP beautify ,
-.OP showmatch ,
-.OP ttywerase
-and
-.OP wrapmargin
-options.
-.SE
-.KY d
-.IP "[buffer] [count] d motion"
-Delete a region of text.
-If
-.LI count
-is specified, it is applied to the
-.LI motion .
-.SS
-.SP Line:
-Set to the line where the region starts.
-.SP Column:
-Set to the first character in the line after the last character in the
-region.
-If no such character exists, set to the last character before the region.
-.SP Options:
-None.
-.SE
-.KY e
-.IP "[count] e"
-Move forward
-.LI count
-end-of-words.
-Move the cursor forward to the end of a word by repeating the following
-algorithm: if the current position is the end of a word,
-move to the last character of the following word.
-Otherwise, move to the last character of the word at the current position.
-If no succeeding word exists on the current line, move to the last character
-of the first word on the next following line that contains a word.
-.sp
-The
-.CO e
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-character oriented.
-.SS
-.SP Line:
-Set to the line containing the word selected.
-.SP Column:
-Set to the last character of the word selected.
-.SP Options:
-None.
-.SE
-.KY f
-.IP "[count] f <character>"
-Search forward,
-.LI count
-times, through the rest of the current line for
-.LI <character> .
-.sp
-The
-.CO f
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-character oriented.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-Set to the searched-for character.
-.SP Options:
-None.
-.SE
-.KY i
-.IP "[count] i"
-Enter input mode, inserting the text before the cursor.
-If
-.LI count
-is specified, the text input is repeatedly input
-.LI "count - 1"
-more times.
-.SS
-.SP Line:
-Set to the last line upon which characters were entered.
-.SP Column:
-Set to the last character entered.
-.SP Options:
-Affected by the
-.OP altwerase ,
-.OP autoindent ,
-.OP beautify ,
-.OP showmatch ,
-.OP ttywerase
-and
-.OP wrapmargin
-options.
-.SE
-.KY m
-.IP "m <character>"
-Save the current context (line and column) as
-.LI <character> .
-The exact position is referred to by
-.QT `<character> .
-The line is referred to by
-.QT '<character> .
-.sp
-Historically,
-.LI <character>
-was restricted to lower-case letters only,
-.CO nvi
-permits the use of any character.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-Unchanged.
-.SP Options:
-None.
-.SE
-.KY o
-.IP "[count] o"
-Enter input mode, appending text in a new line under the current line.
-If
-.LI count
-is specified, the text input is repeatedly input
-.LI "count - 1"
-more times.
-.sp
-Historically, any
-.LI count
-specified to the
-.CO o
-command was ignored.
-.SS
-.SP Line:
-Set to the last line upon which characters were entered.
-.SP Column:
-Set to the last character entered.
-.SP Options:
-Affected by the
-.OP altwerase ,
-.OP autoindent ,
-.OP beautify ,
-.OP showmatch ,
-.OP ttywerase
-and
-.OP wrapmargin
-options.
-.SE
-.KY p
-.IP "[buffer] p"
-Append text from a buffer.
-Text from the buffer (the unnamed buffer by default) is appended
-after the current column or, if the buffer is line oriented,
-after the current line.
-.SS
-.SP Line:
-Set to the first line appended, if the buffer is line oriented,
-otherwise unchanged.
-.SP Column:
-Set to the first nonblank character of the appended text if the buffer
-is line oriented, otherwise, the last character of the appended text.
-.SP Options:
-None.
-.SE
-.KY r
-.IP "[count] r <character>"
-Replace characters.
-The next
-.LI count
-characters in the line are replaced with
-.LI <character> .
-Replacing characters with
-.LI <newline>
-characters results in creating new, empty lines into the file.
-.sp
-If
-.LI <character>
-is
-.LI <escape> ,
-the command is cancelled.
-.SS
-.SP Line:
-Unchanged unless the replacement character is a
-.LI <newline> ,
-in which case it is set to the current line plus
-.LI "count - 1" .
-.SP Column:
-Set to the last character replaced,
-unless the replacement character is a
-.LI <newline> ,
-in which case the cursor is in column 1 of the last line inserted.
-.SP Options:
-None.
-.SE
-.KY s
-.IP "[buffer] [count] s"
-Substitute
-.LI count
-characters in the current line starting with the current character.
-.SS
-.SP Line:
-Set to the last line upon which characters were entered.
-.SP Column:
-Set to the last character entered.
-.SP Options:
-Affected by the
-.OP altwerase ,
-.OP autoindent ,
-.OP beautify ,
-.OP showmatch ,
-.OP ttywerase
-and
-.OP wrapmargin
-options.
-.SE
-.KY t
-.IP "[count] t <character>"
-Search forward,
-.LI count
-times, through the current line for the character immediately
-.i before
-.LI <character> .
-.sp
-The
-.CO t
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-character oriented.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-Set to the character
-.i before
-the searched-for character.
-.SP Options:
-None.
-.SE
-.KY u
-.IP "u"
-Undo the last change made to the file.
-If repeated, the
-.CO u
-command alternates between these two states, and is its own inverse.
-When used after an insert that inserted text on more than one line,
-the lines are saved in the numeric buffers.
-.sp
-The
-.CO \&.
-command, when used immediately after the
-.CO u
-command, causes the change log to be rolled forward or backward,
-depending on the action of the
-.CO u
-command.
-.SS
-.SP Line:
-Set to the position of the first line changed, if the reversal affects
-only one line or represents an addition or change; otherwise, the line
-preceding the deleted text.
-.SP Column:
-Set to the cursor position before the change was made.
-.SP Options:
-None.
-.SE
-.KY w
-.IP "[count] w"
-Move forward
-.LI count
-words.
-Move the cursor forward to the beginning of a word by repeating the
-following algorithm: if the current position is at the
-beginning of a word, move to the first character of the next word.
-If no subsequent word exists on the current line, move to the first
-character of the first word on the first following line that contains
-a word.
-.sp
-The
-.CO w
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-character oriented.
-.SS
-.SP Line:
-Set to the line containing the word selected.
-.SP Column:
-Set to the first character of the word selected.
-.SP Options:
-None.
-.SE
-.KY x
-.IP "[buffer] [count] x"
-Delete
-.LI count
-characters.
-The deletion is at the current character position.
-If the number of characters to be deleted is greater than or equal to
-the number of characters to the end of the line, all of the characters
-from the current cursor position to the end of the line are deleted.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-Unchanged unless the last character in the line is deleted and the cursor
-is not already on the first character in the line, in which case it is
-set to the previous character.
-.SP Options:
-None.
-.SE
-.KY y
-.IP "[buffer] [count] y motion"
-Copy (or
-.QQ yank )
-a text region specified by the
-.LI count
-and motion into a buffer.
-If
-.LI count
-is specified, it is applied to the
-.LI motion .
-.SS
-.SP Line:
-Unchanged, unless the region covers more than a single line,
-in which case it is set to the line where the region starts.
-.SP Column:
-Unchanged, unless the region covers more than a single line,
-in which case it is set to the character were the region starts.
-.SP Options:
-None.
-.SE
-.KY z
-.IP "[count1] z [count2] type"
-Redraw the screen with a window
-.LI count2
-lines long, with line
-.LI count1
-placed as specified by the
-.LI type
-character.
-If
-.LI count1
-is not specified, it defaults to the current line.
-If
-.LI count2
-is not specified, it defaults to the current window size.
-.sp
-The following
-.LI type
-characters may be used:
-.SS
-.SP +
-If
-.LI count1
-is specified, place the line
-.LI count1
-at the top of the screen.
-Otherwise, display the screen after the current screen, similarly to the
-.CO <control-F>
-command.
-.SP <carriage-return>
-Place the line
-.LI count1
-at the top of the screen.
-.SP \&.
-Place the line
-.LI count1
-in the center of the screen.
-.SP \-
-Place the line
-.LI count1
-at the bottom of the screen.
-.SP ^
-If
-.LI count1
-is specified, place the line that is at the top of the screen
-when
-.LI count1
-is at the bottom of the screen, at the bottom of the screen,
-i.e. display the screen before the screen before
-.LI count1 .
-Otherwise, display the screen before the current screen, similarly to the
-.CO <control-B>
-command.
-.SE
-.SS
-.SP Line:
-Set to
-.LI count1
-unless
-.LI count1
-is not specified and the
-.LI type
-character was either
-.QT ^
-or
-.QT + ,
-in which case it is set to the line before the first line on the
-previous screen or the line after the last line on the previous
-screen, respectively.
-.SP Column:
-Set to the first nonblank character in the line.
-.SP Options:
-None.
-.SE
-.KY {
-.IP "[count] {"
-Move backward
-.LI count
-paragraphs.
-.sp
-The
-.CO {
-command is an absolute movement.
-The
-.CO {
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-character oriented, unless the starting character is the first
-character on its line, in which case it is line oriented.
-.SS
-.SP Line:
-Set to the line containing the beginning of the previous paragraph.
-.SP Column:
-Set to the first nonblank character in the line.
-.SP Options:
-Affected by the
-.OP paragraph
-option.
-.SE
-.KY |
-.IP "[count] |"
-Move to a specific
-.i column
-position on the current line.
-.sp
-The
-.CO |
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-character oriented.
-It is an error to use the
-.CO |
-command as a motion component and for the cursor not to move.
-.SS
-.SP Line:
-Unchanged.
-.SP Column:
-Set to the character occupying the column position identified by
-.LI count ,
-if the position exists in the line.
-If the column length of the current line is less than
-.LI count ,
-the cursor is moved to the last character in the line.
-.SP Options:
-None.
-.SE
-.KY }
-.IP "[count] }"
-Move forward
-.LI count
-paragraphs.
-.sp
-The
-.CO }
-command is an absolute movement.
-The
-.CO }
-command may be used as the motion component of other
-.CO vi
-commands, in which case any text copied into a buffer is
-character oriented, unless the starting character is at or
-before any nonblank characters in its line,
-in which case it is line oriented.
-.SS
-.SP Line:
-Set to the line containing the beginning of the next paragraph.
-.SP Column:
-Set to the first nonblank character in the line.
-.SP Options:
-Affected by the
-.OP paragraph
-option.
-.SE
-.KY ~
-.IP "[count] ~"
-Reverse the case of the next
-.LI count
-character(s).
-This is the historic semantic for the
-.CO ~
-command and it is only in effect if the
-.OP tildeop
-option is not set.
-.sp
-Lowercase alphabetic characters are changed to uppercase,
-and uppercase characters are changed to lowercase.
-No other characters are affected.
-.sp
-Historically, the
-.CO ~
-command did not take an associated count, nor did it move past the
-end of the current line.
-As it had no associated motion it was difficult to change the case
-of large blocks of text.
-In
-.CO nvi ,
-if the cursor is on the last character of a line, and there are
-more lines in the file, the cursor moves to the next line.
-.sp
-It is not an error to specify a count larger than the number of
-characters between the cursor and the end of the file.
-.SS
-.SP Line:
-Set to the line of the character after
-.LI count
-characters, or, end of file.
-.SP Column:
-Set to the character after
-.LI count
-characters, or, end-of-file.
-.SP Options:
-Affected by the
-.OP tildeop
-option.
-.SE
-.KY ~
-.IP "[count] ~ motion"
-Reverse the case of the characters in a text region specified by the
-.LI count
-and
-.LI motion .
-Only in effect if the
-.OP tildeop
-option is set.
-.sp
-Lowercase characters are changed to uppercase,
-and uppercase characters are changed to lowercase.
-No other characters are affected.
-.SS
-.SP Line:
-Set to the line of the character after the last character in the region.
-.SP Column:
-Set to the character after the last character in the region.
-.SP Options:
-Affected by the
-.OP tildeop
-option.
-.SE
-.KY <interrupt>
-.IP "<interrupt>"
-Interrupt the current operation.
-Many of the potentially long-running
-.CO vi
-commands may be interrupted using the terminal interrupt character.
-These operations include searches, file reading and writing, filter
-operations and map character expansion.
-Interrupts are also enabled when running commands outside of
-.CO vi .
-.sp
-If the
-.LI <interrupt>
-character is used to interrupt while entering an
-.CO ex
-command, the command is aborted, the cursor returns to its previous
-position, and
-.CO vi
-remains in command mode.
-.sp
-Generally, if the
-.LI <interrupt>
-character is used to interrupt any
-operation, any changes made before the interrupt are left in place.
-.SS
-.SP Line:
-Dependent on the operation being interrupted.
-.SP Column:
-Dependent on the operation being interrupted.
-.SP Options:
-None.
-.SH 1 "Vi Text Input Commands"
-.pp
-The following section describes the commands available in the text
-input mode of the
-.CO vi
-editor.
-.pp
-Historically,
-.CO vi
-implementations only permitted the characters inserted on the current
-line to be erased.
-In addition, only the
-.LI <control-D>
-erase character and the
-.QT 0<control-D>
-and
-.QT ^<control-D>
-erase strings could erase autoindent characters.
-This implementation permits erasure to continue past the beginning
-of the current line, and back to where text input mode was entered.
-In addition, autoindent characters may be erased using the standard
-erase characters.
-For the line and word erase characters, reaching the autoindent
-characters forms a
-.QQ soft
-boundary, denoting the end of the current word or line erase.
-Repeating the word or line erase key will erase the autoindent characters.
-.pp
-Historically,
-.CO vi
-always used
-.LI <control-H>
-and
-.LI <control-W>
-as character and word erase characters, respectively, regardless of
-the current terminal settings.
-This implementation accepts, in addition to these two characters,
-the current terminal characters for those operations.
-.KY <nul>
-.IP "<nul>"
-If the first character of the input is a
-.LI <nul> ,
-the previous input is replayed, as if just entered.
-.KY <control-D>
-.IP "<control-D>"
-If the previous character on the line was an autoindent character,
-erase it.
-Otherwise, if the user is entering the first character in the line,
-.LI <control-D>
-is ignored.
-Otherwise, a literal
-.LI <control-D>
-character is entered.
-.KY ^<control-D>
-.IP "^<control-D>"
-If the previous character on the line was an autoindent character,
-erase all of the autoindent characters on the line.
-In addition, the autoindent level is reset to 0.
-.KY 0<control-D>
-.IP "0<control-D>"
-If the previous character on the line was an autoindent character,
-erase all of the autoindent characters on the line.
-.KY <control-T>
-.IP "<control-T>"
-Insert sufficient
-.LI <tab>
-and
-.LI <space>
-characters to move the cursor forward to a column immediately
-after the next column which is an even multiple of the
-.OP shiftwidth
-option.
-.sp
-Historically,
-.CO vi
-did not permit the
-.LI <control-T>
-command to be used unless the cursor was at the first column of a new
-line or it was preceded only by autoindent characters.
-.CO Nvi
-permits it to be used at any time during insert mode.
-.KY <erase>
-.IP <erase>
-.KY <control-H>
-.Ip <control-H>
-Erase the last character.
-.KY "<literal next>"
-.IP "<literal next>"
-Quote the next character.
-The next character will not be mapped (see the
-.CO map
-command for more information)
-or interpreted specially.
-A carat
-.PQ ^
-character will be displayed immediately as a placeholder,
-but will be replaced by the next character.
-.KY <escape>
-.IP <escape>
-Resolve all text input into the file, and return to command mode.
-.KY "<line erase>"
-.IP "<line erase>"
-Erase the current line.
-.KY "<control-W>"
-.IP "<control-W>"
-.KY "<word erase>"
-.Ip "<word erase>"
-Erase the last word.
-The definition of word is dependent on the
-.OP altwerase
-and
-.OP ttywerase
-options.
-.KY "<control-X>"
-.IP "<control-X>[0-9A-Fa-f]*"
-Insert a character with the specified hexadecimal value into the text.
-.KY <interrupt>
-.IP "<interrupt>"
-Interrupt text input mode, returning to command mode.
-If the
-.LI <interrupt>
-character is used to interrupt inserting text into the file,
-it is as if the
-.LI <escape>
-character was used; all text input up to the interruption is
-resolved into the file.
diff --git a/usr.bin/vi/USD.doc/vi.ref/vi.ref b/usr.bin/vi/USD.doc/vi.ref/vi.ref
deleted file mode 100644
index 5058cc780dd..00000000000
--- a/usr.bin/vi/USD.doc/vi.ref/vi.ref
+++ /dev/null
@@ -1,1270 +0,0 @@
-.\" Copyright (c) 1994
-.\" The Regents of the University of California. All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\" 3. All advertising materials mentioning features or use of this software
-.\" must display the following acknowledgement:
-.\" This product includes software developed by the University of
-.\" California, Berkeley and its contributors.
-.\" 4. Neither the name of the University nor the names of its contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" @(#)vi.ref 8.52 (Berkeley) 8/13/94
-.\"
-.\"
-.so ref.so
-.tp
-.(l C
-.ps 12
-.ft B
-Ex/Vi Reference Manual
-.ft
-.ps
-.sp
-.i "Keith Bostic"
-.sp
-Computer Science Division
-Department of Electrical Engineering and Computer Science
-University of California, Berkeley
-Berkeley, California 94720
-.sp 1
-\*(td
-.sp 3
-.i Abstract
-.sp
-.)l
-.(q
-.pp
-This document is the reference guide for the 4.4BSD
-implementations of
-.EV nex nvi ,
-which are reimplementations of the historic Berkeley
-.EV ex vi
-editors.
-.)q
-.sp 3
-.(l C
-.i Acknowledgements
-.)l
-.sp
-.(q
-.pp
-Bruce Englar encouraged the early development of the historic
-.EV ex vi
-editor.
-Peter Kessler helped bring sanity to version 2's command layout.
-Bill Joy wrote versions 1 and 2.0 through 2.7,
-and created the framework that users see in the present editor.
-Mark Horton added macros and other features and made
-.EV ex vi
-work on a large number of terminals and Unix systems.
-.pp
-.CO Nvi
-is originally derived from software contributed to the University of
-California, Berkeley by Steve Kirkendall, the author of the
-.CO vi
-clone
-.CO elvis .
-.pp
-IEEE Standard Portable Operating System Interface for Computer
-Environments (POSIX) 1003.2 style Regular Expression support was
-done by Henry Spencer.
-.pp
-The curses library was originally done by Ken Arnold.
-Scrolling and reworking for
-.CO nvi
-was done by Elan Amir.
-.pp
-The Institute of Electrical and Electronics Engineers has
-given us permission to reprint portions of their documentation.
-Portions of this document are reprinted and reproduced from
-IEEE Std 1003.2-1992, IEEE Standard Portable Operating
-System Interface for Computer Environments (POSIX),
-copyright 1992 by the Institute of Electrical and Electronics
-Engineers, Inc.
-.pp
-The financial support of UUNET Communications Services is gratefully
-acknowledged.
-.)q
-.sy echo -n >index
-.oh 'Nvi/Nex Reference''USD:13-%'
-.eh 'USD:13-%''Nvi/Nex Reference'
-.bp 3
-.SH 1 Description
-.pp
-.CO Vi
-is a screen oriented text editor.
-.CO Ex
-is a line-oriented text editor.
-.CO Ex
-and
-.CO vi
-are different interfaces to the same program,
-and it is possible to switch back and forth during an edit session.
-.CO View
-is the equivalent of using the
-.b \-R
-(read-only) option of
-.CO vi .
-.pp
-This reference manual is the one provided with the
-.EV nex nvi
-versions of the
-.EV ex vi
-text editors.
-.EV Nex nvi
-are intended as bug-for-bug compatible replacements for the original
-Fourth Berkeley Software Distribution (4BSD)
-.EV ex vi
-programs.
-This reference manual is accompanied by a traditional-style manual page.
-That manual page describes the functionality found in
-.EV ex vi
-in far less detail than the description here.
-In addition, it describes the system interface to
-.EV ex vi ,
-e.g. command line options, session recovery, signals,
-environmental variables, and similar things.
-.pp
-This reference is intended for users already familiar with
-.EV ex vi .
-Anyone else should almost certainly read a good tutorial on the
-editor first.
-If you are in an unfamiliar environment,
-and you absolutely have to get work done immediately,
-see the section entitled
-.QB "Fast Startup"
-in the manual page.
-It is probably enough to get you started.
-.pp
-There are a few features in
-.EV nex nvi
-that are not found in historic versions of
-.EV ex vi .
-Some of the more interesting of those features are briefly described
-in the section entitled
-.QB "Additional Features"
-near the end of this document.
-For the rest of this document,
-.EV nex nvi
-is used only when it is necessary to distinguish it from the historic
-implementations of
-.EV ex vi .
-.pp
-Future versions of this software will be periodically made available
-by anonymous ftp, and can be retrieved from
-.LI ftp.cs.berkeley.edu ,
-in the directory
-.LI ucb/4bsd .
-.SH 1 "Startup Information"
-.pp
-.EV Ex vi
-interprets one of two possible environmental variables and reads up to
-three of five possible files during startup.
-The variables and files are expected to contain
-.CO ex
-commands, not
-.CO vi
-commands.
-In addition, they are interpreted
-.i before
-the file to be edited is read, and therefore many
-.CO ex
-commands may not be used.
-Generally, any command that requires output to the screen or that
-needs a file upon which to operate, will cause an error if included
-in a startup file or environmental variable.
-.pp
-Because the
-.CO ex
-command set supported by
-.EV nex nvi
-is a superset of the command set supported by most historical
-implementations of
-.CO ex ,
-.EV nex nvi
-can use the startup files created for the historical implementations,
-but the converse may not be true.
-.pp
-If the
-.b \-s
-(the historic \- option)
-is specified, or if standard input is redirected from a file,
-all environmental variables and startup files are ignored.
-.pp
-Otherwise, startup files and environmental variables are handled
-in the following order:
-.np
-The file
-.LI /etc/vi.exrc
-is read,
-as long as it is owned by root or the effective user ID of the user.
-.np
-The environmental variable
-.LI NEXINIT
-(or the variable
-.LI EXINIT ,
-if
-.LI NEXINIT
-is not set) is interpreted.
-.np
-If neither
-.LI NEXINIT
-or
-.LI EXINIT
-was set, and the
-.LI HOME
-environmental variable is set, the file
-.LI $HOME/.nexrc
-(or the file
-.LI $HOME/.exrc ,
-if
-.LI $HOME/.nexrc
-does not exist) is read,
-as long as the effective user ID of the user is root or is the same as
-the owner of the file.
-.np
-If the
-.OP exrc
-option was turned on by one of the previous startup information
-sources, the file
-.LI \&.nexrc
-(or the file
-.LI \&.exrc ,
-if
-.LI \&.nexrc
-does not exist) is read, as long as the effective user ID of the user
-is the same as the owner of the file.
-.pp
-No startup file is read if it is writable by anyone other than its owner.
-.pp
-It is not an error for any of the startup environmental variables or files
-not to exist.
-.pp
-Once all environmental variables are interpreted,
-and all startup files are read,
-the first file to be edited is read in (or a temporary file is created).
-Then, any commands specified using the
-.b \-c
-option are executed, in the context of that file.
-.SH 1 Recovery
-.pp
-There is no recovery program for
-.EV nex nvi ,
-nor does
-.EV nex nvi
-run setuid.
-Recovery files are created readable and writable by the owner only.
-Users may recover any file which they can read,
-and the superuser may recover any edit session.
-.pp
-Edit sessions are backed by files in the directory named by the
-.OP recdir
-option (the directory
-.LI /var/tmp/vi.recover
-by default), and are named
-.QC vi.XXXXXX ,
-where
-.QC XXXXXX
-is a number related to the process ID.
-When a file is first modified,
-a second recovery file containing an email message for the user is created,
-and is named
-.QC recover.XXXXXX ,
-where, again,
-.QC XXXXXX
-is associated with the process ID.
-Both files are removed at the end of a normal edit session,
-but will remain if the edit session is abnormally terminated
-or the user runs the
-.CO ex
-.CO preserve
-command.
-.pp
-The
-.OP recdir
-option may be set in either the user's or system's startup information,
-changing the recovery directory.
-(Note, however, that if a memory based file system is used as the backup
-directory, each system reboot will delete all of the recovery files!
-The same caution applies to directories such as
-.LI /tmp
-which are cleared of their contents by a system reboot, or
-.LI /usr/tmp
-which is periodically cleared of old files on many systems.)
-.pp
-The recovery directory should be owned by root, or at least by a pseudo-user.
-In addition, if directory
-.QQ sticky-bit
-semantics are available, the directory should have the sticky-bit
-set so that files may only be removed by their owners.
-The recovery directory must be read, write, and executable by any user,
-i.e. mode 1777.
-.pp
-If the recovery directory does not exist,
-.EV ex vi
-will attempt to create it.
-This can result in the recovery directory being owned by a normal user,
-which means that that user will be able to remove other user's recovery
-and backup files.
-This is annoying, but is not a security issue as the user cannot
-otherwise access or modify the files.
-.pp
-The recovery file has all of the necessary information in it to enable the
-user to recover the edit session.
-In addition, it has all of the necessary email headers for
-.XR sendmail 8 .
-When the system is rebooted, all of the files in
-.LI /var/tmp/vi.recover
-named
-.QC recover.XXXXXX
-should be sent to their owners, by email, using the
-.b \-t
-option of
-.CO sendmail
-(or a similar mechanism in other mailers).
-If
-.EV ex vi
-receives a hangup (SIGHUP) signal, or the user executes the
-.CO ex
-.CO preserve
-command,
-.EV ex vi
-will automatically email the recovery information to the user.
-.pp
-If your system does not have the
-.CO sendmail
-utility (or a mailer program which supports its interface)
-the source file
-.LI nvi/common/recover.c
-will have to be modified to use your local mail delivery programs.
-Note, if
-.EV nex nvi
-is changed to use another mailer,
-it is important to remember that the owner of the file given to
-the mailer is the
-.EV nex nvi
-user, so nothing in the file should be trusted as it may have been
-modified in an effort to compromise the system.
-.pp
-Finally, the owner execute bit is set on backup files when they are
-created, and unset when they are first modified, e.g. backup files
-that have no associated email recovery file will have this bit set.
-(There is also a small window where empty files can be created and
-not yet have this bit set.
-This is due to the method in which the files are created.)
-Such files should be deleted when the system reboots.
-.pp
-A simple way to do this cleanup is to insert the following Bourne
-shell script into your
-.LI /etc/rc.local
-(or other startup) file.
-The script should work with the historic Bourne shell,
-a POSIX 1003.2 shell or the Korn shell.
-(A copy of this script is included as
-.LI nvi/install/recover.script
-in the
-.EV nex nvi
-distribution.)
-.sp
-.(b
-.ft C
-.so ../../install/recover.script
-.ft R
-.)b
-.sp
-.pp
-If you are not using the default value for the
-.OP recdir
-option, be sure to substitute the value you're using for the
-.LI RECDIR
-value in the recovery script.
-.pp
-If the path of your system's
-.CO sendmail
-program (or whatever mailer you're using) is not
-.LI /usr/lib/sendmail ,
-be sure to substitute the correct pathname for the
-.LI SENDMAIL
-value in the recovery script.
-Consult the manual page for details on recovering preserved or
-aborted editing sessions.
-.SH 1 "Sizing the Screen"
-.pp
-The size of the screen can be set in a number of ways.
-.EV Ex vi
-takes the following steps until values are obtained for both the
-number of rows and number of columns in the screen.
-.np
-If the environmental variable
-.LI LINES
-exists,
-it is used to specify the number of rows in the screen.
-.np
-If the environmental variable
-.LI COLUMNS
-exists,
-it is used to specify the number of columns in the screen.
-.np
-The TIOCGWINSZ
-.XR ioctl 2
-is attempted on the standard error file descriptor.
-.np
-The termcap entry (or terminfo entry on System V machines)
-is checked for the
-.QQ li
-entry (rows) and the
-.QQ co
-entry (columns).
-.np
-The number of rows is set to 24, and the number of columns is set to 80.
-.pp
-If a window change size signal (SIGWINCH) is received,
-the new window size is retrieved using the TIOCGWINSZ
-.XR ioctl 2
-call, and all other information is ignored.
-.SH 1 "Character Display"
-.pp
-In both
-.CO ex
-and
-.CO vi
-printable characters as defined by
-.XR isprint 3
-are displayed using the local character set.
-.pp
-Non-printable characters, for which
-.XR iscntrl 3
-returns true, and which are less than octal \e076,
-are displayed as the string
-.QT ^<character> ,
-where
-.LI <character>
-is the character that is the original character's value offset from the
-.QT @
-character.
-For example, the octal character \e001 is displayed as
-.QT ^A .
-If
-.XR iscntrl 3
-returns true for the octal character \e177,
-it is displayed as the string
-.QT ^? .
-All other characters are displayed as either hexadecimal values,
-in the form
-.QT "0x<high-halfbyte> ... 0x<low-halfbyte>" ,
-or as octal values, in the form
-.QT "\e<high-one-or-two-bits> ... \e<low-three-bits>" .
-The display of unknown characters is based on the value of the
-.OP octal
-option.
-.pp
-In
-.CO vi
-command mode, the cursor is always positioned on the last column of
-characters which take up more than one column on the screen.
-In
-.CO vi
-text input mode, the cursor is positioned on the first column of
-characters which take up more than one column on the screen.
-.SH 1 "Multiple Screens"
-.pp
-.CO Nvi
-supports multiple screens by dividing the window into regions.
-It also supports stacks of screens by permitting the user to change
-the set of screens that are currently displayed.
-.pp
-The command
-.CO split
-divides the current screen into two regions of approximately equal
-size.
-If a list of files are specified as arguments to the
-.CO split
-command, the list of files to be edited is initialized as if the
-.CO next
-command had been used.
-If no files are specified, the new screen will begin by editing the same
-file as the previous screen.
-.pp
-When more than one screen is editing a file, changes in any screen are
-reflected in all other screens editing the same file.
-Exiting any screen without saving any changes (or explicitly discarding
-them) is permitted until the last screen editing the file is exited.
-.pp
-The
-.CO resize
-command permits resizing of individual screens.
-Screens may be grown, shrunk or set to an absolute number of rows.
-.pp
-The
-.CO ^W
-command is used to switch between screens.
-Each
-.CO ^W
-moves to the next lower screen in the window, or to the first screen
-in the window if there are no lower screens.
-.pp
-The
-.CO bg
-command
-.QQ backgrounds
-the current screen.
-The screen disappears from the window,
-and the rows it occupied are taken over by a neighboring screen.
-It is an error to attempt to background the only screen in the window.
-.pp
-The
-.CO "display screens"
-command displays the names of the files associated with the current
-backgrounded screens in the window.
-.pp
-The
-.CO "fg [file]"
-command
-.QQ foregrounds
-the first screen in the list of backgrounded screens that is
-associated with its argument.
-If no file argument is specified, the first screen on the list is
-foregrounded.
-Foregrounding consists of backgrounding the current screen,
-and replacing its space in the window with the foregrounded screen.
-.pp
-If the last screen in the window is exited, and there are backgrounded
-screens, the first screen on the list of backgrounded screens takes over
-the window.
-.SH 1 "Regular Expressions and Replacement Strings"
-.pp
-Regular expressions are used in line addresses,
-as the first part of the
-.CO ex
-.CO substitute ,
-.CO global ,
-and
-.CO vglobal
-commands, and in search patterns.
-.pp
-The regular expressions supported by
-.EV ex vi
-are, by default, the Basic Regular Expressions (BRE's) described in the
-IEEE POSIX Standard 1003.2.
-The
-.OP extended
-option causes all regular expressions to be interpreted as the Extended
-Regular Expressions (ERE's) described by the same standard.
-(See
-.XR re_format 7
-for more information.)
-Generally speaking, BRE's are the Regular Expressions found in
-.XR ed 1
-and
-.XR grep 1 ,
-and ERE's are the Regular Expressions found in
-.XR egrep 1 .
-.pp
-The following is not intended to provide a description of Regular
-Expressions.
-The information here only describes strings and characters which
-have special meanings in the
-.EV ex vi
-version of RE's,
-or options which change the meanings of characters that normally
-have special meanings in RE's.
-.np
-An empty RE (e.g.
-.QT //
-or
-.QT ??
-is equivalent to the last RE used.
-.np
-The construct
-.QT \e<
-matches the beginning of a word.
-.np
-The construct
-.QT \e>
-matches the end of a word.
-.np
-The character
-.QT ~
-matches the replacement part of the last
-.CO substitute
-command.
-.pp
-When the
-.OP magic
-option is
-.i not
-set, the only characters with special meanings are a
-.QT ^
-character at the beginning of an RE, a
-.QT $
-character at the end of an RE, and the escaping character
-.QT \e .
-The characters
-.QT \&. ,
-.QT * ,
-.QT [
-and
-.QT ~
-are treated as ordinary characters unless preceded by a
-.QT \e ;
-when preceded by a
-.QT \e
-they regain their special meaning.
-.pp
-Replacement strings are the second part of a
-.CO substitute
-command.
-.pp
-The character
-.QT &
-(or
-.QT \e&
-if the
-.OP magic
-option is
-.i not
-set) in the replacement string stands for the text matched by the RE
-that is being replaced.
-The character
-.QT ~
-(or
-.QT \e~
-if the
-.OP magic
-option is
-.i not
-set) stands for the replacement part of the previous
-.CO substitute
-command.
-It is only valid after a
-.CO substitute
-command has been performed.
-.pp
-The string
-.QT \e# ,
-where
-.QT #
-is an integer value from 1 to 9, stands for the text matched by
-the portion of the RE enclosed in the
-.QT # 'th
-set of escaped parentheses, e.g.
-.QT \e(
-and
-.QT \e) .
-For example,
-.QT "s/abc\e(.*\e)def/\e1/"
-deletes the strings
-.QT abc
-and
-.QT def
-from the matched pattern.
-.pp
-The strings
-.QT \el ,
-.QT \eu ,
-.QT \eL
-and
-.QT \eU
-can be used to modify the case of elements in the replacement string.
-The string
-.QT \el
-causes the next character to be converted to lowercase;
-the string
-.QT \eu
-behaves similarly, but converts to uppercase
-(e.g.
-.LI s/abc/\eU&/
-replaces the string
-.LI abc
-with
-.LI ABC ).
-The strings
-.QT \eL
-causes characters up to the end of the string or the next occurrence
-of the strings
-.QT \ee
-or
-.QT \eE
-to be converted to lowercase;
-the string
-.QT \eU
-behaves similarly, but converts to uppercase.
-.pp
-If the entire replacement pattern is
-.QT % ,
-then the last replacement pattern is used again.
-.pp
-In
-.CO vi ,
-inserting a
-.LI <control-M>
-into the replacement string will cause
-the matched line to be split into two lines at that point.
-(The
-.LI <control-M>
-will be discarded.)
-.SH 1 "General Editor Description"
-.pp
-When
-.CO ex
-or
-.CO vi
-are executed,
-the text of a file is read (or a temporary file is created),
-and then all editing changes happen within the context of the
-copy of the file.
-.i "No changes affect the actual file until the file is written out" ,
-either using a write command or another command which is affected by the
-.OP autowrite
-option.
-.pp
-All files are locked (using the
-.XR flock 2
-or
-.XR fcntl 2
-interfaces) during the edit session,
-to avoid inadvertently making modifications to multiple copies of the file.
-If a lock cannot be obtained for a file because it is locked by another
-process, the edit session is read-only (as if the
-.OP readonly
-option or the
-.b \-R
-flag had been specified).
-If a lock cannot be obtained for other reasons, the edit session will
-continue, but the file status information
-(see the
-.CO <control-G>
-command) will reflect this fact.
-.pp
-Both
-.CO ex
-and
-.CO vi
-are modeful editors, i.e. they have two modes,
-.QQ command
-mode and
-.QQ "text input"
-mode.
-The former is intended to permit you to enter commands which modifies
-already existing text.
-The latter is intended to permit you to enter new text.
-When
-.CO ex
-first starts running, it is in command mode, and usually displays a prompt
-(see the
-.OP prompt
-option for more information).
-The prompt is a single colon
-.PQ :
-character.
-There are three commands that switch
-.CO ex
-into text input mode:
-.CO append ,
-.CO change
-and
-.CO insert .
-Once in input mode, entering a line containing only a single period
-.PQ \&.
-terminates text input mode and returns to command mode,
-where the prompt is redisplayed.
-.pp
-When
-.CO vi
-first starts running, it is in command mode as well.
-There are eleven commands that switch
-.CO vi
-into text input mode:
-.CO A ,
-.CO a ,
-.CO C ,
-.CO c ,
-.CO I ,
-.CO i ,
-.CO O ,
-.CO o ,
-.CO R ,
-.CO S
-and
-.CO s .
-Once in input mode, entering an
-.LI <escape>
-character terminates text input mode and returns to command mode.
-.pp
-The following words have special meanings in both the
-.CO ex
-and
-.CO vi
-command descriptions:
-.KY <interrupt>
-.IP <interrupt>
-The interrupt character is used to interrupt the current operation.
-Normally
-.LI <control-C> ,
-whatever character is set for the current terminal is used.
-.KY "<literal next>"
-.IP "<literal next>"
-The literal next character is used to escape the subsequent character
-from any special meaning.
-This character is always
-.LI <control-V> .
-If the terminal is not set up to do XON/XOFF flow control,
-then
-.LI <control-Q>
-is used to mean literal next as well.
-.KY "current pathname"
-.IP "current pathname"
-The pathname of the file currently being edited by vi.
-When the percent character
-.PQ %
-appears in a file name entered as part of an
-.CO ex
-command argument, it is replaced by the current pathname.
-(The
-.QT %
-character can be escaped by preceding it with a backslash.)
-.KY "alternate pathname"
-.IP "alternate pathname"
-The name of the last file name mentioned in an
-.CO ex
-command, or,
-the previous current pathname if the last file mentioned
-becomes the current file.
-When the hash mark character
-.PQ #
-appears in a file name entered as part of an
-.CO ex
-command argument, it is replaced by the alternate pathname.
-(The
-.QT #
-character can be escaped by preceding it with a backslash.)
-.KY buffer
-.IP buffer
-One of a number of named areas for saving copies of text.
-Commands that change or delete text can save the changed or deleted
-text into a specific buffer, for later use, if the command allows
-it (i.e. the
-.CO ex
-.CO change
-command cannot save the changed text in a named buffer).
-Buffers are named with a single character, preceded by a double quote,
-e.g.
-.LI """<character>" .
-Historic implementations of
-.EV ex vi
-limited
-.LI <character>
-to the alphanumeric characters;
-.EV nex nvi
-permits the use of any character.
-.sp
-Buffers named by uppercase characters are the same as buffers
-named by lowercase characters, e.g. the buffer named by the
-English character
-.QT A
-is the same as the buffer named by the character
-.QT a ,
-with the exception that, if the buffer contents are being changed (as
-with a text deletion or
-.CO vi
-.CO change
-command), the text is
-.i appended
-to the buffer, instead of replacing the current contents.
-.sp
-The buffers named by the numeric characters (in English,
-.QT 1
-through
-.QT 9 ),
-are special, in that if at least one line is changed or deleted in
-the file,
-(or a command changes or deletes a region that crosses a line boundary)
-a copy of the text is placed into the numeric buffer
-.QT 1 ,
-regardless of the user specifying another buffer in which to save it.
-Before this copy is done, the previous contents of buffer
-.QT 1
-are moved into buffer
-.QT 2 ,
-.QT 2
-into buffer
-.QT 3 ,
-and so on.
-The contents of buffer
-.QT 9
-are discarded.
-In
-.CO vi ,
-text may be explicitly stored into the numeric buffers.
-In this case, the buffer rotation described above occurs before the
-replacement of the buffer's contents.
-(Text cannot be explicitly stored into the numeric buffers in
-.CO ex
-because of ambiguities that this would cause in the
-.CO ex
-command syntax.)
-.sp
-When a
-.CO vi
-command synopsis shows both a
-.LI [buffer]
-and a
-.LI [count] ,
-they may be presented in any order.
-.sp
-Finally, all buffers are either
-.QQ line
-or
-.QQ character
-oriented.
-All
-.CO ex
-commands which store text into buffers are line oriented.
-Some
-.CO vi
-commands which store text into buffers are line oriented,
-and some are character oriented; the description for each applicable
-.CO vi
-command notes whether text copied into buffers using the command
-is line or character oriented.
-In addition, the
-.CO vi
-command
-.CO "display buffers"
-displays the current orientation for each buffer.
-Generally, the only importance attached to this orientation is that
-if the buffer is subsequently inserted into the text, line oriented
-buffers create new lines for each of the lines they contain, and
-character oriented buffers create new lines for any lines
-.i other
-than the first and last lines they contain.
-The first and last lines are inserted into the text at the current
-cursor position, becoming part of the current line.
-If there is more than one line in the buffer, however, the current
-line itself will be split.
-.KY "unnamed buffer"
-.IP "unnamed buffer"
-The unnamed buffer is a text storage area which is used by commands
-that take a buffer as an argument, when no buffer is specified by
-the user.
-There is no way to explicitly reference this buffer.
-.oh 'Nvi/Nex Reference (Vi Commands)''USD:13-%'
-.eh 'USD:13-%''Nvi/Nex Reference (Vi Commands)'
-.so vi.cmd.roff
-.oh 'Nvi/Nex Reference''USD:13-%'
-.eh 'USD:13-%''Nvi/Nex Reference'
-.SH 1 "Ex Addressing"
-.pp
-Addressing in
-.CO ex
-(and when
-.CO ex
-commands are executed from
-.CO vi )
-relates to the current line.
-In general, the current line is the last line affected by a command.
-The exact effect on the current line is discussed under the description
-of each command.
-When the file contains no lines, the current line is zero.
-.pp
-Addresses are constructed by one or more of the following methods:
-.np
-The address
-.QT \&.
-refers to the current line.
-.np
-The address
-.QT $
-refers to the last line of the file.
-.np
-The address
-.QT N ,
-where
-.LI N
-is a positive number, refers to the N-th line of the file.
-.np
-The address
-.QT '<character>
-or
-.QT `<character>
-refers to the line marked with the name
-.LI <character> .
-(See the
-.CO k
-or
-.CO m
-commands for more information on how to mark lines.)
-.np
-A regular expression (RE) enclosed by slashes
-.PQ /
-is an address,
-and it refers to the first line found by searching forward from the line
-.i after
-the current line toward the end of the file, and stopping at the
-first line containing a string matching the RE.
-(The trailing slash can be omitted at the end of the command line.)
-.sp
-If no RE is specified, i.e. the pattern is
-.QT // ,
-the last RE used in any command is used in the search.
-.sp
-If the
-.OP extended
-option is set, the RE is handled as an extended RE, not a basic RE.
-If the
-.OP wrapscan
-option is set, the search wraps around to the beginning of the file
-and continues up to and including the current line, so that the entire
-file is searched.
-.sp
-The form
-.QT \e/
-is accepted for historic reasons,
-and is identical to
-.QT // .
-.np
-An RE enclosed in question marks
-.PQ ?
-addresses the first line found by searching backward from the line
-.i preceding
-the current line, toward the beginning of the file and stopping at the
-first line containing a string matching the RE.
-(The trailing question mark can be omitted at the end of a command line.)
-.sp
-If no RE is specified, i.e. the pattern is
-.QT ?? ,
-the last RE used in any command is used in the search.
-.sp
-If the
-.OP extended
-option is set, the RE is handled as an extended RE, not a basic RE.
-If the
-.OP wrapscan
-option is set, the search wraps around from the beginning of the file to
-the end of the file and continues up to and including the current line,
-so that the entire file is searched.
-.sp
-The form
-.QT \e?
-is accepted for historic reasons, and is identical to
-.QT ?? .
-.np
-An address followed by a plus sign
-.PQ +
-or a minus sign
-.PQ -
-followed by a number is an offset address and refers to the address
-plus (or minus) the indicated number of lines.
-If the address is omitted, the addition or subtraction is done with
-respect to the current line.
-.np
-An address of
-.QT +
-or
-.QT \-
-followed by a number is an offset from the current line.
-For example,
-.QT \-5
-is the same as
-.QT \&.\-5 .
-.np
-An address ending with
-.QT +
-or
-.QT -
-has 1 added to or subtracted from the address, respectively.
-As a consequence of this rule and of the previous rule, the address
-.QT \-
-refers to the line preceding the current line.
-Moreover, trailing
-.QT +
-and
-.QT \-
-characters have a cumulative effect.
-For example,
-.QT ++\-++
-refers to the current line plus 3.
-.np
-A percent sign
-.PQ %
-is equivalent to the address range
-.QT 1,$ .
-.pp
-.CO Ex
-commands require zero, one, or two addresses.
-It is an error to specify an address to a command which requires zero
-addresses.
-.pp
-If the user provides more than the expected number of addresses to any
-.CO ex
-command, the first addresses specified are discarded.
-For example,
-.QT 1,2,3,5 print
-prints lines 3 through 5, because the
-.CO print
-command only takes two addresses.
-.pp
-The addresses in a range are separated from each other by a comma
-.PQ ,
-or a semicolon
-.PQ ; .
-In the latter case, the current line
-.PQ \&.
-is set to the first address, and only then is the second address calculated.
-This feature can be used to determine the starting line for forward and
-backward searches (see rules (5) and (6) above).
-The second address of any two-address sequence corresponds to a line that
-follows, in the file, the line corresponding to the first address.
-The first address must be less than or equal to the second address.
-The first address must be greater than or equal to the first line of the
-file, and the last address must be less than or equal to the last line
-of the file.
-.oh 'Nvi/Nex Reference (Ex Commands)''USD:13-%'
-.eh 'USD:13-%''Nvi/Nex Reference (Ex Commands)'
-.so ex.cmd.roff
-.oh 'Nvi/Nex Reference''USD:13-%'
-.eh 'USD:13-%''Nvi/Nex Reference'
-.so set.opt.roff
-.SH 1 "Additional Features in Nex/Nvi"
-.pp
-There are a few features in
-.EV nex nvi
-that are not found in historic versions of
-.EV ex vi .
-Some of the more interesting of those features are as follows:
-.IP "8-bit clean data, large lines, files"
-.EV Nex nvi
-will edit any format file.
-Line lengths are limited by available memory,
-and file sizes are limited by available disk space.
-The
-.CO vi
-text input mode command
-.CO <control-X>
-can insert any possible character value into the text.
-.IP "Split screens"
-The
-.CO split
-command divides the screen into multiple editing regions.
-The
-.CO <control-W>
-command rotates between the foreground screens.
-The
-.CO resize
-command can be used to grow or shrink a particular screen.
-.IP "Background and foreground screens"
-The
-.CO bg
-command backgrounds the current screen, and the
-.CO fg
-command foregrounds backgrounded screens.
-The
-.CO display
-command can be used to list the background screens.
-.\".IP "Shell screens"
-.\"The
-.\".CO ":sc[ript] [file ...]"
-.\"command runs a shell in the screen.
-.\"Editing is unchanged, with the exception that a \fC<carriage-return>\fP
-.\"enters the current line (stripped of any prompt) as input to the
-.\"shell.
-.IP "Tag stacks"
-Tags are now maintained in a stack.
-The
-.CO <control-T>
-command returns to the previous tag location.
-The
-.CO tagpop
-command returns to the most recent tag location by default, or,
-optionally to a specific tag number in the tag stack,
-or the most recent tag from a specified file.
-The
-.CO display
-command can be used to list the tags stack.
-The
-.CO tagtop
-command returns to the top of the tag stack.
-.IP "New displays"
-The
-.CO display
-command can be used to display the current buffers, the backgrounded
-screens, and the tags stack.
-.IP "Infinite undo"
-Changes made during an edit session may be rolled backward and forward.
-A
-.CO \&.
-command immediately after a
-.CO u
-command continues either forward or backward depending on whether the
-.CO u
-command was an undo or a redo.
-.IP "Usage information"
-The
-.CO exusage
-and
-.CO viusage
-commands provide usage information for all of the
-.CO ex
-and
-.CO vi
-commands by default, or, optionally, for a specific command or key.
-.IP "Extended Regular Expressions"
-The
-.CO extended
-option causes Regular Expressions to be interpreted as as Extended
-Regular Expressions, (i.e. \fIegrep\fP(1) style Regular Expressions).
-.IP "Word search"
-The
-.CO <control-A>
-command searches for the word referenced by the cursor.
-.IP "Number increment"
-The
-.CO \&#
-command increments or decrements the number referenced by the cursor.
-.IP "Previous file"
-The
-.CO previous
-command edits the previous file from the argument list.
-.IP "Left-right scrolling"
-The
-.CO leftright
-option causes
-.CO nvi
-to do left-right screen scrolling, instead of the traditional
-.CO vi
-line wrapping.
-.bp
-.SH 1 Index
-.lp
-.2c +0.5i 3
-.ta \n($luR
-.nf
-.so index.so
-.fi
-.bp 2
-.1c
-.ce 1
-\fB\s+2Table of Contents\s0\fP
-.sp
-.xp
diff --git a/usr.bin/vi/common/exf.c b/usr.bin/vi/common/exf.c
index c0b181bfe41..4a17ae69bc6 100644
--- a/usr.bin/vi/common/exf.c
+++ b/usr.bin/vi/common/exf.c
@@ -10,7 +10,7 @@
#include "config.h"
#ifndef lint
-static const char sccsid[] = "@(#)exf.c 10.46 (Berkeley) 8/11/96";
+static const char sccsid[] = "@(#)exf.c 10.47 (Berkeley) 8/12/96";
#endif /* not lint */
#include <sys/param.h>
@@ -475,22 +475,23 @@ file_spath(sp, frp, sbp, existsp)
}
/* Try the O_PATH option values. */
- for (found = 0, p = t = O_STR(sp, O_PATH);; ++p) {
+ for (found = 0, p = t = O_STR(sp, O_PATH);; ++p)
if (*p == ':' || *p == '\0') {
if (t < p - 1) {
savech = *p;
*p = '\0';
len = snprintf(path,
sizeof(path), "%s/%s", t, name);
- if (!stat(path, sbp))
- found = 1;
*p = savech;
+ if (!stat(path, sbp)) {
+ found = 1;
+ break;
+ }
}
t = p + 1;
+ if (*p == '\0')
+ break;
}
- if (*p == '\0' || found)
- break;
- }
/* If we found it, build a new pathname and discard the old one. */
if (found) {
diff --git a/usr.bin/vi/common/msg.c b/usr.bin/vi/common/msg.c
index e705b07d9f2..c56fad36989 100644
--- a/usr.bin/vi/common/msg.c
+++ b/usr.bin/vi/common/msg.c
@@ -10,7 +10,7 @@
#include "config.h"
#ifndef lint
-static const char sccsid[] = "@(#)msg.c 10.42 (Berkeley) 8/11/96";
+static const char sccsid[] = "@(#)msg.c 10.45 (Berkeley) 8/18/96";
#endif /* not lint */
#include <sys/param.h>
@@ -516,6 +516,7 @@ msgq_status(sp, lno, flags)
recno_t lno;
u_int flags;
{
+ static int poisoned;
recno_t last;
size_t blen, len;
int cnt, needsep;
@@ -537,12 +538,13 @@ msgq_status(sp, lno, flags)
/* Copy in the argument count. */
if (F_ISSET(sp, SC_STATUS_CNT) && sp->argv != NULL) {
for (cnt = 0, ap = sp->argv; *ap != NULL; ++ap, ++cnt);
- (void)sprintf(p,
- msg_cat(sp, "317|%d files to edit", NULL), cnt);
- p += strlen(p);
- *p++ = ':';
- *p++ = ' ';
-
+ if (cnt > 1) {
+ (void)sprintf(p,
+ msg_cat(sp, "317|%d files to edit", NULL), cnt);
+ p += strlen(p);
+ *p++ = ':';
+ *p++ = ' ';
+ }
F_CLR(sp, SC_STATUS_CNT);
}
@@ -624,7 +626,25 @@ msgq_status(sp, lno, flags)
(void)sprintf(p, " (pid %lu)", (u_long)getpid());
p += strlen(p);
#endif
+ len = p - bp;
+
+ /*
+ * Poison.
+ *
+ * This message may not be altered in any way, without the written
+ * permission of Keith Bostic. See the LICENSE file for further
+ * information.
+ */
+#define POISON " (UNLICENSED)"
+ if (!poisoned && len + 1 + (sizeof(POISON) - 1) < sp->cols) {
+ memcpy(p, POISON, sizeof(POISON) - 1);
+ p += sizeof(POISON) - 1;
+ len += sizeof(POISON) - 1;
+ poisoned = 1;
+ }
+
*p++ = '\n';
+ ++len;
/*
* There's a nasty problem with long path names. Cscope and tags files
@@ -633,21 +653,26 @@ msgq_status(sp, lno, flags)
* has already typed ahead, and chaos results. If we assume that the
* characters in the filenames and informational messages only take a
* single screen column each, we can trim the filename.
+ *
+ * XXX
+ * Status lines get put up at fairly awkward times. For example, when
+ * you do a filter read (e.g., :read ! echo foo) in the top screen of a
+ * split screen, we have to repaint the status lines for all the screens
+ * below the top screen. We don't want users having to enter continue
+ * characters for those screens. Make it really hard to screw this up.
*/
s = bp;
- if (LF_ISSET(MSTAT_TRUNCATE))
- if ((p - s) >= sp->cols) {
- for (; s < np &&
- (*s != '/' || (p - s) > sp->cols - 3); ++s);
- if (s == np)
- s = bp;
- else {
- *--s = '.';
- *--s = '.';
- *--s = '.';
- }
+ if (LF_ISSET(MSTAT_TRUNCATE) && len >= sp->cols) {
+ for (; s < np && (*s != '/' || (p - s) > sp->cols - 3); ++s);
+ if (s == np) {
+ s = p - (sp->cols - 5);
+ *--s = ' ';
}
- len = p - s;
+ *--s = '.';
+ *--s = '.';
+ *--s = '.';
+ len = p - s;
+ }
/* Flush any waiting ex messages. */
(void)ex_fflush(sp);
diff --git a/usr.bin/vi/docs/USD.doc/edit/edittut.ms b/usr.bin/vi/docs/USD.doc/edit/edittut.ms
index 274e28676ed..8a9d66ede2e 100644
--- a/usr.bin/vi/docs/USD.doc/edit/edittut.ms
+++ b/usr.bin/vi/docs/USD.doc/edit/edittut.ms
@@ -29,14 +29,14 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" @(#)edittut.ms 8.2 (Berkeley) 6/27/96
+.\" @(#)edittut.ms 8.3 (Berkeley) 8/18/96
.\"
+.ll 6.5i
+.nr LL 6.5i
.EH 'USD:11-%''Edit: A Tutorial'
.OH 'Edit: A Tutorial''USD:11-%'
.LP
.ds u \s-2UNIX\s0
-.ll 5i
-.nr LL 5i
.ND
.sp 4
.ce
diff --git a/usr.bin/vi/docs/USD.doc/exref/ex.rm b/usr.bin/vi/docs/USD.doc/exref/ex.rm
index 0ada716a225..217bad46d27 100644
--- a/usr.bin/vi/docs/USD.doc/exref/ex.rm
+++ b/usr.bin/vi/docs/USD.doc/exref/ex.rm
@@ -29,8 +29,10 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" @(#)ex.rm 8.4 (Berkeley) 6/27/96
+.\" @(#)ex.rm 8.5 (Berkeley) 8/18/96
.\"
+.nr LL 6.5i
+.nr FL 6.5i
.EH 'USD:12-%''Ex Reference Manual'
.OH 'Ex Reference Manual''USD:12-%'
.nr )P 0
diff --git a/usr.bin/vi/docs/USD.doc/exref/ex.summary b/usr.bin/vi/docs/USD.doc/exref/ex.summary
index 763aafa5b33..83084a368ed 100644
--- a/usr.bin/vi/docs/USD.doc/exref/ex.summary
+++ b/usr.bin/vi/docs/USD.doc/exref/ex.summary
@@ -29,15 +29,14 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" @(#)ex.summary 8.2 (Berkeley) 6/27/96
+.\" @(#)ex.summary 8.3 (Berkeley) 8/18/96
.\"
.ds p \v'-0.2'.\v'+0.2'
.ds U \s-2UNIX\s+2
.ds c \v'-0.2':\v'+0.2'
-.nr PO .25i
-.nr LL 6.75i
-.lt 6.75i
-.ll 6.75i
+.nr LL 6.5i
+.lt 6.5i
+.ll 6.5i
.ds CH
.ds LF Computing Services, U.C. Berkeley
.ds RF April 3, 1979
@@ -51,11 +50,10 @@
.ft B
.ce 1
Ex/Edit Command Summary (Version 2.0)
+.sp 1
.ft R
.nr VS 11
.nr PS 9
-.nr HM 0.5i
-.nr CW
.2C
.PP
.I Ex
@@ -251,10 +249,6 @@ rather than with its special meaning,
precede it by a backslash (\\).
The backslash always has a special meaning.
.1C
-.rm LF
-.rm RF
-.rm CF
-.nr FM 0.4
.TS
cp10 cp10 cp10 cp10
ltw(1.0i) lt2w(0.40i)fB ltw(3.0i) ltw(1.8i).
@@ -497,10 +491,13 @@ after the current line
T}
.TE
.FS
-\(dg Seek assistance from a consultant as soon as possible
-after saving a file with the
+.ll 6.5i
+\(dg You should seek assistance from a system administrator as soon as
+possible after saving a file with the
.I preserve
-command, because the file is saved on system storage space for only one week.
+command, because the preserved copy of the file is saved in a
+directory used to store temporary files, and thus, the preserved
+copy may only be available for a short period of time.
.FE
.SP
.nf
@@ -731,4 +728,3 @@ moving in the reverse direction
through the buffer.
T}
.TE
-
diff --git a/usr.bin/vi/docs/USD.doc/vi.man/vi.1 b/usr.bin/vi/docs/USD.doc/vi.man/vi.1
index 0f11598b228..d17ff50db56 100644
--- a/usr.bin/vi/docs/USD.doc/vi.man/vi.1
+++ b/usr.bin/vi/docs/USD.doc/vi.man/vi.1
@@ -1,39 +1,16 @@
.\" Copyright (c) 1994
.\" The Regents of the University of California. All rights reserved.
-.\" Copyright (c) 1994, 1995
+.\" Copyright (c) 1994, 1995, 1996
.\" Keith Bostic. All rights reserved.
.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\" 3. All advertising materials mentioning features or use of this software
-.\" must display the following acknowledgement:
-.\" This product includes software developed by the University of
-.\" California, Berkeley and its contributors.
-.\" 4. Neither the name of the University nor the names of its contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
+.\" This document may not be republished without written permission from
+.\" Keith Bostic.
.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
+.\" See the LICENSE file for redistribution information.
.\"
-.\" @(#)vi.1 8.45 (Berkeley) 8/10/96
+.\" @(#)vi.1 8.48 (Berkeley) 8/18/96
.\"
-.TH VI 1 "August 10, 1996"
+.TH VI 1 "August 18, 1996"
.UC
.SH NAME
ex, vi, view \- text editors
@@ -70,6 +47,12 @@ ex, vi, view \- text editors
] [\c
.BI -w " size"\c
] [file ...]
+.SH LICENSE
+The vi program is shareware. You are welcome to copy, modify and share
+it with others under the conditions listed in the LICENSE file. If your
+company finds vi sufficiently useful that you would have purchased it,
+or your company wishes to redistribute it, contributions to the authors
+would be appreciated.
.SH DESCRIPTION
.I \&Vi
is a screen oriented text editor.
diff --git a/usr.bin/vi/docs/USD.doc/vi.ref/Makefile b/usr.bin/vi/docs/USD.doc/vi.ref/Makefile
index cdbff5a381f..80c3fe5011f 100644
--- a/usr.bin/vi/docs/USD.doc/vi.ref/Makefile
+++ b/usr.bin/vi/docs/USD.doc/vi.ref/Makefile
@@ -1,13 +1,13 @@
-# @(#)Makefile 8.18 (Berkeley) 3/27/96
+# @(#)Makefile 8.16 (Berkeley) 8/15/94
DIR= usd/13.viref
SRCS= vi.ref ex.cmd.roff set.opt.roff vi.cmd.roff ref.so
+EXTRA= merge.awk spell.ok
MACROS= -me
-CLEANFILES+=vi.ref.ps vi.ref.txt index index.so
+CLEANFILES+=vi.ref.txt index index.so
paper.ps: vi.ref index.so
soelim vi.ref | ${TBL} | ${ROFF} > ${.TARGET}
- rm -f vi.ref.ps && mv $@ vi.ref.ps
vi.ref.txt: vi.ref index.so
soelim vi.ref | ${TBL} | groff ${MACROS} -Tascii > $@
diff --git a/usr.bin/vi/docs/USD.doc/vi.ref/ex.cmd.roff b/usr.bin/vi/docs/USD.doc/vi.ref/ex.cmd.roff
index 20585a3baea..382e635a6fd 100644
--- a/usr.bin/vi/docs/USD.doc/vi.ref/ex.cmd.roff
+++ b/usr.bin/vi/docs/USD.doc/vi.ref/ex.cmd.roff
@@ -1,37 +1,11 @@
.\" Copyright (c) 1994
.\" The Regents of the University of California. All rights reserved.
-.\" Copyright (c) 1994, 1995
+.\" Copyright (c) 1994, 1995, 1996
.\" Keith Bostic. All rights reserved.
.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\" 3. All advertising materials mentioning features or use of this software
-.\" must display the following acknowledgement:
-.\" This product includes software developed by the University of
-.\" California, Berkeley and its contributors.
-.\" 4. Neither the name of the University nor the names of its contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
+.\" See the LICENSE file for redistribution information.
.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" @(#)ex.cmd.roff 8.40 (Berkeley) 8/10/96
+.\" @(#)ex.cmd.roff 8.41 (Berkeley) 8/17/96
.\"
.SH 1 "Ex Description"
.pp
diff --git a/usr.bin/vi/docs/USD.doc/vi.ref/merge.awk b/usr.bin/vi/docs/USD.doc/vi.ref/merge.awk
index 16b51520a77..c65207c106a 100644
--- a/usr.bin/vi/docs/USD.doc/vi.ref/merge.awk
+++ b/usr.bin/vi/docs/USD.doc/vi.ref/merge.awk
@@ -1,4 +1,4 @@
-# @(#)merge.awk 8.3 (Berkeley) 5/26/94
+# @(#)merge.awk 8.3 (Berkeley) 5/25/94
#
# merge index entries into one line per label
$1 == prev {
diff --git a/usr.bin/vi/docs/USD.doc/vi.ref/ref.so b/usr.bin/vi/docs/USD.doc/vi.ref/ref.so
index ecc91575275..a82c79258bb 100644
--- a/usr.bin/vi/docs/USD.doc/vi.ref/ref.so
+++ b/usr.bin/vi/docs/USD.doc/vi.ref/ref.so
@@ -1,37 +1,11 @@
.\" Copyright (c) 1994
.\" The Regents of the University of California. All rights reserved.
-.\" Copyright (c) 1994, 1995
+.\" Copyright (c) 1994, 1995, 1996
.\" Keith Bostic. All rights reserved.
.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\" 3. All advertising materials mentioning features or use of this software
-.\" must display the following acknowledgement:
-.\" This product includes software developed by the University of
-.\" California, Berkeley and its contributors.
-.\" 4. Neither the name of the University nor the names of its contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
+.\" See the LICENSE file for redistribution information.
.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" @(#)ref.so 8.8 (Berkeley) 1/11/95
+.\" @(#)ref.so 8.9 (Berkeley) 8/17/96
.\"
.\"
.\" indented paragraph, with spaces between the items, bold font
diff --git a/usr.bin/vi/docs/USD.doc/vi.ref/set.opt.roff b/usr.bin/vi/docs/USD.doc/vi.ref/set.opt.roff
index 3638d8c777d..7ba7adbab22 100644
--- a/usr.bin/vi/docs/USD.doc/vi.ref/set.opt.roff
+++ b/usr.bin/vi/docs/USD.doc/vi.ref/set.opt.roff
@@ -1,37 +1,11 @@
.\" Copyright (c) 1994
.\" The Regents of the University of California. All rights reserved.
-.\" Copyright (c) 1994, 1995
+.\" Copyright (c) 1994, 1995, 1996
.\" Keith Bostic. All rights reserved.
.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\" 3. All advertising materials mentioning features or use of this software
-.\" must display the following acknowledgement:
-.\" This product includes software developed by the University of
-.\" California, Berkeley and its contributors.
-.\" 4. Neither the name of the University nor the names of its contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
+.\" See the LICENSE file for redistribution information.
.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" @(#)set.opt.roff 8.64 (Berkeley) 8/10/96
+.\" @(#)set.opt.roff 8.65 (Berkeley) 8/17/96
.\"
.SH 1 "Set Options"
.pp
diff --git a/usr.bin/vi/docs/USD.doc/vi.ref/vi.cmd.roff b/usr.bin/vi/docs/USD.doc/vi.ref/vi.cmd.roff
index 14d61dc862f..12030cd52b0 100644
--- a/usr.bin/vi/docs/USD.doc/vi.ref/vi.cmd.roff
+++ b/usr.bin/vi/docs/USD.doc/vi.ref/vi.cmd.roff
@@ -1,37 +1,11 @@
.\" Copyright (c) 1994
.\" The Regents of the University of California. All rights reserved.
-.\" Copyright (c) 1994, 1995
+.\" Copyright (c) 1994, 1995, 1996
.\" Keith Bostic. All rights reserved.
.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\" 3. All advertising materials mentioning features or use of this software
-.\" must display the following acknowledgement:
-.\" This product includes software developed by the University of
-.\" California, Berkeley and its contributors.
-.\" 4. Neither the name of the University nor the names of its contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
+.\" See the LICENSE file for redistribution information.
.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" @(#)vi.cmd.roff 8.48 (Berkeley) 10/3/95
+.\" @(#)vi.cmd.roff 8.49 (Berkeley) 8/17/96
.\"
.SH 1 "Vi Description"
.pp
diff --git a/usr.bin/vi/docs/USD.doc/vi.ref/vi.ref b/usr.bin/vi/docs/USD.doc/vi.ref/vi.ref
index 912004d5953..c5d3ec9f387 100644
--- a/usr.bin/vi/docs/USD.doc/vi.ref/vi.ref
+++ b/usr.bin/vi/docs/USD.doc/vi.ref/vi.ref
@@ -1,37 +1,14 @@
.\" Copyright (c) 1994
.\" The Regents of the University of California. All rights reserved.
-.\" Copyright (c) 1994, 1995
+.\" Copyright (c) 1994, 1995, 1996
.\" Keith Bostic. All rights reserved.
.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\" 3. All advertising materials mentioning features or use of this software
-.\" must display the following acknowledgement:
-.\" This product includes software developed by the University of
-.\" California, Berkeley and its contributors.
-.\" 4. Neither the name of the University nor the names of its contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
+.\" This document may not be republished without written permission from
+.\" Keith Bostic.
.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
+.\" See the LICENSE file for redistribution information.
.\"
-.\" @(#)vi.ref 8.76 (Berkeley) 6/28/96
+.\" @(#)vi.ref 8.82 (Berkeley) 8/18/96
.\"
.\"
.so ref.so
@@ -51,21 +28,42 @@ University of California, Berkeley
Berkeley, California 94720
.sp 1
\*(td
+.)l
.sp 3
+.(l C
.i Abstract
-.sp
.)l
.(q
.pp
This document is the reference guide for the 4.4BSD
implementations of
.EV nex nvi ,
-which are reimplementations of the historic Berkeley
+which are implementations of the historic Berkeley
.EV ex vi
editors.
.)q
.sp 3
.(l C
+.i Licensing
+.)l
+.sp
+.lp
+Copyright (c) 1991, 1992, 1993, 1994
+.ti +5
+The Regents of the University of California. All Rights Reserved.
+.lp
+Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996
+.ti +5
+Keith Bostic. All Rights Reserved.
+.sp
+.pp
+The vi program is shareware. You are welcome to copy, modify and share
+it with others under the conditions listed in the LICENSE file. If your
+company finds vi sufficiently useful that you would have purchased it,
+or your company wishes to redistribute it, contributions to the authors
+would be appreciated.
+.bp 2
+.(l C
.i Acknowledgements
.)l
.sp
@@ -97,6 +95,11 @@ Scrolling and reworking for
.CO nvi
was done by Elan Amir.
.pp
+George Neville-Neil added the Tcl interpreter,
+and Sven Verdoolaege added the Perl5 interpreter.
+.pp
+Rob Mayoff added Cscope support.
+.pp
The Institute of Electrical and Electronics Engineers has
given us permission to reprint portions of their documentation.
Portions of this document are reprinted and reproduced from
@@ -108,19 +111,10 @@ Engineers, Inc.
The financial support of UUNET Communications Services is gratefully
acknowledged.
.)q
-.sp 6
-.lp
-Copyright (c) 1991, 1993, 1994
-.ti +5
-The Regents of the University of California. All Rights Reserved.
-.lp
-Copyright (c) 1994, 1995
-.ti +5
-Keith Bostic. All Rights Reserved.
.sy echo -n >index
.oh 'Nvi/Nex Reference''USD:13-%'
.eh 'USD:13-%''Nvi/Nex Reference'
-.bp 3
+.bp 4
.SH 1 Description
.pp
.CO Vi
@@ -915,29 +909,38 @@ itself has eight subcommands:
and
.CO \&t .
.pp
-.IP "cs[cope] a[dd] directory"
+.IP "cs[cope] a[dd] file"
The
.CO add
-command attaches to the
+command attaches to the specified
.CO cscope
-database in the specified directory.
-The directory name is expanded using the standard filename expansions.
+database.
+The file name is expanded using the standard filename expansions.
+If
+.CO file
+is a directory, the file
+.QQ cscope.out
+in that directory is used as the database.
+.pp
After
.CO nvi
attaches to a new database,
all subsequent
.CO cscope
queries will be asked of that database.
-The result of any single query is the collection of responses from all
-of the databases to the query.
+The result of any single query is the collection of response to the query
+from all of the attached databases.
.sp
If the
.QQ CSCOPE_DIRS
environmental variable is set when
.CO nvi
-is run, it is expected to be a <blank>-separated list of directories containing
+is run,
+it is expected to be a <colon> or <blank>-separated list of
.CO cscope
-databases to which the user wishes to attach.
+databases or directories containing
+.CO cscope
+databases, to which the user wishes to attach.
.IP ":cs[cope] f[ind] c|d|e|f|g|i|s|t buffer|pattern"
The
.CO find
@@ -972,8 +975,9 @@ In addition, if the file
.QQ cscope.tpath
appears in the same directory as the
.CO cscope
-database, it is expected to contain a colon-separated list of directory
-names where files referenced by its associated
+database,
+it is expected to contain a colon-separated list of directory names
+where files referenced by its associated
.CO cscope
database may be found.
.sp
@@ -1223,7 +1227,7 @@ source directories for more information.
As a quick reference, the following function calls are provided for
both the Perl and Tcl interfaces.
The Perl interface uses a slightly different naming convention,
-e.g. ``viFindScreen'' is named ``VI:FindScreen''.
+e.g. ``viFindScreen'' is named ``VI::FindScreen''.
.IP "viFindScreen file"
Return the
.LI "screenId" associated with
@@ -1845,7 +1849,7 @@ of the file.
.nf
.so index.so
.fi
-.bp 2
+.bp 3
.1c
.ce 1
\fB\s+2Table of Contents\s0\fP
diff --git a/usr.bin/vi/docs/USD.doc/vitut/vi.apwh.ms b/usr.bin/vi/docs/USD.doc/vitut/vi.apwh.ms
index d0b62611c70..6b0763055ca 100644
--- a/usr.bin/vi/docs/USD.doc/vitut/vi.apwh.ms
+++ b/usr.bin/vi/docs/USD.doc/vitut/vi.apwh.ms
@@ -29,8 +29,10 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" @(#)vi.apwh.ms 8.1 (Berkeley) 6/8/93
+.\" @(#)vi.apwh.ms 8.2 (Berkeley) 8/18/96
.\"
+.nr LL 6.5i
+.nr FL 6.5i
.TL
Vi Command & Function Reference
.AU CB 2675
diff --git a/usr.bin/vi/docs/USD.doc/vitut/vi.in b/usr.bin/vi/docs/USD.doc/vitut/vi.in
index 9815e6d3c8a..c36ebe41743 100644
--- a/usr.bin/vi/docs/USD.doc/vitut/vi.in
+++ b/usr.bin/vi/docs/USD.doc/vitut/vi.in
@@ -29,8 +29,10 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" @(#)vi.in 8.4 (Berkeley) 6/27/96
+.\" @(#)vi.in 8.5 (Berkeley) 8/18/96
.\"
+.nr LL 6.5i
+.nr FL 6.5i
.EH 'USD:11-%''An Introduction to Display Editing with Vi'
.OH 'An Introduction to Display Editing with Vi''USD:11-%'
.bd S 3
diff --git a/usr.bin/vi/docs/USD.doc/vitut/vi.summary b/usr.bin/vi/docs/USD.doc/vitut/vi.summary
index 2e3a5c2b3b0..8a09ce94440 100644
--- a/usr.bin/vi/docs/USD.doc/vitut/vi.summary
+++ b/usr.bin/vi/docs/USD.doc/vitut/vi.summary
@@ -29,7 +29,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" @(#)vi.summary 8.2 (Berkeley) 6/27/96
+.\" @(#)vi.summary 8.3 (Berkeley) 8/18/96
.\"
.ds CH
.ds CF
@@ -49,10 +49,10 @@
.vs 11
.nr HM .50i
.nr FM .25i
-.nr PO 0
-.po 0
-.nr LL 3.5i
-.ll 3.5i
+.nr PO 1.0i
+.po 1.0i
+.nr LL 4.5i
+.ll 4.5i
.de nc
.bp
..
diff --git a/usr.bin/vi/docs/changelog b/usr.bin/vi/docs/changelog
index 6e862004914..dc3a7cc0c27 100644
--- a/usr.bin/vi/docs/changelog
+++ b/usr.bin/vi/docs/changelog
@@ -1,4 +1,14 @@
+1.73 -> 1.74 (08/18/96)
+ + Fix bug where the status line wasn't redisplayed if the user ran
+ an ex command that trashed the screen.
+ + Fix bug where the long version of the status line wasn't displayed
+ when switching screens.
+ + Rework fast-path filename completion code to sort the entries, and
+ strip out . and .. by default.
+ + Fix bug where ex went to the first line instead of the last one when
+ reading in a file.
1.72 -> 1.73 (08/12/96)
+ + Do filename completion and some file expansion internally for speed.
+ Fix CSCOPE_DIRS environmental variable support.
+ Ex parser fix for global commands in script files.
+ Add the O_PATH option, so you can specify a directory search path
diff --git a/usr.bin/vi/docs/features b/usr.bin/vi/docs/features
index 5050e13ddbe..7e49e7235dc 100644
--- a/usr.bin/vi/docs/features
+++ b/usr.bin/vi/docs/features
@@ -41,11 +41,6 @@ List of suggested features:
of the screen aren't filled except by accident, so that the text
you ask for is always concentrated in the center of the screen.
-+ Add "set searchdir" for a list of directories to look in for
- files to edit. The semantic is that ":e foo" is replaced with
- the file name that is found, so there's no confusion as to
- which file is written.
-
+ Change
:di[splay] tags -> :tags
:di[splay] screens -> :screens
diff --git a/usr.bin/vi/ex/ex.h b/usr.bin/vi/ex/ex.h
index cd18ced76ab..5870990b744 100644
--- a/usr.bin/vi/ex/ex.h
+++ b/usr.bin/vi/ex/ex.h
@@ -6,7 +6,7 @@
*
* See the LICENSE file for redistribution information.
*
- * @(#)ex.h 10.23 (Berkeley) 6/30/96
+ * @(#)ex.h 10.24 (Berkeley) 8/12/96
*/
#define PROMPTCHAR ':' /* Prompt using a colon. */
@@ -155,13 +155,6 @@ struct _excmd {
u_int32_t flags; /* Current flags. */
};
-/* Cd paths. */
-typedef struct _cdpath CDPATH;
-struct _cdpath { /* Cd path structure. */
- TAILQ_ENTRY(_cdpath) q; /* Linked list of cd paths. */
- char *path; /* Path. */
-};
-
/* Ex private, per-screen memory. */
typedef struct _ex_private {
CIRCLEQ_HEAD(_tqh, _tagq) tq; /* Tag queue. */
@@ -169,8 +162,6 @@ typedef struct _ex_private {
LIST_HEAD(_csch, _csc) cscq; /* Cscope connection list. */
char *tag_last; /* Saved last tag string. */
- TAILQ_HEAD(_cdh, _cdpath) cdq; /* Cd path list. */
-
CHAR_T *lastbcomm; /* Last bang command. */
ARGS **args; /* Command: argument list. */
diff --git a/usr.bin/vi/ex/ex_argv.c b/usr.bin/vi/ex/ex_argv.c
index e2cbfd61246..1930bf145d0 100644
--- a/usr.bin/vi/ex/ex_argv.c
+++ b/usr.bin/vi/ex/ex_argv.c
@@ -10,7 +10,7 @@
#include "config.h"
#ifndef lint
-static const char sccsid[] = "@(#)ex_argv.c 10.23 (Berkeley) 8/11/96";
+static const char sccsid[] = "@(#)ex_argv.c 10.25 (Berkeley) 8/13/96";
#endif /* not lint */
#include <sys/types.h>
@@ -29,10 +29,10 @@ static const char sccsid[] = "@(#)ex_argv.c 10.23 (Berkeley) 8/11/96";
#include "../common/common.h"
static int argv_alloc __P((SCR *, size_t));
+static int argv_comp __P((const void *, const void *));
static int argv_fexp __P((SCR *, EXCMD *,
char *, size_t, char *, size_t *, char **, size_t *, int));
-static int argv_prefix __P((SCR *,
- char *, char *, char **, size_t *, size_t *));
+static int argv_lexp __P((SCR *, EXCMD *, char *));
static int argv_sexp __P((SCR *, char **, size_t *, size_t *));
/*
@@ -74,7 +74,7 @@ argv_exp0(sp, excp, cmd, cmdlen)
exp = EXP(sp);
argv_alloc(sp, cmdlen);
- memmove(exp->args[exp->argsoff]->bp, cmd, cmdlen);
+ memcpy(exp->args[exp->argsoff]->bp, cmd, cmdlen);
exp->args[exp->argsoff]->bp[cmdlen] = '\0';
exp->args[exp->argsoff]->len = cmdlen;
++exp->argsoff;
@@ -149,7 +149,7 @@ argv_exp2(sp, excp, cmd, cmdlen)
#define SHELLECHO "echo "
#define SHELLOFFSET (sizeof(SHELLECHO) - 1)
- memmove(bp, SHELLECHO, SHELLOFFSET);
+ memcpy(bp, SHELLECHO, SHELLOFFSET);
p = bp + SHELLOFFSET;
len = SHELLOFFSET;
@@ -216,18 +216,12 @@ argv_exp2(sp, excp, cmd, cmdlen)
case 0:
p = bp + SHELLOFFSET;
len -= SHELLOFFSET;
+ rval = argv_exp3(sp, excp, p, len);
break;
case 1:
if (*p == '*') {
- *p++ = '\0';
- n = p - bp;
- if (argv_prefix(sp,
- bp + SHELLOFFSET, p, &bp, &blen, &len)) {
- rval = 1;
- goto err;
- }
- p = bp + n;
- len -= n;
+ *p = '\0';
+ rval = argv_lexp(sp, excp, bp + SHELLOFFSET);
break;
}
/* FALLTHROUGH */
@@ -237,15 +231,10 @@ argv_exp2(sp, excp, cmd, cmdlen)
goto err;
}
p = bp;
+ rval = argv_exp3(sp, excp, p, len);
break;
}
-#if defined(DEBUG) && 0
- TRACE(sp, "after shell: %d: {%s}\n", len, bp);
-#endif
-
- rval = argv_exp3(sp, excp, p, len);
-
err: FREE_SPACE(sp, bp, blen);
return (rval);
}
@@ -352,7 +341,7 @@ argv_fexp(sp, excp, cmd, cmdlen, p, lenp, bpp, blenp, is_bang)
}
len += tlen = strlen(exp->lastbcomm);
ADD_SPACE_RET(sp, bp, blen, len);
- memmove(p, exp->lastbcomm, tlen);
+ memcpy(p, exp->lastbcomm, tlen);
p += tlen;
F_SET(excp, E_MODIFY);
break;
@@ -365,7 +354,7 @@ argv_fexp(sp, excp, cmd, cmdlen, p, lenp, bpp, blenp, is_bang)
tlen = strlen(t);
len += tlen;
ADD_SPACE_RET(sp, bp, blen, len);
- memmove(p, t, tlen);
+ memcpy(p, t, tlen);
p += tlen;
F_SET(excp, E_MODIFY);
break;
@@ -377,7 +366,7 @@ argv_fexp(sp, excp, cmd, cmdlen, p, lenp, bpp, blenp, is_bang)
}
len += tlen = strlen(t);
ADD_SPACE_RET(sp, bp, blen, len);
- memmove(p, t, tlen);
+ memcpy(p, t, tlen);
p += tlen;
F_SET(excp, E_MODIFY);
break;
@@ -508,33 +497,34 @@ argv_free(sp)
}
/*
- * argv_prefix --
+ * argv_lexp --
* Find all file names matching the prefix and append them to the
* buffer.
*/
static int
-argv_prefix(sp, path, wp, bpp, blenp, lenp)
+argv_lexp(sp, excp, path)
SCR *sp;
- char *path, *wp, **bpp;
- size_t *blenp, *lenp;
+ EXCMD *excp;
+ char *path;
{
- DIR *dirp;
struct dirent *dp;
- size_t blen, clen, dlen, doffset, len, nlen;
- char *bp, *dname, *name, *p;
+ DIR *dirp;
+ EX_PRIVATE *exp;
+ int off;
+ size_t dlen, len, nlen;
+ char *dname, *name, *p;
- /*
- * Open the directory, set up the name and length for comparison,
- * the prepended directory and length.
- */
+ exp = EXP(sp);
+
+ /* Set up the name and length for comparison. */
if ((p = strrchr(path, '/')) == NULL) {
- dlen = 0;
dname = ".";
+ dlen = 0;
name = path;
} else {
if (p == path) {
dname = "/";
- dlen = 0;
+ dlen = 1;
} else {
*p = '\0';
dname = path;
@@ -544,80 +534,68 @@ argv_prefix(sp, path, wp, bpp, blenp, lenp)
}
nlen = strlen(name);
- if ((dirp = opendir(dname)) == NULL) {
- msgq_str(sp, M_SYSERR, dname, "%s");
- return (1);
- }
-
- /* Local copies of the buffer variables. */
- bp = *bpp;
- blen = *blenp;
-
/*
- * We're passed a pointer to the name (after the echo command at
- * the start of the buffer) and a pointer to the place to start
- * writing. Set a pointer to the start of the write area, and a
- * value for the amount of space we have to write.
- */
- p = wp;
- len = wp - bp;
- blen -= len;
-
- /*
- * Read the directory, checking for files with a matching prefix.
- *
* XXX
* We don't use the d_namlen field, it's not portable enough; we
* assume that d_name is nul terminated, instead.
*/
- while ((dp = readdir(dirp)) != NULL) {
- clen = strlen(dp->d_name);
- if (nlen == 0 ||
- (clen >= nlen && !memcmp(dp->d_name, name, nlen))) {
- if (blen < clen + dlen + 5) {
- doffset = dname - bp;
- ADD_SPACE_GOTO(sp, bp, *blenp,
- *blenp * 2 + clen + dlen + 5);
- p = bp + len;
- blen = *blenp - len;
- if (dname == path)
- dname = bp + doffset;
- }
- if (dlen != 0) {
- memcpy(p, dname, dlen);
- p += dlen;
+ if ((dirp = opendir(dname)) == NULL) {
+ msgq_str(sp, M_SYSERR, dname, "%s");
+ return (1);
+ }
+ for (off = exp->argsoff; (dp = readdir(dirp)) != NULL;) {
+ if (nlen == 0) {
+ if (dp->d_name[0] == '.')
+ continue;
+ len = strlen(dp->d_name);
+ } else {
+ len = strlen(dp->d_name);
+ if (len < nlen || memcmp(dp->d_name, name, nlen))
+ continue;
+ }
+
+ /* Directory + name + slash + null. */
+ argv_alloc(sp, dlen + len + 2);
+ p = exp->args[exp->argsoff]->bp;
+ if (dlen != 0) {
+ memcpy(p, dname, dlen);
+ p += dlen;
+ if (dlen > 1 || dname[0] != '/')
*p++ = '/';
- len += dlen + 1;
- blen -= dlen + 1;
- }
- memcpy(p, dp->d_name, clen);
- p += clen;
- *p++ = ' ';
- len += clen + 1;
- blen -= clen + 1;
}
+ memcpy(p, dp->d_name, len + 1);
+ exp->args[exp->argsoff]->len = dlen + len + 1;
+ ++exp->argsoff;
+ excp->argv = exp->args;
+ excp->argc = exp->argsoff;
}
- (void)closedir(dirp);
+ closedir(dirp);
- /*
- * If we didn't find a match, complain that the expansion failed. We
- * can't know for certain that's the error, but it's a good guess, and
- * it matches historic practice.
- */
- if (p == wp) {
+ if (off == exp->argsoff) {
+ /*
+ * If we didn't find a match, complain that the expansion
+ * failed. We can't know for certain that's the error, but
+ * it's a good guess, and it matches historic practice.
+ */
msgq(sp, M_ERR, "304|Shell expansion failed");
-alloc_err: return (1);
+ return (1);
}
-
- /* Delete the final <space>, nul terminate the string. */
- *--p = '\0';
- *lenp = len - 1;
- *bpp = bp; /* *blenp is already updated. */
-
+ qsort(exp->args + off, exp->argsoff - off, sizeof(ARGS *), argv_comp);
return (0);
}
/*
+ * argv_comp --
+ * Alphabetic comparison.
+ */
+static int
+argv_comp(a, b)
+ const void *a, *b;
+{
+ return (strcmp((char *)(*(ARGS **)a)->bp, (char *)(*(ARGS **)b)->bp));
+}
+
+/*
* argv_sexp --
* Fork a shell, pipe a command through it, and read the output into
* a buffer.
diff --git a/usr.bin/vi/ex/ex_cd.c b/usr.bin/vi/ex/ex_cd.c
index dac8f243dda..3307c7b6306 100644
--- a/usr.bin/vi/ex/ex_cd.c
+++ b/usr.bin/vi/ex/ex_cd.c
@@ -10,7 +10,7 @@
#include "config.h"
#ifndef lint
-static const char sccsid[] = "@(#)ex_cd.c 10.9 (Berkeley) 3/30/96";
+static const char sccsid[] = "@(#)ex_cd.c 10.10 (Berkeley) 8/12/96";
#endif /* not lint */
#include <sys/param.h>
@@ -40,8 +40,8 @@ ex_cd(sp, cmdp)
{
struct passwd *pw;
ARGS *ap;
- CDPATH *cdp;
- char *dir; /* XXX END OF THE STACK, DON'T TRUST GETCWD. */
+ CHAR_T savech;
+ char *dir, *p, *t; /* XXX: END OF THE STACK, DON'T TRUST GETCWD. */
char buf[MAXPATHLEN * 2];
/*
@@ -78,9 +78,9 @@ ex_cd(sp, cmdp)
}
/*
- * Try the current directory first. If this succeeds, don't
- * display a message, vi didn't historically, and it's real
- * obvious to the user where they are.
+ * Try the current directory first. If this succeeds, don't display
+ * a message, vi didn't historically, and it should be obvious to the
+ * user where they are.
*/
if (!chdir(dir))
return (0);
@@ -96,109 +96,34 @@ ex_cd(sp, cmdp)
(ap->bp[2] == '/' || ap->bp[2] == '\0'))
goto err;
- /* If the user has a CDPATH variable, try its elements. */
- for (cdp = EXP(sp)->cdq.tqh_first; cdp != NULL; cdp = cdp->q.tqe_next) {
- (void)snprintf(buf, sizeof(buf), "%s/%s", cdp->path, dir);
- if (!chdir(buf)) {
- if (getcwd(buf, sizeof(buf)) != NULL)
- msgq_str(sp, M_INFO, buf,
- "122|New current directory: %s");
- return (0);
- }
- }
-err: msgq_str(sp, M_SYSERR, dir, "%s");
- return (1);
-}
-
-#define FREE_CDPATH(cdp) { \
- TAILQ_REMOVE(&exp->cdq, (cdp), q); \
- free((cdp)->path); \
- free(cdp); \
-}
-
-/*
- * ex_cdalloc --
- * Create a new list of cd paths.
- *
- * PUBLIC: int ex_cdalloc __P((SCR *, char *));
- */
-int
-ex_cdalloc(sp, str)
- SCR *sp;
- char *str;
-{
- EX_PRIVATE *exp;
- CDPATH *cdp;
- size_t len;
- int founddot;
- char *p, *t;
-
- /* Free current queue. */
- exp = EXP(sp);
- while ((cdp = exp->cdq.tqh_first) != NULL)
- FREE_CDPATH(cdp);
-
- /*
- * Create new queue. The CDPATH environmental variable (and the
- * user's manual entry) are delimited by colon characters.
- */
- for (p = t = str, founddot = 0;; ++p) {
+ /* Try the O_CDPATH option values. */
+ for (p = t = O_STR(sp, O_CDPATH);; ++p)
if (*p == '\0' || *p == ':') {
/*
* Empty strings specify ".". The only way to get an
* empty string is a leading colon, colons in a row,
* or a trailing colon. Or, to put it the other way,
- * if the the length is zero, then it's either ":XXX",
- * "XXX::XXXX" , "XXX:", or "", and the only failure
- * mode is the last one. Note, the string ":" gives
- * us two entries of '.', so we only include one of
- * them.
+ * if the length is 1 or less, then we're dealing with
+ * ":XXX", "XXX::XXXX" , "XXX:", or "". Since we've
+ * already tried dot, we ignore tham all.
*/
- if ((len = p - t) == 0) {
- if (p == str && *p == '\0')
- break;
- if (founddot) {
- if (*p == '\0')
- break;
- continue;
+ if (t < p - 1) {
+ savech = *p;
+ *p = '\0';
+ (void)snprintf(buf,
+ sizeof(buf), "%s/%s", t, dir);
+ *p = savech;
+ if (!chdir(buf)) {
+ if (getcwd(buf, sizeof(buf)) != NULL)
+ msgq_str(sp, M_INFO, buf, "122|New current directory: %s");
+ return (0);
}
- len = 1;
- t = ".";
- founddot = 1;
- }
- MALLOC_RET(sp, cdp, CDPATH *, sizeof(CDPATH));
- MALLOC(sp, cdp->path, char *, len + 1);
- if (cdp->path == NULL) {
- free(cdp);
- return (1);
}
- memmove(cdp->path, t, len);
- cdp->path[len] = '\0';
- TAILQ_INSERT_TAIL(&exp->cdq, cdp, q);
t = p + 1;
+ if (*p == '\0')
+ break;
}
- if (*p == '\0')
- break;
- }
- return (0);
-}
- /* Free previous queue. */
-/*
- * ex_cdfree --
- * Free the cd path list.
- *
- * PUBLIC: int ex_cdfree __P((SCR *));
- */
-int
-ex_cdfree(sp)
- SCR *sp;
-{
- EX_PRIVATE *exp;
- CDPATH *cdp;
- /* Free up cd path information. */
- exp = EXP(sp);
- while ((cdp = exp->cdq.tqh_first) != NULL)
- FREE_CDPATH(cdp);
- return (0);
+err: msgq_str(sp, M_SYSERR, dir, "%s");
+ return (1);
}
diff --git a/usr.bin/vi/ex/ex_init.c b/usr.bin/vi/ex/ex_init.c
index 31bcb2a176f..6a78416a334 100644
--- a/usr.bin/vi/ex/ex_init.c
+++ b/usr.bin/vi/ex/ex_init.c
@@ -10,7 +10,7 @@
#include "config.h"
#ifndef lint
-static const char sccsid[] = "@(#)ex_init.c 10.25 (Berkeley) 7/10/96";
+static const char sccsid[] = "@(#)ex_init.c 10.26 (Berkeley) 8/12/96";
#endif /* not lint */
#include <sys/param.h>
@@ -55,7 +55,6 @@ ex_screen_copy(orig, sp)
CIRCLEQ_INIT(&nexp->tq);
TAILQ_INIT(&nexp->tagfq);
LIST_INIT(&nexp->cscq);
- TAILQ_INIT(&nexp->cdq);
if (orig == NULL) {
} else {
@@ -106,9 +105,6 @@ ex_screen_end(sp)
if (ex_tag_free(sp))
rval = 1;
- if (ex_cdfree(sp))
- rval = 1;
-
/* Free private memory. */
free(exp);
sp->ex_private = NULL;
@@ -130,8 +126,6 @@ ex_optchange(sp, offset, str, valp)
u_long *valp;
{
switch (offset) {
- case O_CDPATH:
- return (ex_cdalloc(sp, str));
case O_TAGS:
return (ex_tagf_alloc(sp, str));
}
diff --git a/usr.bin/vi/ex/ex_read.c b/usr.bin/vi/ex/ex_read.c
index 6e6afa8ebcf..78296ff28ca 100644
--- a/usr.bin/vi/ex/ex_read.c
+++ b/usr.bin/vi/ex/ex_read.c
@@ -10,7 +10,7 @@
#include "config.h"
#ifndef lint
-static const char sccsid[] = "@(#)ex_read.c 10.37 (Berkeley) 7/12/96";
+static const char sccsid[] = "@(#)ex_read.c 10.38 (Berkeley) 8/12/96";
#endif /* not lint */
#include <sys/types.h>
@@ -267,15 +267,20 @@ ex_read(sp, cmdp)
rval = ex_readfp(sp, name, fp, &cmdp->addr1, &nlines, 0);
/*
- * Set the cursor to the first line read in, if anything read
- * in, otherwise, the address. (Historic vi set it to the
- * line after the address regardless, but since that line may
- * not exist we don't bother.)
+ * In vi, set the cursor to the first line read in, if anything read
+ * in, otherwise, the address. (Historic vi set it to the line after
+ * the address regardless, but since that line may not exist we don't
+ * bother.)
+ *
+ * In ex, set the cursor to the last line read in, if anything read in,
+ * otherwise, the address.
*/
- sp->lno = cmdp->addr1.lno;
- if (nlines)
- ++sp->lno;
-
+ if (F_ISSET(sp, SC_VI)) {
+ sp->lno = cmdp->addr1.lno;
+ if (nlines)
+ ++sp->lno;
+ } else
+ sp->lno = cmdp->addr1.lno + nlines;
return (rval);
}
diff --git a/usr.bin/vi/ex/ex_version.c b/usr.bin/vi/ex/ex_version.c
index 5e279bdaca0..030b020f6ce 100644
--- a/usr.bin/vi/ex/ex_version.c
+++ b/usr.bin/vi/ex/ex_version.c
@@ -10,7 +10,7 @@
#include "config.h"
#ifndef lint
-static const char sccsid[] = "@(#)ex_version.c 10.28 (Berkeley) 7/14/96";
+static const char sccsid[] = "@(#)ex_version.c 10.30 (Berkeley) 8/17/96";
#endif /* not lint */
#include <sys/types.h>
@@ -23,24 +23,9 @@ static const char sccsid[] = "@(#)ex_version.c 10.28 (Berkeley) 7/14/96";
#include "../common/common.h"
#include "version.h"
-#define BSDI_ADVERT \
-"\nBerkeley Software Design, Inc. (BSDI) is the commercial supplier of \
-the state-of-the-art BSD operating system, networking and Internet \
-technologies originally developed by the Computer Systems Research \
-Group (CSRG) at the University of California at Berkeley. BSDI's \
-BSD/OS represents over twenty years of development by the worldwide \
-BSD community. BSD technology is known for its flexible and portable \
-architecture and advanced development environments. Today, BSDI is \
-recognized for the strength of BSDI-powered systems in demanding \
-business and technical computing environments, the worldwide customer \
-acceptance of BSD-based technology, the know-how of BSDI's leading \
-computer scientists, and BSDI's focus on delivering and supporting \
-industrial-strength software for computing platforms. BSDI may be \
-contacted at http://www.bsdi.com/, info@bsdi.com or 1-800-800-4273."
-
/*
* ex_version -- :version
- * Display the program version and a shameless plug for BSDI.
+ * Display the program version.
*
* PUBLIC: int ex_version __P((SCR *, EXCMD *));
*/
@@ -49,7 +34,8 @@ ex_version(sp, cmdp)
SCR *sp;
EXCMD *cmdp;
{
+ msgq(sp, M_INFO,
+ "Vi is shareware: see the LICENSE file for details.");
msgq(sp, M_INFO, VI_VERSION);
- msgq(sp, M_INFO, BSDI_ADVERT);
return (0);
}
diff --git a/usr.bin/vi/ex/version.h b/usr.bin/vi/ex/version.h
index 9586ba7942a..c0a2f3c18f1 100644
--- a/usr.bin/vi/ex/version.h
+++ b/usr.bin/vi/ex/version.h
@@ -1,2 +1,2 @@
#define VI_VERSION \
- "Version 1.73 (8/12/96) The CSRG, University of California, Berkeley."
+ "Version 1.74 (8/18/96) The CSRG, University of California, Berkeley."
diff --git a/usr.bin/vi/include/ex_extern.h b/usr.bin/vi/include/ex_extern.h
index 35fe51383ca..ed01701f118 100644
--- a/usr.bin/vi/include/ex_extern.h
+++ b/usr.bin/vi/include/ex_extern.h
@@ -24,8 +24,6 @@ int argv_free __P((SCR *));
int ex_at __P((SCR *, EXCMD *));
int ex_bang __P((SCR *, EXCMD *));
int ex_cd __P((SCR *, EXCMD *));
-int ex_cdalloc __P((SCR *, char *));
-int ex_cdfree __P((SCR *));
int ex_cscope __P((SCR *, EXCMD *));
int cscope_display __P((SCR *));
int cscope_search __P((SCR *, TAGQ *, TAG *));
diff --git a/usr.bin/vi/include/vi_extern.h b/usr.bin/vi/include/vi_extern.h
index fb50fac1383..bcd23595ecb 100644
--- a/usr.bin/vi/include/vi_extern.h
+++ b/usr.bin/vi/include/vi_extern.h
@@ -116,7 +116,6 @@ void vs_home __P((SCR *));
void vs_update __P((SCR *, const char *, const char *));
void vs_msg __P((SCR *, mtype_t, char *, size_t));
int vs_ex_resolve __P((SCR *, int *));
-int vs_resolve __P((SCR *, int));
int vs_repaint __P((SCR *, EVENT *));
int vs_refresh __P((SCR *, int));
int vs_column __P((SCR *, size_t *));
diff --git a/usr.bin/vi/install/recover.script b/usr.bin/vi/install/recover.script
deleted file mode 100644
index 0f80a4abfa3..00000000000
--- a/usr.bin/vi/install/recover.script
+++ /dev/null
@@ -1,46 +0,0 @@
-# @(#)recover.script 8.7 (Berkeley) 8/16/94
-#
-# Script to recover nvi edit sessions.
-#
-RECDIR=/var/tmp/vi.recover
-SENDMAIL=/usr/sbin/sendmail
-echo 'Recovering nvi editor sessions.'
-
-# Check editor backup files.
-vibackup=`echo $RECDIR/vi.*`
-if [ "$vibackup" != "$RECDIR/vi.*" ]; then
- for i in $vibackup; do
- # Only test files that are readable.
- if test ! -r $i; then
- continue
- fi
-
- # Unmodified nvi editor backup files either have the
- # execute bit set or are zero length. Delete them.
- if test -x $i -o ! -s $i; then
- rm $i
- fi
- done
-fi
-
-# It is possible to get incomplete recovery files, if the editor crashes
-# at the right time.
-virecovery=`echo $RECDIR/recover.*`
-if [ "$virecovery" != "$RECDIR/recover.*" ]; then
- for i in $virecovery; do
- # Only test files that are readable.
- if test ! -r $i; then
- continue
- fi
-
- # Delete any recovery files that are zero length, corrupted,
- # or that have no corresponding backup file. Else send mail
- # to the user.
- recfile=`awk '/^X-vi-recover-path:/{print $2}' < $i`
- if test -n "$recfile" -a -s "$recfile"; then
- $SENDMAIL -t < $i
- else
- rm $i
- fi
- done
-fi
diff --git a/usr.bin/vi/vi/v_txt.c b/usr.bin/vi/vi/v_txt.c
index b5cb4e4e0d5..18b837a174d 100644
--- a/usr.bin/vi/vi/v_txt.c
+++ b/usr.bin/vi/vi/v_txt.c
@@ -10,7 +10,7 @@
#include "config.h"
#ifndef lint
-static const char sccsid[] = "@(#)v_txt.c 10.79 (Berkeley) 8/11/96";
+static const char sccsid[] = "@(#)v_txt.c 10.80 (Berkeley) 8/13/96";
#endif /* not lint */
#include <sys/types.h>
@@ -2111,8 +2111,8 @@ retry: for (len = 0,
/* Shift remaining text up, and move the cursor to the end. */
if (nlen) {
- BINC_RET(sp, tp->lb, tp->lb_len, tp->len + nlen);
off = p - tp->lb;
+ BINC_RET(sp, tp->lb, tp->lb_len, tp->len + nlen);
p = tp->lb + off;
tp->cno += nlen;
@@ -2126,11 +2126,10 @@ retry: for (len = 0,
/* If a single match and it's a directory, retry it. */
if (argc == 1 && !stat(cmd.argv[0]->bp, &sb) && S_ISDIR(sb.st_mode)) {
-isdir: off = p - tp->lb;
- p = tp->lb + off;
-
- if (tp->owrite == 0) {
+isdir: if (tp->owrite == 0) {
+ off = p - tp->lb;
BINC_RET(sp, tp->lb, tp->lb_len, tp->len + 1);
+ p = tp->lb + off;
if (tp->insert != 0)
(void)memmove(p + 1, p, tp->insert);
++tp->len;
diff --git a/usr.bin/vi/vi/vi.c b/usr.bin/vi/vi/vi.c
index e8592a4f729..f5befc138ab 100644
--- a/usr.bin/vi/vi/vi.c
+++ b/usr.bin/vi/vi/vi.c
@@ -10,7 +10,7 @@
#include "config.h"
#ifndef lint
-static const char sccsid[] = "@(#)vi.c 10.53 (Berkeley) 8/11/96";
+static const char sccsid[] = "@(#)vi.c 10.55 (Berkeley) 8/17/96";
#endif /* not lint */
#include <sys/types.h>
@@ -70,7 +70,6 @@ vi(spp)
SCR *next, *sp;
VICMD cmd, *vp;
VI_PRIVATE *vip;
- u_int flags;
int comcount, mapped, rval;
/* Get the first screen. */
@@ -379,10 +378,9 @@ intr: CLR_INTERRUPT(sp);
/*
* If the current screen is still displayed, it will
- * want a new status line.
+ * need a new status line.
*/
- if (F_ISSET(sp, SC_STATUS) && vs_resolve(sp, 0))
- goto ret;
+ F_SET(sp, SC_STATUS);
/* Switch screens, change focus. */
sp = sp->nextdisp;
diff --git a/usr.bin/vi/vi/vs_msg.c b/usr.bin/vi/vi/vs_msg.c
index adc7efb37c6..881a1c9e8dd 100644
--- a/usr.bin/vi/vi/vs_msg.c
+++ b/usr.bin/vi/vi/vs_msg.c
@@ -10,7 +10,7 @@
#include "config.h"
#ifndef lint
-static const char sccsid[] = "@(#)vs_msg.c 10.73 (Berkeley) 6/28/96";
+static const char sccsid[] = "@(#)vs_msg.c 10.75 (Berkeley) 8/17/96";
#endif /* not lint */
#include <sys/types.h>
@@ -40,7 +40,6 @@ typedef enum {
static void vs_divider __P((SCR *));
static void vs_msgsave __P((SCR *, mtype_t, char *, size_t));
static void vs_output __P((SCR *, mtype_t, const char *, int));
-static int vs_scr_resolve __P((SCR *, int));
static void vs_scroll __P((SCR *, int *, sw_t));
static void vs_wait __P((SCR *, int *, sw_t));
@@ -572,7 +571,7 @@ vs_ex_resolve(sp, continuep)
return (0);
}
- /* Clear the required wait flag -- we're going to wait. */
+ /* Clear the required wait flag, it's no longer needed. */
F_CLR(sp, SC_EX_WAIT_YES);
/*
@@ -645,39 +644,16 @@ vs_ex_resolve(sp, continuep)
/*
* vs_resolve --
- * Cycle through each screen, dealing with message output.
+ * Deal with message output.
*
* This routine is called from the main vi loop to periodically ensure that
* the user has seen any messages that have been displayed.
- *
- * PUBLIC: int vs_resolve __P((SCR *, int));
*/
int
vs_resolve(sp, forcewait)
SCR *sp;
int forcewait;
{
- SCR *tsp;
-
- for (tsp = sp->gp->dq.cqh_first;
- tsp != (void *)&sp->gp->dq; tsp = tsp->q.cqe_next)
- if (vs_scr_resolve(tsp, forcewait))
- return (1);
- return (0);
-}
-
-/*
- * vs_scr_resolve --
- * Deal with message output.
- *
- * This routine is called from the main vi loop to periodically ensure that
- * the user has seen any messages that have been displayed.
- */
-static int
-vs_scr_resolve(sp, forcewait)
- SCR *sp;
- int forcewait;
-{
EVENT ev;
GS *gp;
MSGS *mp;
diff --git a/usr.bin/vi/vi/vs_refresh.c b/usr.bin/vi/vi/vs_refresh.c
index 604fabc50e5..e4c5e9247a7 100644
--- a/usr.bin/vi/vi/vs_refresh.c
+++ b/usr.bin/vi/vi/vs_refresh.c
@@ -10,7 +10,7 @@
#include "config.h"
#ifndef lint
-static const char sccsid[] = "@(#)vs_refresh.c 10.37 (Berkeley) 6/12/96";
+static const char sccsid[] = "@(#)vs_refresh.c 10.39 (Berkeley) 8/17/96";
#endif /* not lint */
#include <sys/types.h>
@@ -73,16 +73,32 @@ vs_refresh(sp, forcepaint)
* 1: Refresh the screen.
*
* If SC_SCR_REDRAW is set in the current screen, repaint everything
- * that we can find.
+ * that we can find, including status lines.
*/
if (F_ISSET(sp, SC_SCR_REDRAW))
for (tsp = sp->gp->dq.cqh_first;
tsp != (void *)&sp->gp->dq; tsp = tsp->q.cqe_next)
if (tsp != sp)
- F_SET(tsp, SC_SCR_REDRAW);
+ F_SET(tsp, SC_SCR_REDRAW | SC_STATUS);
/*
- * 2: Related or dirtied screens, or screens with messages.
+ * 2: Paint any missing status lines.
+ *
+ * XXX
+ * This is fairly evil. Status lines are written using the vi message
+ * mechanism, since we have no idea how long they are. Since we may be
+ * painting screens other than the current one, we don't want want to
+ * make the user wait. We depend heavily on there not being any other
+ * lines currently waiting to be displayed and the message truncation
+ * code in the msgq_status routine working.
+ */
+ for (tsp = sp->gp->dq.cqh_first;
+ tsp != (void *)&sp->gp->dq; tsp = tsp->q.cqe_next)
+ if (F_ISSET(tsp, SC_STATUS))
+ vs_resolve(tsp, 0);
+
+ /*
+ * 3: Related or dirtied screens, or screens with messages.
*
* If related screens share a view into a file, they may have been
* modified as well. Refresh any screens that aren't exiting that
@@ -106,7 +122,7 @@ vs_refresh(sp, forcepaint)
}
/*
- * 3: Refresh the current screen.
+ * 4: Refresh the current screen.
*
* Always refresh the current screen, it may be a cursor movement.
* Also, always do it last -- that way, SC_SCR_REDRAW can be set
@@ -158,7 +174,7 @@ vs_paint(sp, flags)
didpaint = leftright_warp = 0;
/*
- * 4: Reformat the lines.
+ * 5: Reformat the lines.
*
* If the lines themselves have changed (:set list, for example),
* fill in the map from scratch. Adjust the screen that's being
@@ -183,12 +199,12 @@ vs_paint(sp, flags)
}
/*
- * 5: Line movement.
+ * 6: Line movement.
*
* Line changes can cause the top line to change as well. As
* before, if the movement is large, the screen is repainted.
*
- * 5a: Small screens.
+ * 6a: Small screens.
*
* Users can use the window, w300, w1200 and w9600 options to make
* the screen artificially small. The behavior of these options
@@ -259,7 +275,7 @@ small_fill: (void)gp->scr_move(sp, LASTLINE(sp), 0);
}
/*
- * 5b: Line down, or current screen.
+ * 6b: Line down, or current screen.
*/
if (LNO >= HMAP->lno) {
/* Current screen. */
@@ -285,7 +301,7 @@ small_fill: (void)gp->scr_move(sp, LASTLINE(sp), 0);
}
/*
- * 5c: If not on the current screen, may request center or top.
+ * 6c: If not on the current screen, may request center or top.
*/
if (F_ISSET(sp, SC_SCR_TOP))
goto top;
@@ -293,7 +309,7 @@ small_fill: (void)gp->scr_move(sp, LASTLINE(sp), 0);
goto middle;
/*
- * 5d: Line up.
+ * 6d: Line up.
*/
lcnt = vs_sm_nlines(sp, HMAP, LNO, HALFTEXT(sp));
if (lcnt < HALFTEXT(sp)) {
@@ -401,7 +417,7 @@ adjust: if (!O_ISSET(sp, O_LEFTRIGHT) &&
}
/*
- * 6: Cursor movements (current screen only).
+ * 7: Cursor movements (current screen only).
*/
if (!LF_ISSET(UPDATE_CURSOR))
goto number;
@@ -455,7 +471,7 @@ adjust: if (!O_ISSET(sp, O_LEFTRIGHT) &&
*/
if (CNO < OCNO) {
/*
- * 6a: Cursor moved left.
+ * 7a: Cursor moved left.
*
* Point to the old character. The old cursor position can
* be past EOL if, for example, we just deleted the rest of
@@ -507,7 +523,7 @@ adjust: if (!O_ISSET(sp, O_LEFTRIGHT) &&
SCNO -= cwtotal;
} else {
/*
- * 6b: Cursor moved right.
+ * 7b: Cursor moved right.
*
* Point to the first character to the right.
*/
@@ -538,7 +554,7 @@ adjust: if (!O_ISSET(sp, O_LEFTRIGHT) &&
}
/*
- * 6c: Fast cursor update.
+ * 7c: Fast cursor update.
*
* We have the current column, retrieve the current row.
*/
@@ -546,14 +562,14 @@ fast: (void)gp->scr_cursor(sp, &y, &notused);
goto done_cursor;
/*
- * 6d: Slow cursor update.
+ * 7d: Slow cursor update.
*
* Walk through the map and find the current line.
*/
slow: for (smp = HMAP; smp->lno != LNO; ++smp);
/*
- * 6e: Leftright scrolling adjustment.
+ * 7e: Leftright scrolling adjustment.
*
* If doing left-right scrolling and the cursor movement has changed
* the displayed screen, scroll the screen left or right, unless we're
@@ -625,7 +641,7 @@ slow: for (smp = HMAP; smp->lno != LNO; ++smp);
goto done_cursor;
/*
- * 7: Repaint the entire screen.
+ * 8: Repaint the entire screen.
*
* Lost big, do what you have to do. We flush the cache, since
* SC_SCR_REDRAW gets set when the screen isn't worth fixing, and
@@ -663,13 +679,13 @@ done_cursor:
#endif
/*
- * 8: Set the remembered cursor values.
+ * 9: Set the remembered cursor values.
*/
OCNO = CNO;
OLNO = LNO;
/*
- * 9: Repaint the line numbers.
+ * 10: Repaint the line numbers.
*
* If O_NUMBER is set and the VIP_N_RENUMBER bit is set, and we
* didn't repaint the screen, repaint all of the line numbers,
@@ -680,7 +696,7 @@ number: if (O_ISSET(sp, O_NUMBER) &&
return (1);
/*
- * 10: Update the mode line, position the cursor, and flush changes.
+ * 11: Update the mode line, position the cursor, and flush changes.
*
* If we warped the screen, we have to refresh everything.
*/
@@ -709,7 +725,7 @@ number: if (O_ISSET(sp, O_NUMBER) &&
if (LF_ISSET(UPDATE_SCREEN))
(void)gp->scr_refresh(sp, F_ISSET(vip, VIP_N_EX_PAINT));
- /* 11: Clear the flags that are handled by this routine. */
+ /* 12: Clear the flags that are handled by this routine. */
F_CLR(sp, SC_SCR_CENTER | SC_SCR_REDRAW | SC_SCR_REFORMAT | SC_SCR_TOP);
F_CLR(vip, VIP_CUR_INVALID |
VIP_N_EX_PAINT | VIP_N_REFRESH | VIP_N_RENUMBER | VIP_S_MODELINE);
@@ -741,6 +757,7 @@ vs_modeline(sp)
GS *gp;
size_t cols, curcol, curlen, endpoint, len, midpoint;
const char *t;
+ int ellipsis;
char *p, buf[20];
gp = sp->gp;
@@ -755,32 +772,44 @@ vs_modeline(sp)
* Leave the last character blank, in case it's a really dumb terminal
* with hardware scroll. Second, don't paint the last character in the
* screen, SunOS 4.1.1 and Ultrix 4.2 curses won't let you.
+ *
+ * Move to the last line on the screen.
*/
- cols = sp->cols - 1;
+ (void)gp->scr_move(sp, LASTLINE(sp), 0);
+ /* If more than one screen in the display, show the file name. */
curlen = 0;
- for (p = sp->frp->name; *p != '\0'; ++p);
- while (--p > sp->frp->name) {
- if (*p == '/') {
- ++p;
- break;
+ if (IS_SPLIT(sp)) {
+ for (p = sp->frp->name; *p != '\0'; ++p);
+ for (ellipsis = 0, cols = sp->cols / 2; --p > sp->frp->name;) {
+ if (*p == '/') {
+ ++p;
+ break;
+ }
+ if ((curlen += KEY_LEN(sp, *p)) > cols) {
+ ellipsis = 3;
+ curlen +=
+ KEY_LEN(sp, '.') * 3 + KEY_LEN(sp, ' ');
+ while (curlen > cols) {
+ ++p;
+ curlen -= KEY_LEN(sp, *p);
+ }
+ break;
+ }
}
- if ((curlen += KEY_LEN(sp, *p)) > cols) {
- curlen -= KEY_LEN(sp, *p);
- ++p;
- break;
+ if (ellipsis) {
+ while (ellipsis--)
+ (void)gp->scr_addstr(sp,
+ KEY_NAME(sp, '.'), KEY_LEN(sp, '.'));
+ (void)gp->scr_addstr(sp,
+ KEY_NAME(sp, ' '), KEY_LEN(sp, ' '));
}
- }
-
- /*
- * Move to the last line on the screen. If more than one screen in
- * the display, show the file name. Clear the rest of the line.
- */
- (void)gp->scr_move(sp, LASTLINE(sp), 0);
- if (IS_SPLIT(sp))
for (; *p != '\0'; ++p)
(void)gp->scr_addstr(sp,
KEY_NAME(sp, *p), KEY_LEN(sp, *p));
+ }
+
+ /* Clear the rest of the line. */
(void)gp->scr_clrtoeol(sp);
/*
@@ -794,9 +823,11 @@ vs_modeline(sp)
* Assume that numbers, commas, and spaces only take up a single
* column on the screen.
*/
+ cols = sp->cols - 1;
if (O_ISSET(sp, O_RULER)) {
vs_column(sp, &curcol);
- len = snprintf(buf, sizeof(buf), "%lu,%lu", sp->lno, curcol + 1);
+ len =
+ snprintf(buf, sizeof(buf), "%lu,%lu", sp->lno, curcol + 1);
midpoint = (cols - ((len + 1) / 2)) / 2;
if (curlen < midpoint) {