#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 12 (of 13)."
# Contents:  stevie/stevie.mm
# Wrapped by thor@surt on Fri Oct 16 09:43:48 1992
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'stevie/stevie.mm' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'stevie/stevie.mm'\"
else
echo shar: Extracting \"'stevie/stevie.mm'\" \(25953 characters\)
sed "s/^X//" >'stevie/stevie.mm' <<'END_OF_FILE'
X.\" $Header: /nw/tony/src/stevie/src/RCS/stevie.mm,v 3.69 89/08/13 11:44:04 tony Exp $
X.\"
X.\" Documentation for STEVIE. Process with nroff using the mm macros.
X.\"
X.nr Hu 1
X.SA 1
X.TL
XSTEVIE - An Aspiring VI Clone
X.sp
XUser Reference - 3.69a
X.AU "Tony Andrews"
X.AF ""
X.MT 4
X.PH "'STEVIE''User Reference'"
X.PF "''- \\\\nP -''"
X.H 1 "Overview"
XSTEVIE is an editor designed to mimic the interface of the UNIX
Xeditor 'vi'. The name (ST Editor for VI Enthusiasts) comes from the fact that
Xthe editor was first written for the Atari ST. The current version also supports
XUNIX, Minix (ST), MS-DOS, and OS/2, but I've left
Xthe name intact for now.
X.P
XThis program is the result of many late nights of hacking over the last
Xcouple of years.
XThe first version was written by Tim Thompson and posted
Xto USENET. From there, I reworked the data structures completely, added
XLOTS of features, and generally improved the overall performance in the
Xprocess.
X.P
XI've labelled STEVIE an 'aspiring' vi clone as a warning to those who
Xmay expect too much. On the whole, the editor is pretty complete.
XNearly all of the visual mode commands are supported.
XAnd several of the more important 'ex' commands are supported as well.
XI've tried hard to
Xcapture the feel of vi by getting the little things right.
XMaking lines
Xwrap correctly, supporting true operators, and even getting the cursor to
Xland on the right place for tabs are all a pain, but really help make
Xthe editor feel right.
XI've tried to resist the temptation to deviate from the behavior
Xof vi, even where I disagree with the original design.
X.P
XThe biggest problem remaining has to do with the fact that the edit buffer
Xis maintained entirely in memory, limiting the size of files that can
Xbe edited in some environments.
XOther missing features include named buffers and macros.
XPerformance is generally reasonable, although the screen update code
Xcould be more efficient.
XThis is generally only visible on fairly slow systems.
X.P
XSTEVIE may be freely distributed. The source isn't copyrighted or
Xrestricted in any way. If you pass the program along, please include all
Xthe documentation and, if practical, the source as well. I'm not fanatical
Xabout this, but I tried to make STEVIE fairly portable and I'd like to
Xsee as many people have access to the source as possible.
X.P
XThe remainder of this document describes the operation of the editor.
XThis is intended as a reference for users already familiar with the real
Xvi editor.
X.H 1 "Starting the Editor"
XThe following command line forms are supported:
X.VL 20
X.LI "stevie [file ...]"
XEdit the specified file(s)
X.LI "stevie -t tag"
XStart at the location of the given tag
X.LI "stevie + file"
XEdit file starting at end
X.LI "stevie +n file"
XEdit file starting a line number 'n'
X.LI "stevie +/pat file"
XEdit file starting at pattern 'pat'
X.LE
X.P
XIf multiple files are given on the command line (using the first form),
Xthe ":n" command goes to the next file, ":N" goes backward in the list,
Xand ":rew" can be used to rewind back to the start of the file list.
X.H 1 "Set Command Options"
XThe ":set" command works as usual to set parameters. Each parameter has
Xa long and an abbreviated name, either of which may be used. Boolean
Xparameters are set as in:
X.sp
X.ti +5
Xset showmatch
X.sp
Xor cleared by:
X.sp
X.ti +5
Xset noshowmatch
X.sp
XNumeric parameters are set as in:
X.sp
X.ti +5
Xset scroll=5
X.sp
XSeveral parameters may be set with a single command:
X.sp
X.ti +5
Xset novb sm report=1
X.P
XTo see the status of all parameters use ":set all". Typing ":set" with
Xno arguments will show only those parameters that have been changed.
XThe supported parameters, their names, abbreviations, defaults,
Xand descriptions are shown below:
X.VL 12
X.LI autoindent
XShort: ai, Default: noai, Type: Boolean
X.br
XWhen in insert mode, start new lines at the same column as the prior
Xline. Unlike vi, you can backspace over the indentation.
X.LI backup
XShort: bk, Default: nobk, Type: Boolean
X.br
XLeave a backup on file writes.
X(During file writes, a backup is always kept for
Xsafety anyway, until the write is completed.
XAt that point, the 'backup' parameter
Xdetermines whether the backup file is deleted.)
X.LI color
XShort: co, Default: system-dependent, Type: Numeric
X.br
XChange the screen color (video attributes).
XThere is a system-dependent mapping between numbers and colors.
X(For instance, in MSDOS we use the BIOS-type attributes for
XCGA or monochrome screens in alphanumeric mode.)
X.LI errorbells
XShort: eb, Default: noeb, Type: Boolean
X.br
XRing bell when error messages are shown.
X.LI ignorecase
XShort: ic, Default: noic, Type: Boolean
X.br
XIgnore case in string searches.
X.LI lines
XShort: lines, Default: lines=25, Type: Numeric
X.br
XNumber of physical lines on the screen. The default value
Xand possible settings depend on the host machine.
XThe default value is 25 on most systems.
X.LI list
XShort: list, Default: nolist, Type: Boolean
X.br
XShow tabs and newlines graphically.
X.LI modelines
XShort: ml, Default: noml, Type: Boolean
X.br
XEnable processing of modelines in files.
X.LI number
XShort: nu, Default: nonu, Type: Boolean
X.br
XDisplay lines on the screen with their line numbers.
X.LI report
XShort: report, Default: report=5, Type: Numeric
X.br
XMinimum number of lines to report operations on.
X.LI return
XShort: cr, Default: cr, Type: Boolean
X.br
XEnd lines with cr-lf when writing files.
X.LI scroll
XShort: scroll, Default: scroll=12, Type: Numeric
X.br
XNumber of lines to scroll for ^D & ^U.
X.LI showmatch
XShort: sm, Default: nosm, Type: Boolean
X.br
XWhen a ), }, or ] is typed, show the matching (, {, or [ if
Xit's on the current screen by moving the cursor there briefly.
X.LI showmode
XShort: mo, Default: nomo, Type: Boolean
X.br
XShow on status line when in insert mode.
X.LI tabstop
XShort: ts, Default: ts=8, Type: Numeric
X.br
XNumber of spaces in a tab.
X.LI tagstack
XShort: tg, Default: notg, Type: Boolean
X.br
XIf set, the tag command :ta is "stacked";
Xthat is, the place from which it was called is pushed onto a stack.
XA new command ":untag" goes back to that place, and pops the tag stack.
X.LI terse
XShort: terse, Default: noterse, Type: Boolean
X.br
XThis option is currently ignored.
XIt is provided only for compatibility with vi.
X.LI tildeop
XShort: to, Default: noto, Type: Boolean
X.br
XIf set, tilde is an operator. Otherwise, tilde acts as normal.
X.LI wrapscan
XShort: ws, Default: ws, Type: Boolean
X.br
XString searches wrap around the ends of the file.
X.LI vbell
XShort: vb, Default: vb, Type: Boolean
X.br
XUse a visual bell, if possible. (novb for audible bell)
X.LE
X.P
XThe EXINIT environment variable can be used to modify the default values
Xon startup as in:
X.sp
X.ti +5
Xsetenv EXINIT="set sm ts=4"
X.P
XIn environments (e.g. OS/2 or TOS) where lines are normally terminated by
XCR-LF, the 'return' parameter allows files to be written with only a LF
Xterminator (if the parameter is cleared).
XThis parameter is ignored on UNIX systems.
X.P
XThe 'lines' parameter tells the editor how many lines there are on the screen.
XThis is useful on systems like the ST (or OS/2 machines with an EGA adapter)
Xwhere various screen resolutions may be
Xused. By using the 'lines' parameter, different screen sizes can be easily
Xhandled.
X.H 1 "Colon Commands"
XSeveral of the normal 'vi' colon commands are supported by STEVIE.
XSome commands may be preceded by a
Xline range specification.
XFor commands that accept a range of lines,
Xthe following address forms are supported:
X.DS 1
Xaddr
Xaddr + number
Xaddr - number
X.DE
Xwhere 'addr' may be one of the following:
X.DS 1
Xa line number
Xa mark (as in 'a or 'b)
X\'.' (the current line)
X\'$' (the last line)
X.DE
X.P
XAn address range of "%" is accepted as an abbreviation of "1,$".
X.H 2 "Mode Lines"
XMode lines are a little-known, but often useful, feature of vi.
XTo use this feature, special strings are placed in the first or
Xlast five lines in a file.
XWhen the file is edited, these strings are detected and processed
Xas though typed as a colon command.
XOne instance where this can be useful is to set the "tabstop"
Xparameter on a per-file basis.
XThe following are examples of mode lines:
X.DS 1
Xvi:set ts=4 noai:
Xex:45:
X.DE
X.P
XMode lines are characterized by the string "vi" or "ex" followed
Xby a command surrounded by colons. Other text may appear on the
Xline, and multiple mode lines may be present. No guarantee is
Xmade regarding the order in which multiple mode lines will be
Xprocessed.
X.P
XThe processing of mode lines is enabled by setting the "ml"
Xparameter. This should be done in the "EXINIT" environment
Xvariable, so that mode line processing is enabled as soon
Xas the editor begins.
XBy default, mode lines are disabled for security reasons.
X.H 2 "The Global Command"
XA limited form of the global command is supported, accepting the
Xfollowing command form:
X.DS 1
Xg/pattern/X
X.DE
Xwhere X may be either 'd' or 'p' to delete or print lines that match
Xthe given pattern.
XIf a line range is given, only those lines are checked for a match
Xwith the pattern.
XIf no range is given, all lines are checked.
X.P
XIf the trailing command character is omitted, 'p' is assumed.
XIn this case, the trailing slash is also optional.
XThe current version of the editor does not support the undo operation
Xfollowing the deletion of lines with the global command.
X.H 2 "The Substitute Command"
XThe substitute command provides a powerful mechanism for making more
Xcomplex substitutions than can be done directly from visual mode.
XThe general form of the command is:
X.DS 1
Xs/pattern/replacement/g
X.DE
XEach line in the given range (or the current line, if no range was
Xgiven) is scanned for the given regular expression.
XWhen found, the string that matched the pattern is replaced with
Xthe given replacement string.
XIf the replacement string is null, each matching pattern string is
Xdeleted.
X.P
XThe trailing 'g' is optional and, if present, indicates that multiple
Xoccurrences of 'pattern' on a line should all be replaced.
X.P
XSome special sequences are recognized in the replacement string. The
Xampersand character is replaced by the entire pattern that was matched.
XFor example, the following command could be used to put all occurrences
Xof 'foo' or 'bar' within double quotes:
X.DS 1
X1,$s/foo|bar/"&"/g
X.DE
X.P
XThe special sequence "\\n" where 'n' is a digit from 1 to 9, is replaced
Xby the string the matched the corresponding parenthesized expression in
Xthe pattern. The following command could be used to swap the first two
Xparameters in calls to the C function "foo":
X.DS 1
X1,$s/foo\\\\(([^,]*),([^,]*),/foo(\\\\2,\\\\1,/g
X.DE
X.P
XLike the global command, substitutions can't be undone with this
Xversion of the editor.
X.H 2 "File Manipulation Commands"
XThe following table shows the supported file manipulation commands as
Xwell as some other 'ex' commands that aren't described elsewhere:
X.DS CB
X:w		write the current file
X:wq		write and quit
X:x		write (if necessary) and quit
XZZ		same as ":x"
X
X:e file		edit the named file
X:e!		re-edit the current file, discarding changes
X:e #		edit the alternate file
X
X:w file		write the buffer to the named file
X:x,yw file	write lines x through y to the named file
X:r file		read the named file into the buffer
X
X:n		edit the next file
X:N		edit the previous file
X:rew		rewind the file list
X
X:f		show the current file name
X:f name		change the current file name
X:x=		show the line number of address 'x'
X
X:ta tag		go to the named tag
X^]		like ":ta" using the current word as the tag
X:untag		go back to place from which ":ta" was called
X
X:help		display a command summary
X:ve		show the version number
X
X:sh		run an interactive shell
X:!cmd		run a command
X.DE
X.P
XThe commands above work pretty much like they do in 'vi'. Most of the
Xcommands support a '!' suffix (if appropriate) to discard any pending
Xchanges.
X.H 1 Help Facility
XThe ":help" command can also be invoked with the <HELP> key on the Atari
XST and the F1 key on MSDOS and OS/2 PCs.
XThis actually displays a pretty complete summary of the real vi with
Xunsupported features indicated appropriately.
XCertain features controlled by "set" parameters will have varied displays
Xon the Help screens, to correspond to the current
Xsetting of their parameters.
X.P
XThe help screens (there are multiple screens) can be traversed
Xusing "reasonable" keystrokes.  For instance, any key that would take you
X"down" in the vi editor, will take you to the next help screen in
Xthe help facility.  Similarly, "up" commands will take you to
Xthe previous screen. 
XThe screens are numbered, and any numeric key will take you to
Xthe corresponding screen.
XThe first screen (screen 0) is a table of contents for the
Xhelp screens.
X.H 1 "String Searches"
XString searches are supported, as in vi, accepting the usual regular
Xexpression syntax. This was done using a modified form of
XHenry Spencer's regular expression
Xlibrary. I added code outside the library to support
Xthe '\\<' and '\\>' extensions.
XThe parameter "ignorecase" can be set to ignore case in all string searches.
X.H 1 "Operators"
XThe vi operators (d, c, y, !, <, and >) work as true operators.
XThe tilde command may also be used as an operator if the parameter "tildeop"
Xhas been set. By default, this parameter is not set.
X.H 1 "Tags"
XTags are implemented and a fairly simple version of 'ctags' is supplied
Xwith the editor. The current version of ctags will find functions and
Xmacros following a specific (but common) form.  See 'ctags.doc' for a
Xcomplete discussion.
X.P
XA non-standard but useful variant of tags is the "stacking" of calls to
Xthe ':ta' command.
XWhen tag-stacking is enabled (with ':set tg'), stevie remembers
X(and stacks) the position from which any tag call is made.
XIn this mode, a new ':untag' command returns to the remembered position
Xand pops the stack.
XAlso while in the tagstack mode, the Ctrl-^ keystroke has a somewhat
Xdifferent effect.  Before it switches to edit the alternate file
X(its normal function), it checks to see if the tag stack is empty,
Xand does an ':untag' if not empty.
X.H 1 "System-Specific Comments"
XThe following sections provide additional relevant information for the
Xsystems to which STEVIE has been ported.
X(WARNING: If you compile Stevie for, or port Stevie to,
Xyour favorite environment, don't forget to edit ENV.H
Xto correspond to the target environment.)
X.H 2 "Atari ST"
X.H 3 "TOS"
XThe editor has been tested in all three resolutions, although low and
Xhigh res. are less tested than medium. The 50-line high res. mode can
Xbe used by setting the 'lines' parameter to 50. Alternatively, the
Xenvironment variable 'LINES' can be set. The editor doesn't actively
Xset the number of lines on the screen. It just operates using the number
Xof lines it was told.
X.P
XThe arrow keys, as well as the <INSERT>, <HELP>, and <UNDO> keys are
Xall mapped appropriately.
X.H 3 "Minix"
XThe editor is pretty much the same under Minix, but many of the
Xkeyboard mappings aren't yet supported.
X.H 2 "UNIX"
XThe editor has been ported to UNIX System V release 3 as well as 4.2 BSD.
XThis was done
Xmainly to get some profiling data so I haven't put much effort into
Xdoing the UNIX version right.
XWhile the termcap routines are supported, the editor is still fairly
Xpicky about the capabilities it wants and makes little effort to
Xdo clever things with less intelligent terminals.
X.H 2 "OS/2"
XThis port was done because the editor that comes with the OS/2 developer's
Xkit really stinks. Make sure 'ansi' mode is on (using the 'ansi' command).
XThe OS/2 console driver doesn't support insert/delete line, so STEVIE
Xbypasses the driver and makes the appropriate system calls directly.
XThis is all done in the system-specific part of the editor so the kludge
Xis at least localized.
X.P
XThe arrow keys, page up/down and home/end all do what
Xyou'd expect. The function keys are hard-coded to some useful macros until
XI can get true support for macros into the editor. The current mappings
Xare:
X.DS 1
XF1    Help
XF2    Next file (:n)             \h'|3.3i'Shift-F2  discard changes (:n!)
XF3    Previous file (:N)         \h'|3.3i'Shift-F3  discard changes (:N!)
XF4    Alternate file (:e #)      \h'|3.3i'Shift-F4  discard changes (:e! #)
XF5    Rewind file list (:rew)    \h'|3.3i'Shift-F5  discard changes (:rew!)
XF6    Next function (]])         \h'|3.3i'Shift-F6  Prev. function ([[)
XF8    Global subst. (:1,$s/)
XF9    Convert cdecl to English   \h'|3.3i'Shift-F9  Convert English to cdecl
XF10   Save & quit (:x)           \h'|3.3i'Shift-F10 discard changes (:q!)
X.DE
X.P
XFunction keys F9 and Shift-F9 assume the presence of the cdecl program.
X.H 2 "MSDOS"
XSTEVIE has been ported to MSDOS 3.3 using
X(1) the Microsoft C compiler, version 5.1, and
X(2) the Borland Turbo C compiler, version 2.0.
X.P
XThe keyboard mappings are the same as for OS/2.
XThe only problem with the PC version is that the inefficiency of
Xthe screen update code becomes painfully apparent on slower machines.
X(In Rev 3.69a, there are a couple of ways in which screen I/O
Xis significantly speeded up.)
X.P
XThere are two DOS versions:
Xone that uses an extended console driver,
Xand another that uses the BIOS directly.
XThe extended-console-driver version works well with "nansi.sys",
Xwhich is widely available shareware.
XIt does not work well with the "ANSI.SYS" driver included as part of
XMSDOS (at least through the 3.30 version).
XIn order to be independent of the console driver,
Xyou may compile with BIOS #defined;
Xthis uses the BIOS as the exclusive screen I/O mechanism.
X(Note that it is somewhat slower than nansi.sys.)
X.P
XThe color settings are the video attributes for the alphanumeric modes
Xof the CGA and monochrome displays.
XWhile these make most sense in binary or hex, they must be entered
Xin decimal.  The reference table below gives a few common values:
X.DS 1
X07    White on black          Initial default
X23    White on blue
X30    Bright yellow on blue   My favorite
X.DE
X.H 1 "Missing Features"
X.AL
X.LI
XThe ability to edit files larger than the available memory.
XThis isn't a problem on the machines I use, but it hits the
XMinix-PC people pretty hard.
X.LI
XMacros with support for function keys.
X.LI
XMore "set" options.
X.LI
XMany others...
X.LE
X.H 1 "Known Bugs and Problems"
X.AL
X.LI
XThe yank buffer uses statically allocated memory, so large yanks
Xwill fail. If a delete spans an area larger than the yank buffer,
Xthe program asks
Xfor confirmation before proceeding. That way, if you were moving text,
Xyou don't get screwed by the limited yank buffer. You just have to move
Xsmaller chunks at a time. All the internal buffers (yank, redo, etc.)
Xneed to be reworked to allocate memory dynamically. The 'undo' buffer
Xis now dynamically allocated, so any change can be undone.
X.LI
XIf you stay in insert mode for a long time, the insert buffer can overflow.
XThe editor will print a message and dump you back into command mode.
X.LI
XThe current version of the substitute and global commands
X(i.e. ":s/foo/bar" or ":g/foo/d") can't
Xbe undone.
XThis is due to the current design of the undo code.
XTo undo these
Xcommands would generally involve unreasonable amounts of memory.
X.LI
XSeveral other less bothersome glitches...
X.LE
X.SK
X.H 1 "Conclusion"
XThe editor has reached a pretty stable state, and performs well on
Xthe systems I use it on, so I'm pretty much in maintenance mode now.
XThere's still plenty to be done; the screen update code is still pretty
Xinefficient and the yank/put code is still primitive.
XI'm still interested in bug reports, and I do still add a new feature
Xfrom time to time, but the rate of change is way down now.
X.P
XI'd like to thank Tim Thompson for writing the original version of the
Xeditor. His program was well structured and quite readable. Thanks for
Xgiving me a good base to work with.
XThanks also to many users of STEVIE who have sent in their changes.
XMany of the changes I've received aren't portable to all the systems
XI support, but I'm working to get portable implementations integrated
Xinto the editor where possible.
X.P
XIf you're reading this file, but didn't get the source code for STEVIE,
Xit can be had by sending a disk with return postage to the address given
Xbelow. I can write disks for the Atari ST (SS or DS) or MSDOS (360K or
X1.2M). Please be sure to include the return postage. I don't intend to
Xmake money from this program, but I don't want to lose any either.
X.DS 1
XTony Andrews		UUCP: onecom!wldrdg!tony
X5902E Gunbarrel Ave.
XBoulder, CO 80301
X.DE
X.DS 1
X3.69a Additions from
XDave Tutelman           UUCP: pegasus.att.com!dmt
XLarry Shurr (The BIOS implementation)
X.DE
X.SK
X.HU "Character Function Summary"
XThe following list describes the meaning of each character that's used
Xby the editor. In some cases characters have meaning in both command and
Xinsert mode; these are all described.
X.SP 2
X.VL 8
X.LI ^@
XThe null character. Not used in any mode. This character may not
Xbe present in the file, as is the case with vi.
X.LI ^B
XBackward one screen.
X.LI ^D
XScroll the window down one half screen.
X.LI ^E
XScroll the screen up one line.
X.LI ^F
XForward one screen.
X.LI ^G
XSame as ":f" command. Displays file information.
X.LI ^H
X(Backspace) Moves cursor left one space in command mode.
XIn insert mode, erases the last character typed.
X.LI ^J
XMove the cursor down one line.
X.LI ^L
XClear and redraw the screen.
X.LI ^M
X(Carriage return) Move to the first non-white character
Xin the next line. In insert mode, a carriage return opens a new
Xline for input.
X.LI ^N
XMove the cursor down a line.
X.LI ^P
XMove the cursor up a line.
X.LI ^U
XScroll the window up one half screen.
X.LI ^Y
XScroll the screen down one line.
X.LI ^[
XEscape cancels a pending command in command mode, and is used to
Xterminate insert mode.
X.LI ^]
XMoves to the tag whose name is given by the word in which the cursor
Xresides.
X.LI ^`
XSame as ":e #" if supported (system-dependent).
X.LI SPACE
XMove the cursor right on column.
X.LI !
XThe filter operator always operates on a range of lines, passing the
Xlines as input to a program, and replacing them with the output of the
Xprogram. The shorthand command "!!" can be used to filter a number of
Xlines (specified by a preceding count). The command "!" is replaced
Xby the last command used, so "!!!<RETURN>" runs the given number of
Xlines through the last specified command.
X.LI $
XMove to the end of the current line.
X.LI %
XIf the cursor rests on a paren '()', brace '{}', or bracket '[]',
Xmove to the matching one.
X.LI \'
XUsed to move the cursor to a previously marked position, as
Xin 'a or 'b. The cursor moves to the start of the marked line. The
Xspecial mark '' refers to the "previous context".
X.LI +
XSame as carriage return, in command mode.
X.LI ,
XReverse of the last t, T, f, or F command.
X.LI -
XMove to the first non-white character in the previous line.
X.LI .
XRepeat the last edit command.
X.LI /
XStart of a forward string search command. String searches may be
Xoptionally terminated with a closing slash. To search for a slash
Xuse '\\/' in the search string.
X.LI 0
XMove to the start of the current line. Also used within counts.
X.LI 1-9
XUsed to add 'count' prefixes to commands.
X.LI :
XPrefix character for "ex" commands.
X.LI ;
XRepeat last t, T, f, or F command.
X.LI <
XThe 'left shift' operator.
X.LI >
XThe 'right shift' operator.
X.LI ?
XSame as '/', but search backward.
X.LI A
XAppend at the end of the current line.
X.LI B
XBackward one blank-delimited word.
X.LI C
XChange the rest of the current line.
X.LI D
XDelete the rest of the current line.
X.LI E
XEnd of the end of a blank-delimited word.
X.LI F
XFind a character backward on the current line.
X.LI G
XGo to the given line number (end of file, by default).
X.LI H
XMove to the first non-white char. on the top screen line.
X.LI I
XInsert before the first non-white char. on the current line.
X.LI J
XJoin two lines.
X.LI L
XMove to the first non-white char. on the bottom screen line.
X.LI M
XMove to the first non-white char. on the middle screen line.
X.LI N
XReverse the last string search.
X.LI O
XOpen a new line above the current line, and start inserting.
X.LI P
XPut the yank/delete buffer before the current cursor position.
X.LI R
XReplace characters until an "escape" character is received.
XSimilar to insert mode, but replaces instead of inserting.
XTyping a newline in replace mode is the same as in insert mode,
Xbut replacing continues on the new line.
X.LI T
XReverse search 'upto' the given character.
X.LI U
XRestore the current line to its state before you started changing it.
X.LI W
XMove forward one blank-delimited word.
X.LI X
XDelete one character before the cursor.
X.LI Y
XYank the current line. Same as 'yy'.
X.LI ZZ
XExit from the editor, saving changes if necessary.
X.LI [[
XMove backward one C function.
X.LI ]]
XMove forward one C function.
X.LI ^
XMove to the first non-white on the current line.
X.LI `
XMove to the given mark, as with '. The distinction between the two
Xcommands is important when used with operators. I support the
Xdifference correctly. If you don't know what I'm talking about,
Xdon't worry, it won't matter to you.
X.LI a
XAppend text after the cursor.
X.LI b
XBack one word.
X.LI c
XThe change operator.
X.LI d
XThe delete operator.
X.LI e
XMove to the end of a word.
X.LI f
XFind a character on the current line.
X.LI h
XMove left one column.
X.LI i
XInsert text before the cursor.
X.LI j
XMove down one line.
X.LI k
XMove up one line.
X.LI l
XMove right one column.
X.LI m
XSet a mark at the current position (e.g. ma or mb).
X.LI n
XRepeat the last string search.
X.LI o
XOpen a new line and start inserting text.
X.LI p
XPut the yank/delete buffer after the cursor.
X.LI r
XReplace a character.
X.LI s
XReplace characters.
X.LI t
XMove forward 'upto' the given character on the current line.
X.LI u
XUndo the last edit.
X.LI w
XMove forward one word.
X.LI x
XDelete the character under the cursor.
X.LI y
XThe yank operator.
X.LI z
XRedraw the screen with the current line at the top (zRETURN),
Xthe middle (z.), or the bottom (z-).
X.LI |
XMove to the column given by the preceding count.
X.LI ~
XInvert the case of the current character (if alpha) and move to the right.
XIf the parameter "tildeop" is set, this command functions as an operator.
X.LE
X.de TX
X.ce
XSTEVIE - User Guide
X.sp
X..
X.TC
END_OF_FILE
if test 25953 -ne `wc -c <'stevie/stevie.mm'`; then
    echo shar: \"'stevie/stevie.mm'\" unpacked with wrong size!
fi
# end of 'stevie/stevie.mm'
fi
echo shar: End of archive 12 \(of 13\).
cp /dev/null ark12isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 13 archives.
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0
