Path: utzoo!attcan!uunet!mcvax!unido!fauern!faui44!immd3.informatik.uni-erlangen.de!rtregn From: rtregn@immd3.informatik.uni-erlangen.de (Robert Regn) Newsgroups: comp.os.minix Subject: Sources of new version of Stevie (vi clone) 1 of 5 Keywords: vi stevie Message-ID: <767@faui10.informatik.uni-erlangen.de> Date: 14 Dec 88 16:05:23 GMT Organization: IMMD I, University of Erlangen, W-Erlangen Lines: 2014 Many people asked me for the stevie sources. Here they are (in 5 messages, the first contains the doc). I send the full sources and not the diffs to 3.10 (some people suggest this) because the diffs are more than 100k and not everybody will have 3.10. Special answers for - Helge Oldach: There is no 8Bit-character support. A modified regexp package is included. - Dan Lancian: I have not seen the version posted to the atari group. - martin leisner: I don't know any well-known anonymous ftpable place ask Tony Andrews (uunet!isis!onecom!wldrdg!tony) - Jonathan C. Broome: Supporting large files (as the real vi) is very good. Please post diffs when you has added it to the new version ! stevie.doc contains 262 control chars - they were probably removed ------------------------------------------ cut --------------------------- #! /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 'ctags.doc' <<'END_OF_FILE' X Xctags - first cut at a UNIX ctags re-implementation X X XThis is a public domain rewrite of the standard UNIX ctags command. XIt is a simplified version written primarily for use with the 'stevie' Xeditor. The command line syntax is: X X ctags [file ...] X XCtags scans the all files given on the command line. If no files are Xgiven, the standard input is scanned for a list of file names. X XFunction declarations and macros are supported. However, only simple Xforms of each are recognized. Functions must be of the following form: X Xtype Xfname(...) X Xwhere "fname" is the name of the function and must come at the beginning Xof a line. This is the form I always use, so the limitation doesn't Xbother me. X XMacros (with or without parameters) of the following form are also detected: X X"#" [white space] "define" [white space] NAME X XThe white space between the "#" and "define" is optional. X X XOther Limitations and Changes X XNo sorting or detection of duplicate functions is done. X X XTony Andrews XAugust 1987 END_OF_FILE if test 994 -ne `wc -c <'ctags.doc'`; then echo shar: \"'ctags.doc'\" unpacked with wrong size! fi # end of 'ctags.doc' fi if test -f 'porting.doc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'porting.doc'\" else echo shar: Extracting \"'porting.doc'\" \(2372 characters\) sed "s/^X//" >'porting.doc' <<'END_OF_FILE' X X Release Notes for STEVIE - Version 3.15 X X Atari ST Editor for VI Enthusiasts X X Porting X X X Tony Andrews X X 3/27/88 X X X Porting the editor is a relatively simple task. Most of the Xcode is pretty machine-independent. For each environment, there is Xa file of routines that perform various low-level operations that Xtend to vary a lot from one machine to another. Another file contains Xthe escape sequences to be used for each machine. X X The machine-dependent files currently used are: X Xtos.c: Atari ST - ifdef for either Megamax or Alcyon X Xunix.c: UNIX System V X Xos2.c: Microsoft OS/2 X X X Each of these files are around 150 lines long and deal with Xlow-level issues like character I/O to the terminal, terminal Xinitialization, cursor addressing, and so on. There are different Xtradeoffs to be made depending on the environment. For example, the XUNIX version buffers terminal output because of the relatively high Xoverhead of system calls. A quick look at the files will make it clear Xwhat needs to be done in a new environment. X X Terminal escape sequences are in the file "term.h". These are Xdefined statically, for the time being. There is some discussion in Xterm.h regarding which sequences are optional and which are not. The Xeditor is somewhat flexible in dealing with a lack of terminal Xcapabilities. X X Because not all C compilers support command line macro definitions, Xthe #define's for system-specific macros are placed in the file 'env.h'. XIf you port to a new system, add another line there to define the macro you Xchoose for your port. X X The basic process for doing a new port is: X X 1. Come up with a macro name to use when ifdef'ing your system- X specific changes. Add a line to 'env.h' to define the macro X name you've chosen. X X 2. Look at unix.c, tos.c, and os2.c and copy the one that comes X closest to working on your system. Then modify your new file X as needed. X X 3. Look at term.h and edit the file appropriately adding a new X set of escape sequence definitions for your system. X X 4. If you haven't already, get a copy of Henry Spencer's regular X expression library and compile it. This has been very simple X every time I've done it. X X 5. Compiling and debug the editor. X X X In most cases it should really be that simple. I've done two Xports (UNIX and OS/2) and both were completed in just a couple of hours. END_OF_FILE if test 2372 -ne `wc -c <'porting.doc'`; then echo shar: \"'porting.doc'\" unpacked with wrong size! fi # end of 'porting.doc' fi if test -f 'source.doc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'source.doc'\" else echo shar: Extracting \"'source.doc'\" \(4609 characters\) sed "s/^X//" >'source.doc' <<'END_OF_FILE' X X Release Notes for STEVIE - Version 3.15 X X Source Notes X X Tony Andrews X X 3/27/88 X X XOverview X-------- X X This file provides a brief description of the source code for XStevie. The data structures are described later as well. For information Xspecific to porting the editor, see the file 'porting.doc'. This document Xis more relevant to people who want to hack on the editor apart from doing Xa simple port. X X Most of this document was written some time ago so a lot of the Xdiscussion centers on problems related to the Atari ST environment and Xcompilers. Most of this can be ignored for other systems. X XThings You Need X--------------- X X Stevie has been compiled with both the Alcyon (4.14A) and the XMegamax C compilers. For the posted binary, Megamax was used because Xit's less buggy and provides a reasonable malloc(). Ports to other Xcompilers should be pretty simple. The current ifdef's for ALCYON and XMEGAMAX should point to the potential trouble areas. (See 'porting.doc' Xfor more information.) X X The search code depends on Henry Spencer's regular expression Xcode. I used a version I got from the net recently (as part of a 'grep' Xposting) and had absolutely no trouble compiling it on the ST. Thanks, XHenry! X X The file 'getenv.c' contains a getenv routine that may or may Xnot be needed with your compiler. My version works with Alcyon and XMegamax, under either the Beckemeyer or Gulam shells. X X Lastly, you need a decent malloc. Lots of stuff in stevie is Xallocated dynamically. The malloc with Alcyon is problematic because Xit allocates from the heap between the end of data and the top of stack. XIf you make the stack big enough to edit large files, you wind up Xwasting space when working with small files. Mallocs that get their memory Xfrom GEMDOG (in fairly large chunks) are much better. X X XCruft X----- X X Some artifacts from Tim Thompson's original version remain. In Xsome cases, code has been re-written, with the original left in place Xbut ifdef'd out. This will all be cleaned up eventually, but for now Xit's sometimes useful to see how things used to work. X X XData Structures X--------------- X X A brief discussion of the evolution of the data structures will Xdo much to clarify the code, and explain some of the strangeness you may Xsee. X X In the original version, the file was maintained in memory as a Xsimple contiguous buffer. References to positions in the file were simply Xcharacter pointers. Due to the obvious performance problems inherent in Xthis approach, I made the following changes. X X The file is now represented by a doubly linked list of 'line' Xstructures defined as follows: X Xstruct line { X struct line *prev, *next; /* previous and next lines */ X char *s; /* text for this line */ X int size; /* actual size of space at 's' */ X unsigned long num; /* line "number" */ X}; X XThe members of the line structure are described more completely here: X Xprev - pointer to the structure for the prior line, or NULL for the X first line of the file X Xnext - like 'prev' but points to the next line X Xs - points to the contents of the line (null terminated) X Xsize - contains the size of the chunk of space pointed to by s. This X is used so we know when we can add text to a line without getting X more space. When we DO need more space, we always get a little X extra so we don't make so many calls to malloc. X Xnum - This is a pseudo line number that makes it easy to compare X positions within the file. Otherwise, we'd have to traverse X all the links to tell which line came first. X X X Since character pointers served to mark file positions in the Xoriginal, a similar data object was needed for the new data structures. XThis purpose is served by the 'lptr' structure which is defined as: X Xstruct lptr { X struct line *linep; /* line we're referencing */ X int index; /* position within that line */ X}; X X XThe member 'linep' points to the 'line' structure for the line containing Xthe location of interest. The integer 'index' is the offset into the line Xdata (member 's') of the character to be referenced. X XThe following typedef's are more commonly used: X Xtypedef struct line LINE; Xtypedef struct lptr LPTR; X XMany operations that were trivial with character pointers had to be Ximplemented by functions to manipulate LPTR's. Most of these are in the Xfile 'ptrfunc.c'. There you'll find functions to increment, decrement, Xand compare LPTR's. X XThis was the biggest change to the editor. Fortunately, I made this Xchange very early on, while I was still doing the work on a UNIX system. XUsing 'sdb' made it much easier to debug this code than if I had done it Xon the ST. X END_OF_FILE if test 4609 -ne `wc -c <'source.doc'`; then echo shar: \"'source.doc'\" unpacked with wrong size! fi # end of 'source.doc' fi if test -f 'stevie.doc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'stevie.doc'\" else echo shar: Extracting \"'stevie.doc'\" \(28858 characters\) sed "s/^X//" >'stevie.doc' <<'END_OF_FILE' X X X X STEVIE - An Aspiring VI Clone X X User Reference - 3.44 X X Tony Andrews X X X X 1. _O_v_e_r_v_i_e_w X X STEVIE is an editor designed to mimic the interface of the X UNIX editor 'vi'. The name (ST Editor for VI Enthusiasts) X comes from the fact that the editor was first written for X the Atari ST. The current version has been ported to UNIX, X Minix, MS-DOS, and OS/2, but I've left the name intact for X now. X X This program is the result of many late nights of hacking X over the last year or so. The first version was written by X Tim Thompson and posted to USENET. From there, I reworked X the data structures completely, added LOTS of features, and X generally improved the overall performance in the process. X X I've labelled STEVIE an 'aspiring' vi clone as a warning to X those who may expect too much. On the whole, the editor is X pretty complete. Almost all of the visual mode commands are X supported. I've tried very hard to capture the 'feel' of vi X by getting the little things right. Making lines wrap X correctly, supporting true operators, and even getting the X cursor to land on the right place for tabs are all a real X pain, but really help make the editor 'feel' right. X X STEVIE may be freely distributed. The source isn't copy- X righted or restricted in any way. If you pass the program X along, please include all the documentation and, if practi- X cal, the source as well. I'm not fanatical about this, but I X tried to make STEVIE fairly portable and that doesn't do any X good if the source isn't available. X X The remainder of this document describes the operation of X the editor. This is intended as a reference for users X already familiar with the real vi editor. X X X 2. _S_t_a_r_t_i_n_g__t_h_e__E_d_i_t_o_r X X The following command line forms are supported: X X stevie [file ...] Edit the specified file(s) X X stevie -t tag Start at the location of the given tag X X stevie + file Edit file starting at end X X X X X X - 1 - X X X X X X X X STEVIE User Reference X X X X stevie +n file Edit file starting a line number 'n' X X stevie +/pat file Edit file starting at pattern 'pat' X X If multiple files are given on the command line (using the X first form), the ":n" command goes to the next file, ":N" X goes backward in the list, and ":rew" can be used to rewind X back to the start of the file list. X X X 3. _S_e_t__C_o_m_m_a_n_d__O_p_t_i_o_n_s X X The ":set" command works as usual to set parameters. Each X parameter has a long and an abbreviated name, either of X which may be used. Boolean parameters are set as in: X X set showmatch X X or cleared by: X X set noshowmatch X X Numeric parameters are set as in: X X set scroll=5 X X Several parameters may be set with a single command: X X set novb sm report=1 X X To see the status of all parameters use ":set all". Typing X ":set" with no arguments will show only those parameters X that have been changed. The supported parameters, their X names, abbreviations, defaults, and descriptions are shown X below: X X X X X X X X X X X X X X X X X X X X - 2 - X X X X X X X X STEVIE User Reference X X X X autoindent Short: ai, Default: noai, Type: Boolean X When in insert mode, start new lines at the same X column as the prior line. Unlike vi, you can X backspace over the indentation. X X backup Short: bk, Default: nobk, Type: Boolean X Leave a backup on file writes. X X errorbells Short: eb, Default: noeb, Type: Boolean X Ring bell when error messages are shown. X X ignorecase Short: ic, Default: noic, Type: Boolean X Ignore case in string searches. X X lines Short: lines, Default: lines=25, Type: Numeric X Number of physical lines on the screen. The X default value actually depends on the host X machine, but is generally 25. X X list Short: list, Default: nolist, Type: Boolean X Show tabs and newlines graphically. X X number Short: nu, Default: nonu, Type: Boolean X Display lines on the screen with their line X numbers. X X report Short: report, Default: report=5, Type: Numeric X Minimum number of lines to report operations on. X X return Short: cr, Default: cr, Type: Boolean X End lines with cr-lf when writing files. X X scroll Short: scroll, Default: scroll=12, Type: Numeric X Number of lines to scroll for ^D & ^U. X X showmatch Short: sm, Default: nosm, Type: Boolean X When a ), }, or ] is typed, show the matching (, X {, or [ if it's on the current screen by moving X the cursor there briefly. X X showmode Short: mo, Default: nomo, Type: Boolean X Show on status line when in insert mode. X X tabstop Short: ts, Default: ts=8, Type: Numeric X Number of spaces in a tab. X X wrapscan Short: ws, Default: ws, Type: Boolean X String searches wrap around the ends of the X file. X X X X X X - 3 - X X X X X X X X STEVIE User Reference X X X X vbell Short: vb, Default: vb, Type: Boolean X Use a visual bell, if possible. (novb for audi- X ble bell) X X The EXINIT environment variable can be used to modify the X default values on startup as in: X X setenv EXINIT="set sm ts=4" X X The 'backup' parameter, if set, causes the editor to retain X a backup of any files that are written. During file writes, X a backup is always kept for safety until the write is com- X pleted. At that point, the 'backup' parameter determines X whether the backup file is deleted. X X In environments (e.g. OS/2 or TOS) where lines are normally X terminated by CR-LF, the 'return' parameter allows files to X be written with only a LF terminator (if the parameter is X cleared). This parameter is ignored on UNIX systems. X X The 'lines' parameter tells the editor how many lines there X are on the screen. This is useful on systems like the ST X (or OS/2 machines with an EGA adapter) where various screen X resolutions may be used. By using the 'lines' parameter, X different screen sizes can be easily handled. X X X 4. _C_o_l_o_n__C_o_m_m_a_n_d_s X X Several of the normal 'vi' colon commands are supported by X STEVIE. Some commands may be preceded by a line range X specification. For commands that accept a range of lines, X the following address forms are supported: X X addr X addr + number X addr - number X X where 'addr' may be one of the following: X X a line number X a mark (as in 'a or 'b) X '.' (the current line) X '$' (the last line) X X An address range of "%" is accepted as an abbreviation of X "1,$". X X X X X X X X - 4 - X X X X X X X X STEVIE User Reference X X X X 4.1 _T_h_e__G_l_o_b_a_l__C_o_m_m_a_n_d X X A limited form of the global command is supported, accepting X the following command form: X X g/pattern/X X X where X may be either 'd' or 'p' to delete or print lines X that match the given pattern. If a line range is given, X only those lines are checked for a match with the pattern. X If no range is given, all lines are checked. X X If the trailing command character is omitted, 'p' is X assumed. In this case, the trailing slash is also optional. X The current version of the editor does not support the undo X operation following the deletion of lines with the global X command. X X 4.2 _T_h_e__S_u_b_s_t_i_t_u_t_e__C_o_m_m_a_n_d X X The substitute command provides a powerful mechanism for X making more complex substitutions than can be done directly X from visual mode. The general form of the command is: X X s/pattern/replacement/g X X Each line in the given range (or the current line, if no X range was given) is scanned for the given regular expres- X sion. When found, the string that matched the pattern is X replaced with the given replacement string. If the replace- X ment string is null, each matching pattern string is X deleted. X X The trailing 'g' is optional and, if present, indicates that X multiple occurrences of 'pattern' on a line should all be X replaced. X X Some special sequences are recognized in the replacement X string. The ampersand character is replaced by the entire X pattern that was matched. For example, the following com- X mand could be used to put all occurrences of 'foo' or 'bar' X within double quotes: X X 1,$s/foo|bar/"&"/g X X The special sequence "\n" where 'n' is a digit from 1 to 9, X is replaced by the string the matched the corresponding X parenthesized expression in the pattern. The following com- X mand could be used to swap the first two parameters in calls X to the C function "foo": X X X X X - 5 - X X X X X X X X STEVIE User Reference X X X X 1,$s/foo\(([^,]*),([^,]*),/foo(\2,\1,/g X X Like the global command, substitutions can't be undone with X this version of the editor. X X 4.3 _F_i_l_e__M_a_n_i_p_u_l_a_t_i_o_n__C_o_m_m_a_n_d_s X X The following table shows the supported file manipulation X commands as well as some other 'ex' commands that aren't X described elsewhere: X X :w write the current file X :wq write and quit X :x write (if necessary) and quit X ZZ 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 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 X The ":help" command can also be invoked with the key X on the Atari ST. This actually displays a pretty complete X summary of the real vi with unsupported features indicated X appropriately. X X The commands above work pretty much like they do in 'vi'. X Most of the commands support a '!' suffix (if appropriate) X to discard any pending changes. X X X X X X - 6 - X X X X X X X X STEVIE User Reference X X X X 5. _S_t_r_i_n_g__S_e_a_r_c_h_e_s X X String searches are supported, as in vi, accepting the usual X regular expression syntax. This was done using a modified X form of Henry Spencer's regular expression library. I added X code outside the library to support the '\<' and '\>' exten- X sions. This actually turned out to be pretty easy, although X there may be some glitches in the way I did it. The parame- X ter "ignorecase" can be set to ignore case in all string X searches. X X X 6. _O_p_e_r_a_t_o_r_s X X The vi operators (d, c, y, !, <, and >) work as true opera- X tors. The only exception is that the change operator works X only for character-oriented changes (like cw or c%) and not X for line-oriented changes (like cL or c3j). X X X 7. _T_a_g_s X X Tags are implemented and a fairly simple version of 'ctags' X is supplied with the editor. The current version of ctags X will find functions and macros following a specific (but X common) form. See 'ctags.doc' for a complete discussion. X X X 8. _S_y_s_t_e_m_-_S_p_e_c_i_f_i_c__C_o_m_m_e_n_t_s X X The following sections provide additional relevant informa- X tion for the systems to which STEVIE has been ported. X X 8.1 _A_t_a_r_i__S_T X X 8.1.1 _T_O_S The editor has been tested in all three resolu- X tions, although low and high res. are less tested than X medium. The 50-line high res. mode can be used by setting X the 'lines' parameter to 50. Alternatively, the environment X variable 'LINES' can be set. The editor doesn't actively set X the number of lines on the screen. It just operates using X the number of lines it was told. X X The arrow keys, as well as the , , and X keys are all mapped appropriately. X X 8.1.2 _M_i_n_i_x The editor is pretty much the same under X Minix, but many of the keyboard mappings aren't supported. X X X X X X X - 7 - X X X X X X X X STEVIE User Reference X X X X 8.2 _U_N_I_X X X The editor has been ported to UNIX System V release 3 as X well as 4.2 BSD. This was done mainly to get some profiling X data so I haven't put much effort into doing the UNIX ver- X sion right. It's hard-coded for ansi-style escape sequences X and doesn't use the termcap/terminfo routines at all. X X 8.3 _O_S_/_2 X X This port was done because the editor that comes with the X OS/2 developer's kit really stinks. Make sure 'ansi' mode is X on (using the 'ansi' command). The OS/2 console driver X doesn't support insert/delete line, so STEVIE bypasses the X driver and makes the appropriate system calls directly. X This is all done in the system-specific part of the editor X so the kludge is at least localized. X X The arrow keys, page up/down and home/end all do what you'd X expect. The function keys are hard-coded to some useful mac- X ros until I can get true support for macros into the editor. X The current mappings are: X X F1 :p X F2 :n X F3 :e # X F4 :rew X F5 [[ X F6 ]] X F7 << X F8 >> X F9 :x X F10 :help X X S-F1 :p! X S-F2 :n! X X 8.4 _M_S_D_O_S X X STEVIE has been ported to MSDOS 3.3 using the Microsoft C X compiler, version 5.1. The keyboard mappings are the same X as for OS/2. The only problem with the PC version is that X the inefficiency of the screen update code becomes painfully X apparent on slower machines. X X X X X X X X X X X - 8 - X X X X X X X X STEVIE User Reference X X X X 9. _M_i_s_s_i_n_g__F_e_a_t_u_r_e_s X X 1. Counts aren't yet supported everywhere that they X should be. X X 2. Macros with support for function keys. X X 3. More "set" options. X X 4. Many others... X X X 10. _K_n_o_w_n__B_u_g_s__a_n_d__P_r_o_b_l_e_m_s X X 1. The change operator is only half-way implemented. It X works for character motions but not line motions. This X isn't so bad since most change operations are charac- X ter oriented anyway. X X 2. The yank buffer uses statically allocated memory, so X large yanks will fail. If a delete spans an area X larger than the yank buffer, the program asks for con- X firmation before proceeding. That way, if you were X moving text, you don't get screwed by the limited yank X buffer. You just have to move smaller chunks at a X time. All the internal buffers (yank, redo, etc.) X need to be reworked to allocate memory dynamically. X The 'undo' buffer is now dynamically allocated, so any X change can be undone. X X 3. If you stay in insert mode for a long time, the insert X buffer can overflow. The editor will print a message X and dump you back into command mode. X X 4. The current version of the substitute command (i.e. X ":s/foo/bar") can't be undone. X X 5. Several other less bothersome glitches... X X X X X X X X X X X X X X X X X - 9 - X X X X X X X X STEVIE User Reference X X X X 11. _C_o_n_c_l_u_s_i_o_n X X The editor has reached a pretty stable state, and performs X well on the systems I use it on, so I'm pretty much in X maintenance mode now. There's still plenty to be done; the X screen update code is still pretty inefficient and the X yank/put code is still primitive. But after more than a X year of hacking, I'm ready to work on new projects. I'm X still interested in bug reports, and I do still add a new X feature from time to time, but the rate of change is way X down now. X X I'd like to thank Tim Thompson for writing the original ver- X sion of the editor. His program was well structured and X quite readable. Thanks for giving me a good base to work X with. X X If you're reading this file, but didn't get the source code X for STEVIE, it can be had by sending a disk with return pos- X tage to the address given below. I can write disks for the X Atari ST (SS or DS) or MSDOS (360K or 1.2M). Please be sure X to include the return postage. I don't intend to make money X from this program, but I don't want to lose any either. X X I'm not planning to try to coordinate the various ports of X STEVIE that may occur. I just don't have the time. But if X you do port it, I'd be interested in hearing about it. X X Tony Andrews UUCP: onecom!wldrdg!tony X 5902E Gunbarrel Ave. X Boulder, CO 80301 X X X X X X X X X X X X X X X X X X X X X X X X - 10 - X X X X X X X X STEVIE User Reference X X X X _C_h_a_r_a_c_t_e_r__F_u_n_c_t_i_o_n__S_u_m_m_a_r_y X X The following list describes the meaning of each character X that's used by the editor. In some cases characters have X meaning in both command and insert mode; these are all X described. X X X ^@ The null character. Not used in any mode. This char- X acter may not be present in the file, as is the case X with vi. X X ^B Backward one screen. X X ^D Scroll the window down one half screen. X X ^E Scroll the screen up one line. X X ^F Forward one screen. X X ^G Same as ":f" command. Displays file information. X X ^H (Backspace) Moves cursor left one space in command X mode. In insert mode, erases the last character X typed. X X ^J Move the cursor down one line. X X ^L Clear and redraw the screen. X X ^M (Carriage return) Move to the first non-white char- X acter in the next line. In insert mode, a carriage X return opens a new line for input. X X ^N Move the cursor down a line. X X ^P Move the cursor up a line. X X ^U Scroll the window up one half screen. X X ^Y Scroll the screen down one line. X X ^[ Escape cancels a pending command in command mode, X and is used to terminate insert mode. X X ^] Moves to the tag whose name is given by the word in X which the cursor resides. X X ^` Same as ":e #" if supported (system-dependent). X X X X X X - 11 - X X X X X X X X STEVIE User Reference X X X X SPACE Move the cursor right on column. X X ! The filter operator always operates on a range of X lines, passing the lines as input to a program, and X replacing them with the output of the program. The X shorthand command "!!" can be used to filter a X number of lines (specified by a preceding count). X The command "!" is replaced by the last command X used, so "!!!" runs the given number of X lines through the last specified command. X X $ Move to the end of the current line. X X % If the cursor rests on a paren '()', brace '{}', or X bracket '[]', move to the matching one. X X ' Used to move the cursor to a previously marked posi- X tion, as in 'a or 'b. The cursor moves to the start X of the marked line. The special mark '' refers to X the "previous context". X X + Same as carriage return, in command mode. X X , Reverse of the last t, T, f, or F command. X X - Move to the first non-white character in the previ- X ous line. X X . Repeat the last edit command. X X / Start of a forward string search command. String X searches may be optionally terminated with a closing X slash. To search for a slash use '\/' in the search X string. X X 0 Move to the start of the current line. Also used X within counts. X X 1-9 Used to add 'count' prefixes to commands. X X : Prefix character for "ex" commands. X X ; Repeat last t, T, f, or F command. X X < The 'left shift' operator. X X > The 'right shift' operator. X X ? Same as '/', but search backward. X X X X X X - 12 - X X X X X X X X STEVIE User Reference X X X X A Append at the end of the current line. X X B Backward one blank-delimited word. X X C Change the rest of the current line. X X D Delete the rest of the current line. X X E End of the end of a blank-delimited word. X X F Find a character backward on the current line. X X G Go to the given line number (end of file, by X default). X X H Move to the first non-white char. on the top screen X line. X X I Insert before the first non-white char. on the X current line. X X J Join two lines. X X L Move to the first non-white char. on the bottom X screen line. X X M Move to the first non-white char. on the middle X screen line. X X N Reverse the last string search. X X O Open a new line above the current line, and start X inserting. X X P Put the yank/delete buffer before the current cursor X position. X X R Replace characters until an "escape" character is X received. Similar to insert mode, but replaces X instead of inserting. Typing a newline in replace X mode is the same as in insert mode, but replacing X continues on the new line. X X T Reverse search 'upto' the given character. X X U Restore the current line to its state before you X started changing it. X X W Move forward one blank-delimited word. X X X X X X - 13 - X X X X X X X X STEVIE User Reference X X X X X Delete one character before the cursor. X X Y Yank the current line. Same as 'yy'. X X ZZ Exit from the editor, saving changes if necessary. X X [[ Move backward one C function. X X ]] Move forward one C function. X X ^ Move to the first non-white on the current line. X X ` Move to the given mark, as with '. The distinction X between the two commands is important when used with X operators. I support the difference correctly. If X you don't know what I'm talking about, don't worry, X it won't matter to you. X X a Append text after the cursor. X X b Back one word. X X c The change operator. X X d The delete operator. X X e Move to the end of a word. X X f Find a character on the current line. X X h Move left one column. X X i Insert text before the cursor. X X j Move down one line. X X k Move up one line. X X l Move right one column. X X m Set a mark at the current position (e.g. ma or mb). X X n Repeat the last string search. X X o Open a new line and start inserting text. X X p Put the yank/delete buffer after the cursor. X X r Replace a character. X X X X X X - 14 - X X X X X X X X STEVIE User Reference X X X X s Replace characters. X X t Move forward 'upto' the given character on the X current line. X X u Undo the last edit. X X w Move forward one word. X X x Delete the character under the cursor. X X y The yank operator. X X z Redraw the screen with the current line at the top X (zRETURN), the middle (z.), or the bottom (z-). X X | Move to the column given by the preceding count. X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X - 15 - X X X X X X X X X X X X STEVIE - User Guide X X CONTENTS X X X 1. Overview........................................... 1 X X 2. Starting the Editor................................ 1 X X 3. Set Command Options................................ 2 X X 4. Colon Commands..................................... 4 X 4.1 The Global Command............................ 5 X 4.2 The Substitute Command........................ 5 X 4.3 File Manipulation Commands.................... 6 X X 5. String Searches.................................... 7 X X 6. Operators.......................................... 7 X X 7. Tags............................................... 7 X X 8. System-Specific Comments........................... 7 X 8.1 Atari ST...................................... 7 X 8.2 UNIX.......................................... 8 X 8.3 OS/2.......................................... 8 X 8.4 MSDOS......................................... 8 X X 9. Missing Features................................... 9 X X 10. Known Bugs and Problems............................ 9 X X 11. Conclusion......................................... 10 X X Character Function Summary.............................. 11 X X X X X X X X X X X X X X X X X X X X - i - X X X X END_OF_FILE echo shar: 262 control characters may be missing from \"'stevie.doc'\" if test 28858 -ne `wc -c <'stevie.doc'`; then echo shar: \"'stevie.doc'\" unpacked with wrong size! fi # end of 'stevie.doc' fi if test -f 'stevie.mm' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'stevie.mm'\" else echo shar: Extracting \"'stevie.mm'\" \(20348 characters\) sed "s/^X//" >'stevie.mm' <<'END_OF_FILE' X.\" $Header: stevie.mm,v 3.44 88/11/04 15:03:24 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.44 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 has Xbeen ported to UNIX, Minix, 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 Xyear or so. The 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. Almost Xall of the visual mode commands are supported. I've tried very hard to Xcapture the 'feel' of vi by getting the little things right. Making lines Xwrap correctly, supporting true operators, and even getting the cursor to Xland on the right place for tabs are all a real pain, but really help make Xthe editor 'feel' right. 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 that doesn't Xdo any good if the source isn't available. 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.SK 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.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 actually Xdepends on the host machine, but is generally 25. X.LI list XShort: list, Default: nolist, Type: Boolean X.br XShow tabs and newlines graphically. 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 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 XThe 'backup' parameter, if set, causes the editor to retain a backup of any Xfiles that are written. During file writes, a backup is always kept for Xsafety until the write is completed. At that point, the 'backup' parameter Xdetermines whether the backup file is deleted. 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 "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 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 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 ":help" command can also be invoked with the key on the Atari XST. This actually displays a pretty complete summary of the real vi with Xunsupported features indicated appropriately. 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 "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. This actually turned out to be pretty easy, Xalthough there may be some glitches in the way I did it. 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. The only Xexception is that the change operator works only for character-oriented Xchanges (like cw or c%) and not for line-oriented changes (like cL or c3j). 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.H 1 "System-Specific Comments" XThe following sections provide additional relevant information for the Xsystems to which STEVIE has been ported. 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 , , and 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 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. It's hard-coded for ansi-style escape Xsequences and doesn't use the termcap/terminfo routines at all. 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 :p XF2 :n XF3 :e # XF4 :rew XF5 [[ XF6 ]] XF7 << XF8 >> XF9 :x XF10 :help X XS-F1 :p! XS-F2 :n! X.DE X.H 2 "MSDOS" XSTEVIE has been ported to MSDOS 3.3 using the Microsoft XC compiler, version 5.1. 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.H 1 "Missing Features" X.AL X.LI XCounts aren't yet supported everywhere that they should be. 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 change operator is only half-way implemented. It works for character Xmotions but not line motions. This isn't so bad since most change Xoperations are character oriented anyway. 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 command (i.e. ":s/foo/bar") can't Xbe undone. 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. XBut after more than a year of hacking, I'm ready to work on new projects. 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. 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.P XI'm not planning to try to coordinate the various ports of STEVIE that Xmay occur. I just don't have the time. But if you do port it, I'd be Xinterested in hearing about it. X.DS 1 XTony Andrews UUCP: onecom!wldrdg!tony X5902E Gunbarrel Ave. XBoulder, CO 80301 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 "!!!" 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.LE X.de TX X.ce XSTEVIE - User Guide X.sp X.. X.TC END_OF_FILE if test 20348 -ne `wc -c <'stevie.mm'`; then echo shar: \"'stevie.mm'\" unpacked with wrong size! fi # end of 'stevie.mm' fi echo shar: End of shell archive. exit 0 Robert Regn\ rtregn@faui32.uucp\ rtregn@immd3.informatik.uni-erlangen.de