COHERENT manpages
This page displays the COHERENT manpage for elvis [Clone of Berkeley-standard screen editor].
List of available manpages
Index
elvis -- Command Clone of Berkeley-standard screen editor elvis [ options ] [ +cmd ] [ file1 ... file27 ] elvis is a clone of vi and ex, the standard UNIX screen editors. elvis is a modal editor whose command structure resembles the ed line editor. Modal means that a keystroke assumes a different meaning, depending upon the mode that the editor is in. elvis uses three modes: visual-command mode, colon-command mode, and input mode. The following sections summarize the commands associated with each mode: Visual-Command Mode Visual-command mode closely resembles text-input mode. One quick way to tell the modes apart is to press the <esc> key. If elvis beeps, then you are in visual-command mode. If it does not beep, then you were in input mode, but pressing <esc> switched you to visual-command mode. Most visual-mode commands are one keystroke long. The commands are in two groups: movement commands and edit commands. The former group moves the cursor through the file being edited, and the latter group alters text. The following sections summarize the command set for elvis's visual-command mode. Visual-Mode Movement Commands The following summarizes the visual mode's movement commands. count indicates that the command can be optionally prefaced by an argument that tells elvis how often to execute the command. move indicates that the command can be followed by a movement command, after which the command is executed on the text that lies between the point where the command was first typed and the point to which the cursor was moved. Typing the command a second time executes the command for the entire line upon which the cursor is positioned. key means that the command must be followed by an argument. <ctrl-B> Move up by one screenful. [count] <ctrl-D> Scroll down count lines (default, one-half screenful). [count] <ctrl-E> Scroll up count lines. <ctrl-F> Move down by one screenful. <ctrl-G> Show file status and the current line. [count] <ctrl-H> Move one character to the left. [count] <ctrl-J> Move down count lines. <ctrl-L> Redraw the screen. [count] <ctrl-M> Move to the beginning of the next line. [count] <ctrl-N> Move down count lines (default, one). [count] <ctrl-P> Move up count lines (default, one). <ctrl-R> Redraw the screen. <ctrl-T> Pop the tag stack -- that is, return to the most recently tagged position. elvis removes that tag from the tag stack. [count] <ctrl-U> Scroll up count lines (default, one-half screenful). [count] <ctrl-X> Move the cursor to column count on the current line. [count] <ctrl-Y> Scroll down count lines. <ctrl-]> If the cursor is on a tag name, go to that tag. <ctrl-^> Switch to the previous file. [count] <space> Move right count spaces (default, one). <quotation mark> key Select which cut buffer to use next. $ Move to the end of the current line. % Move to the matching (){}[] character. [count] % Move count percentage into the file. For example, the command 50% moves the cursor to the middle of the file. ' key Move to a marked line. [count] ( Move backward count sentences (default, one). [count] ) Move forward count sentences (default, one). * Go to the next error in the error list. [count] + Move to the beginning of the next line. [count] , Repeat the previous f or t command, but move in the opposite direction. [count] - Move to the beginning of the preceding line. [count] . Repeat the previous edit command. / text Search forward for text, which can be a regular expression. 0 If not part of a count, move to the first character of this line. : Switch to colon-command mode to execute one command. [count] ; Repeat the previous f or t command. ? text Search backwards for text, which can be a regular expression. @ key Execute the contents of a cut-buffer as vi commands. [count] B Move backwards count words (default, one). [count] E Move forwards count words (default, one). [count] F key Move left to the count'th occurrence of the given character (default, first). [count] G Move to to line count (default, last). [count] H Move to the top of the screen. [count] L Move to the bottom of the screen. M Move to the middle of the screen. N Repeat the last search, but in the opposite direction. P Paste text before the cursor. Q Shift to colon-command mode. [count] T key Move left almost to the given character. U Undo all recent changes to the current line. V [move...][command] Like v, described below, except it applies to whole lines. For example, the command Vjj> first highlights and then indents three lines. It is equivalent to >2j or 3>>. [count] W Move forward count words (default, one). [count] Y Copy (or ``yank'') count lines into a cut buffer (default, one). Z Z Save the file and exit. [ [ Move back one section. ] ] Move forward one section. ^ Move to the beginning of the current line, but after indent. ` key Move to the key character. [count] b Move back count words. [count] e Move forward to the end of the count'th word. [count] f c Move rightward to the count'th occurrence of character c. [count] h Move left count characters (default, one). [count] j Move down count characters (default, one). [count] k Move up count characters (default, one). [count] l Move right count characters (default, one). m key Mark a line or character. n Repeat the previous search. p Paste text after the cursor. [count] t key Move rightward almost to the count'th occurrence of the given character (default, one). u Undo the previous edit command. v [move ...][command] Highlight text as the cursor is moved, then apply command to the highlighted text. For example, vwwwd is approximately the same as 3dw. To cancel the selection without altering the text, press v a second time. [count] w Move forward count words (default, one). y move Copy (or ``yank'') text into a cut buffer. z key Scroll the screen, repositioning the current line as follows: + indicates top of the screen, -- indicates the bottom, . indicates the middle. [count] { Move back count paragraphs (default, one). [count] | Move to the count'th column on the screen (leftmost, one). [count] } Move forward count paragraphs (default, one). If you are running elvis within an X terminal window, you can use also the mouse to reposition the cursor. To bypass this feature (e.g., to perform the standard X cut-and-paste tasks), press <shift> while clicking a mouse button. Visual-Mode Edit Commands The following describes the visual mode's editing commands. ! [move] Run the selected text through an external filter program. !! Replace the current line with the output of an external command. [count] # Increment a number by count (default, one). [count] & Repeat the previous :s// command count times (default, once). < move Shift the enclosed text left. =[move] Filter the affected text. The default filter is fmt, which performs simple paragraph formatting and word wrap. To change the filter used by =, use the command :set ep=filter_name. > move Shift the enclosed text right. [count] A input Append input to end of the line. C input Change text from the cursor through the end of the line. D Delete text from the cursor through the end of the line. [count] I input Insert text at the beginning of the line (after indentations). [count] J Join lines the current with the following line. K Look up the word under the cursor. The default lookup program is ref. You can change K so as to get C language run-time library help for the word under the cursor by executing the command: set kp="help -f/usr/lib/helpfile -i/usr/lib/helpindex -d@" You can write this line into file $HOME/.exrc, which elvis reads before it begins execution. [count] O input Open a new line above the current line. R input Overtype. [count] S input Change lines, like cc. [count] X Delete count characters from the left of the cursor (default, one). [count] a input Insert text after the cursor. c move Change text. d move Delete text. [count] i input Insert text at the cursor. [count] o input Open a new line below the current line. [count] r key Replace count characters with text you type (default, one). [count] s input Replace count characters with text you type (default, one). [count] x Delete the character at which the cursor is positioned. \ Pop up a menu of the most common operations. [count] ~ Toggle a character between upper case and lower case. Colon-Mode Commands The following summarizes the set of colon-mode commands. It is no accident that these commands closely resemble those for the ed line editor: they come, in fact, from ex, the editor upon which both vi (the UNIX visual editor) and ed derive. For that reason, colon-command mode is sometimes called ex mode. line indicates whether the command can be executed on one or more lines. line can be a regular expression. Some commands can be used with an optional exclamation point; if done so, the editor assumes you know what you are doing and suppresses the warnings and prompts it would normally issue for these commands. Most commands can be invoked simply by typing the first one or two letters of their names. abbr [word full_form] Define word as an abbreviation for full_form. and This command is used with the colon-mode command if to execute other commands conditionally. It is never used on its own. For more information, see the section Conditional Commands , below. [line] append Insert text after the current line. args [file1 ... fileN] With no arguments, print the files list on elvis's command line. With one or more arguments, change the name of the current file. cc [files] Invoke the C compiler to compile files, and redirects all error messages into file errlist. After the compiler exits, scan the contents of errlist for error messages; if one is found, jump to the line and file indicated on the error line, and display the error message on the status line. cd [directory] Switch the current working directory. With no argument, switch to the $HOME directory. [line][,line] change [``x] Replace the range of lines with the contents of cut-buffer x. chdir [directory] Same as the cd command. color [when] [[type] color] [on color] Set the screen's colors. This command works only if you have an ANSI-compatible color terminal. when defines the type of text whose color is being manipulated: normal, standout, bold, underlined, italic, popup, and quit. The default is normal. You may use the first letter of each as an abbreviation. color can be one of the following: black blue green cyan red magenta brown white yellow gray grey Valid color types can be one of the following: light, bright, or blinking. The first use of color must specify both the foreground and background colors; the background color thereafter defaults to the background color of normal text. For example, the commands color light cyan on blue color b bright white set the normal text to light cyan in the foreground and a blue background; and then set the foreground color for bold text to bright white. Not every valid color command works as expected on the system console, due to limitations in the current release of the ansipc device driver. [line][,line] copy targetline Copy the range of lines to after the targetline. [line][,line] delete [``x] Move the range of lines into cut buffer x. digraph[!] [XX [Y]] Set XX as a digraph for Y. With no arguments, display all currently defined digraphs. With one argument, undefine the argument as a digraph. edit[!] [file] Edit a file not named on the elvis command line. else This command is used with the colon-mode command if to execute other commands conditionally. For more information, see the section Conditional Commands , below. errlist[!] [errlist] Find the next error message in file errlist, as generated through elvis's cc or make commands. file [file] With an argument, change the output file to file. Without an argument, print information about the current output file. [line][,line] global /regexp/ command Search the range of lines for all lines that contain the regular expression regexp, and execute command upon each. if This command is used to execute other commands conditionally. For more information, see the section Conditional Commands , below. [line] insert Insert text before the current line. [line][,line] join Concatenate the range of lines into one line. [line][,line] list Display the requested range of lines, making all embedded control characters explicit. make [target] Same as the cc command, except that make is executed. map[!] key mapped_to Remap key to mapped_to. Normally, remapping applies just to visual-command mode; `!' tells elvis to remap the key under all modes. With no arguments, show all current key mappings. [line] mark x Set a mark on line, and name it x. mkexrc Save current configuration into file ./.exrc, which will be read next time you invoke elvis. [line][,line] move targetline Move the range of lines to after targetline. next[!] [files] Switch to the next file on the elvis command line. Next[!] Switch to the preceeding file on the elvis command line. [line][,line] number Display the range of lines, with line numbers. or This command is used with the colon-mode command if to execute other commands conditionally. For more information, see the section Conditional Commands , below. pop Pop the tag stack -- that is, return to the most recently tagged position. elvis removes that tag from the tag stack. previous[!] Switch to the preceeding file on the elvis command line. [line][,line] print Display the specified range of lines. [line] put [``x] Copy text from cut buffer x after the current line. quit[!] Quit elvis, and return to the shell. [line] read file Read the contents of file and insert them after line (default, the last line). rewind[!] Switch to the first file on the elvis command line. [line[,line]]s/oldstring/newstring/[g] Substitute the first instance of newstring for oldstring. If no range of lines is indicated, the substitution is performed only on the current line. To change every instance of oldline into newline on a line, append the suffix g (``global'') to this command. The command s with no arguments repeats the previous substitution. It is a synonym for the command &, described below. set [options] Set an elvis option. For details, see the section on set Options, below shell Invoke a shell. source file Read a set of colon-mode commands from file, and execute them. [line][,line] substitute /regexp/replacement/[p][g][c] For the range of lines, replace the first instance of regexp with replacement. p tells elvis to print the last line upon which a substitution was performed. g means perform a global substitution, i.e., replace all instances of regexp on each line with replacement. c tells elvis to ask for confirmation before performing each substitution. tag[!] tagname Find tagname in file tags, which records information about all tags. If found, jump to the file and line upon which the tag is set. then This command is used with the colon-mode command if to execute other commands conditionally. For more information, see the section Conditional Commands , below. [line][,line] to targetline Copy the range of lines to after the targetline. unabbr word Unabbreviate word. undo Undo the last editing command. unmap[!] key Unmap key. version Display the current version of elvis. [line][,line] vglobal /regexp/ command Search the range of lines for all lines that do not contain the regular expression regexp, and execute command upon each. visual Enter visual-command mode. wq Save the changed file, and exit. [line][,line] write[!] [[>>]file] Write the file being edited into file. With the >> argument, append the edited text onto the end of file. xit[!] Same as the wq command, described above, except that it does not write files that have not changed. [line][,line] yank [``x] Copy the range of lines into cut buffer x. [line][,line] ! command Execute command under a subshell, then return. [line][,line] < Shift the range of lines left by one tabwidth. [line][,line] = With no range of lines specified, print the number of the current line. With line arguments, print the endpoints of the lines in question, and the number of lines that lie between them. (Remember, line can be a regular expression as well as a number.) [line][,line] > Shift the range of lines right by one tabwidth. [line][,line] & Repeat the last substitution command. @ x Read the contents of cut-buffer x as a set of colon-mode commands, and execute them. With no arguments, list all current settings. \@ Beginning with release 1.8, elvis replaces the escape sequence \@ by the word that the cursor is on. This works in two special contexts: in regular expressions, and in any ex command that also replaces `%' with the current file name. This escape sequence can simplify writing certain kinds of macros. Conditional Commands Beginning with release 1.8pl3, elvis supports conditional commands. Some of these commands set a conditional-execution flag; others examine that flag and perform (or do not perform) commands if the flag is set. You cannot nest conditional commands. The colon-mode commands if, and, and or test for a condition. Their syntax is typical: each must be followed by an expression, and and and or must follow an initial if command. Each command tests for a single condition. That condition may involve examining the options set by the command set (which are described in detail in the next section), set by termcap values, or by constants. Colon-mode commands then and else execute commands conditionally, based upon the value of the conditional-execution flag set by a preceding if command. These commands most often are embedded in an initialization file, to initialize elvis properly under a variety of conditions. The following gives an example if command that can be embedded in a user's .exrc file. The command correctly sets up the colors for both the system console and for an X terminal window. It works around the fact that the console can handle color, but an X terminal window cannot: if term="console" then color yellow on blue | color quit white on blue else color black on white To disable these commands, add -DNO_IF to CFLAGS, then recompile elvis. set Options As noted above, the command set can set elvis's internal options. Options come in three flavors: boolean, which turn on or off a feature of the editor; string which define the string associated with a particular action; (e.g., the name of a command or feature); and numeric, which set a dimension for the editor (e.g., the number of rows or columns on the terminal screen). To turn off a boolean option, prefix it with the string ``no''. The following lists the options that set recognizes. Assume that the boolean options are on, unless the entry says otherwise: autoindent (boolean) Auto-indent during input? Default is no. autoprint (boolean) When in ex mode, print the current line. autotab (boolean) Can auto-indent use tabs? autowrite (boolean) Is auto-write on when switching files? Default is no. beautify (boolean) Should the editor strip control characters from a file? Default is no. charattr (boolean) Interpret \fX sequences? Default is no. cc (string) Name of the C compiler. Default is cc -c. columns (numeric) Width of the screen. Default is 80. digraph (boolean) Recognize digraphs? Default is no. directory (string) Where are temporary files kept? Default is /usr/tmp. edcompatible (boolean) Remember ``:s//'' options? Default is no. equalprg (boolean) Program to run for the `=' operator. Default is fmt. errorbells (boolean) Beep when an error occurs. exrc (boolean) Read the ./.exrc file? Default is no. exrefresh (boolean) Write lines individually when in ex mode. flash (boolean) Use visible alternative to bell. flipcase (string) Non-ASCII chars flipped by the tilde character `~'. Default is the NULL string. hideformat (boolean) Hide text formatter commands. ignorecase (boolean) Make searches case sensitive. While in ignorecase mode, the searching mechanism does not distinguish between an upper- case letter and its lower-case form. In noignorecase mode, upper case and lower case are treated as being different. Default is no. inputmode (boolean) Start vi in insert mode? Default is no. keytime (numeric) Timeout for mapped key entry. Default is two. keywordprg (string) Path name of program invoked by shift-K. Default is ref. lines (numeric) Number of lines on the screen. Default is 25. list (boolean) Display lines in list mode? Default is no. magic (boolean) Enable the use of regular expressions in a search. While in magic mode, all meta-characters behave as described above. In nomagic mode, only ^ and $ retain their special meaning. make (string) Name of the ``make'' program. Default is make. mesg (boolean) Allow messages from other users? modelines (boolean) Are mode lines processed? Default is no. more (boolean) Pause between messages? nearscroll (numeric) This governs when to scroll versus when to redraw the screen. If you move the cursor more than the number of lines set by this option, elvis redraws the screen; otherwise, it scrolls the screen. The default is 15 lines. novice (boolean) Set options for ease of use? Default is no. number (boolean) Turn on line numbering. paragraphs (string) Names of nroff ``paragraph'' commands. Default is PPppIPLPQP. prompt (boolean) Show `:' prompt in ex mode. readonly (boolean) Prevent overwriting of original file. Default is no. remap (boolean) Allow key maps to call other key maps. report (numeric) Report when a given number of changes occur. Default is five. ruler (boolean) Display line and column numbers. Default is no. safer Toggle elvis' security option. This option is set temporarily during the execution of any command from modeline or ./.exrc. It disables the following commands: :! :Next :abbreviate :args:cc :cd :chdir :ex :file :make :map :mkexrc :next :pop :previous :rewind :shell :stop :suspend :tag :unab :unmap :visual :write Note that set safer does not disable :wq, as this command does not let the user name the file into which to write. :read is still allowed, but it will not let the user read from a filter. set safer forbids the user from altering the following options: autowrite cc directory equalprg keywordprg make shell trapunsafe It also disables wildcard expansion and the visual `!' command. scroll (numeric) Set the number of lines the screen scrolls with the <ctrl-D> and <ctrl-U> commands. Default is 12. sections (string) Names of nroff ``section'' commands. Default is NHSHSSSEse. shell (string) Path name of the shell. Default is /bin/sh. showmatch (boolean) Show all matching parentheses, brackets, and braces. Default is no. showmode (boolean) Say when editor is in input mode. Default is no. shiftwidth (numeric) Set number of characters the < and > commands shift the screen. Default is eight. sidescroll (numeric) Set number of columns the editor scrolls. Default is eight. sync (boolean) Call sync() often? Default is no. tabstop (numeric) Number of columns set by a tab character. Default is eight. taglength (numeric) Number of significant characters in a tag name. Default is zero. tags (string) Name the list of ``tags'' files that elvis can read. tagstack (boolean) Enable the tagstack. Default is no. term (string) Name of the current terminal's termcap entry. Default is $TERM. terse (boolean) Give shorter error messages? Default is no. timeout (boolean) Distinguish <esc> from an arrow key? warn (boolean) Warn if a file has been modified? window (numeric) Number of lines to redraw after long move. Default is 24. wrapmargin (numeric) Left margin to use when wrapping long lines in input mode. Default is zero. wrapscan (boolean) Searches wrap from end to beginning of the file. writeany (boolean) Let the write command :w clobber a file. Default is no. Input-Mode Commands Most keystrokes are interpreted as being text and inserted directly into the text; however, some keystrokes are still interpreted as commands. Thus, you can perform an entire session of simple editing directly within input mode without switching to either of the command modes. The following summarizes the commands that can be executed directly within input mode: <ctrl-A> Insert a copy of the last input text. <ctrl-C> Send the signal SIGINT to interrupt a command. <ctrl-D> Delete one indent character. <ctrl-H> Erase the character before the cursor. <ctrl-L> Redraw the screen. <ctrl-M> Insert a newline. <ctrl-P> Insert the contents of the cut buffer. <ctrl-R> Redraw the screen, like <ctrl-L>. <ctrl-T> Insert an indent character. <ctrl-U> Move to the beginning of the line. When you are typing a command line or search pattern on the bottom line, <ctrl- U> backspaces over all characters typed so far. <ctrl-V> Insert the following keystroke, even if special. <ctrl-W> Backspace to the beginning of the current word. <ctrl-Z><ctrl-Z> Write the file and exit elvis. <ctrl-Z> Save the file if it has been modified, but do not exit from elvis. This works only if you have set the mode autowrite. <esc> Shift from input mode to visual-command mode. <del> Delete the current character. When elvis is in input mode, you can use the keystroke <ctrl-O> to invoke some visual commands without exiting from input mode. For example, when you are in input mode, typing <ctrl-O>J moves down a line but leaves you in input mode. Keyboard Macros elvis Beginning with release 1.8, elvis can record keystokes into a cut buffer. This is equivalent to a MicroEMACS ``keyboard macro''. The following commands manipulate keyboard macros: [a Open a keyboard macro. elvis executes all subsequent keystrokes as normal, but also records them within a temporary buffer. ]a Stop recording keystrokes, and copy the keystrokes into the cut buffer. @a To replay the recorded keystrokes. Command-line Options elvis lets you name up to 27 files on the command line, thus allowing you to edit up to 27 files simultaneously. The ``next file'' and ``previous file'' commands described above allow you to shift from one file to another during the same editing session; in this way, for example, you can cut text from one file and paste it into another. elvis recognizes the following command-line options: -r Recover a previous edit. -R Invoke elvis in ``read-only'' mode. This is equivalent to invoking elvis via the link view. -s Invoke elvis in ``safer'' mode. This is equivalent to the command set safer, described above. -t tag Begin editing at tag. -m [ file ] Invoke elvis in error-handling mode. It searches through file for something that looks like an error message from a compiler, then positions the cursor at that point for editing. -e Begin in colon-command mode. -v Begin in visual-command mode. -i Begin in input mode. -w winsize Set the value of option window, which sets the size of the screen with which elvis works, to winsize. window is described below. +command Execute command immediately upon beginning editing. For example elvis +237 foo causes elvis to move directly to line 237 immediately upon beginning to edit file foo. Regular Expressions elvis uses regular expressions for searching and substitutions. A regular expression is a text string in which some characters have special meanings. This is much more powerful than simple text matching. elvis's regexp package treats the following one- or two-character strings (called meta-characters) in special ways: \( \) Delimit subexpressions. When the regular expression matches a chunk of text, elvis remembers which portion of that chunk matched the subexpression. The command :s/regexp/newtext/ command makes use of this feature. ^ Match the beginning of a line. For example, to find foo at the beginning of a line, use the regular expression /^foo/. Note that ^ is a metacharacter only if it occurs at the beginning of a regular expression; anywhere else, it is treated as a normal character. $ Match the end of a line. It is a metacharacter only when it occurs at the end of a regular expression; elsewhere, it is treated as a normal character. For example, the expression /$$/ searches for a dollar sign at the end of a line. \< Match a zero-length string at the beginning of a word. A word is a string of one or more letters and digits; it can begin at the beginning of a line or after one or more non-alphanumeric characters. \> Matches a zero-length string at the end of a word. A word can end at the end of the line or before one or more non-alphanumeric characters. For example, /\<endgt;/ finds any instance of the word end, but ignores any instances of ``end'' inside another word, such as ``calendar''. . Match any single character. [character-list] Match any single character from the character-list. Inside the character-list, you can denote a span of characters by writing the first and last characters, with a hyphen between them. If the character-list is preceded by a ^, then the list is inverted -- it matches all characters not mentioned in the list. For example, /[a- zA-Z]/ matches any letter, and /[^ ]/ matches anything other than a blank. \{n\} Repeat the preceding expression n times. This operator can only be placed after something that matches a single character. For example, /^-\{80\}$/ matches a line of eighty hyphens, and /\<[a-zA- Z]\{4\}\>/ matches any four-letter word. \{n,m\} Repeat the preceding single-character expression between n and m times, inclusive. If the m is omitted (but the comma is present) then it is taken to be infinity. For example, /"[^"]\{3,5\}"/ matches any pair of quotation marks that enclose three, four, or five non- quotation characters. * Repeat the preceding single-character expression zero or more times. For example, /.*/ matches a whole line. /+ Repeat the preceding single-character expression one or more times. It is equivalent to \{1,\}. For example, /.\+/ matches a whole line, but only if the line contains at least one character. It does not match empty lines. /? The preceding single-character expression is optional -- that is, that it can occur zero or one times. It is equivalent to \{0,1\}. For example, /no[- ]?one/ matches no one, no-one, and noone. Anything else is treated as a normal character that must exactly match a character from the scanned text. The special strings may all be preceded by a backslash to force them to be treated normally. Substitutions The command :s has at least two arguments: a regular expression and a substitution string. The text that matches the regular expression is replaced by text that is derived from the substitution string. Most characters in the substitution string are copied into the text literally but a few have special meaning: & Insert a copy of the original text. ~ Insert a copy of the previous replacement text. \1 Insert a copy of that portion of the original text that matched the first set of parentheses. \2-\9 Do the same for the second and all subsequent pairs of parentheses. \U Convert all characters of any later & or \# to upper case. \L Convert all characters of any later & or \# to lower case. \E End the effect of \U or \L. \u Convert the first character of the next & or # to upper case. \l Convert the first character of the next & or \# to lower case. These may be preceded by a backslash to force them to be treated normally. If nomagic mode is in effect, then & and ~ will be treated normally, and you must write them as \& and \~ for them to have special meaning. Preserving Text Should elvis sense that it is about to die unexpectedly, it invokes the command elvprsv to save the temporary file in which it manipulates the file you are editing. To recover this saved file, use the command elvrec. Both commands are described in the Lexicon. Initialization Files When you invoke elvis, it searches for file $HOME/.exrc. If it finds that file, it reads the file and attempts to execute its contents as a series of ex commands. (As noted earlier, ex commands simply are elvis' set of colon-mode commands, but without the preceding colon.) Usually, this file is used to contain instances of the commands set and color, to set up elvis' environment and appearance to your taste. For example, if your .exrc file contains the commands color white on blue set ignorecase set inputmode then elvis sets the screen's background color to blue and its foreground color to white; turn on ignorecase mode (that is, string searches will ignore case), and come up in input mode rather than command mode. The file $HOME/elvis.rc is a synonym for $HOME/.exrc. When you invoke elvis, it also searches for the file $HOME/.exfilerc This file holds ex commands that elvis executes every time it loads a text file for editing. You can embed if commands in this file so that elvis handles special classes of files uniquely. For example, you can use an if command to tell elvis to handle files with the suffix .c differently from other files; this lets you invoke special editing functions for C programs. Examples The first example changes every occurrence of ``utilize'' to ``use'': :%s/utilize/use/g The next example deletes all white space that occurs at the end of a line anywhere in the file. (The brackets contain a single space and a single tab character): :%s/[ ]+$// The next example converts the current line to upper case: :s/.*/U&/ The next example underlines each letter in the current line, by changing it into an underscore backspace letter sequence. (The <ctrl-H> is entered as <ctrl-V><backspace>): :s/[a-zA-Z]/_^H&/g The last example locates the last colon in a line, and swaps the text before the colon with the text after the colon. The first pair of parentheses delimits the stuff before the colon, and the second pair delimits the stuff after. In the substitution text, \1 and \2 are given in reverse order to perform the swap: :s/\(.*\):\(.*\)/\2:\1/ Environment elvis reads the following environmental variables: TERM This names your terminal's entry in the termcap or terminfo data base. TERMCAP Optional. If your system uses termcap, and the TERMCAP variable is not set, then elvis reads your terminal's definition from /etc/termcap. If TERMCAP is set to the full path name of a file (beginning with a `/'), it reads your terminal's description from the named file instead of from /etc/termcap. If TERMCAP is set to a value that does not begin with a `/', then elvis assumes that its value is the full termcap entry for your terminal. TERMINFO Optional. elvis treats this exactly like the environmental variable TERMCAP, except for the terminfo data base. LINES COLUMNS Optional. These variables, if set, override the screen-size values given in the termcap or terminfo description of your terminal On windowing systems such as X, elvis has other ways to determine the screen size, so you should probably leave these variables unset. EXINIT Optional. This variable can hold ex commands that elvis executes before it reads any .exrc files. SHELL Optional. This variable sets the default value for the shell option, which determines which shell program elvis uses to perform wildcard expansion in file names, and to execute filters or external programs. The default value is /bin/sh. HOME This variable should be set to the name of your home directory. elvis looks for its initialization file there. If HOME is not set, then elvis does not execute the initialization file. TAGPATH Optional. This variable is used by the program ref. See "ref" for more information. Bug Fixes from Release 1.7 Beginning with release 4.2.10, COHERENT includes elvis release 1.8pl3. The following describes the bugs that this release fixes The initial release of elvis 1.8 includes the following bug fixes: -> Most screen update bugs are fixed. Most of ones that were not fixed can be avoided by :set nooptimize. -> A bug in the visual `@' command was fixed. This bug can be blamed for most of elvis' incompatibility with fancy macro packages. elvis can now run the ``Bouncing Ball,'' ``Word Completion,'' and ``Turing'' macros with no changes. NB, it still cannot run ``Towers of Hanoi.'' The following bug fixes are included in patch-level 1 (pl1): -> Fixed a bug that caused core dump when you use the `}' command used on blank line after last paragraph in file. -> Fixed a bug that caused loss of text with AutoIndent enabled, when two newlines are inserted into the middle of a line. The following bug fixes are included in patch-level 2 (pl2): -> Fixed a security hole on some UNIX systems. -> After :w, # refers to the file just written. -> Fixed bug in tag lookup. -> The compiler error parser now allows `_' in a file name. -> Fixed a bug that caused some blank lines in the file .exrc to be interpreted as :p commands. -> Increased the limit on word size for the command <ctrl-A>. The old limit was 30; the new limit is 50. If you exceed this limit, elvis will now search for the longest possible substring; before, it would bomb. To change the limit, add -DWSRCH_MAX=n (where n gives the limit on word size) to CFLAGS in the Makefile, then recompile elvis. -> Increased the size of an array used while showing option settings. The old size could overflow if you did a :set all on some systems. Now, the maximum size is calculated at compile time, and the array is declared to this size. -> The command 5r<ctrl-M> now leaves the cursor in the right place. In earlier releases, 5r<ctrl-M> would replace five characters with five newline characters, and leave the cursor five lines lower. Release 1.8 replaced five characters with a single newline character, to mimic the real vi better, but still left the cursor five lines lower. This patch finally makes it right. The following bug fixes are included in patch-level 2 (pl2): -> Corrected bugs in :tag and :make, which caused tag addresses and error messages to be forgotten after switching files. The .exfilerc feature interacted with these bugs, and made them pretty obnoxious. A similar bug caused the command :e +cmd file to start misbehaving; it has been fixed, too. -> The option window now defaults to zero. Zero is a special value, which means ``use as many rows as possible.'' Previously, this option defaulted to the maximum number of rows available when elvis started (usually 24), which resulted in `@' signs appearing on the screen if you resized the display while elvis was running. This problem only showed up when you ran elvis in an X terminal window. -> A bug has been fixed in autoindentation. Previously, if you inserted a newline before the first non-whitespace character on a line, then everything after the insertion point was wiped out. (This is different from the bug that pl2 fixed. pl2's fix addresses a bug that affected insertion of multiple newlines anywhere in a lines; this one affects inserting a single newline before the first non-whitespace character.) -> To avoid linking problems on various systems, the variable kD has been renamed kDel, and function ioctl() in pc.c renamed elvis_ioctl. -> A bug that caused :! to clobber the value of # (i.e., the previous file name) has been fixed. -> There is a bug that affects screen redraws after pasting (the visual p and P commands). In an attempt to work around this bug, elvis will sometimes redraw the screen from scratch after a multi-line paste. -> Some people have reported problems using fmt on non-English text. I suspect that this is due to a faulty implementation of isspace() in the standard C library. In release 1.8pl3, fmt does not use isspace() anymore; it uses a built-in macro which explicitly tests for <space> or <tab>. This may solve the problem. Files /tmp/elv* -- Temporary files tags -- Data base used by the tags command $HOME/.exrc -- File that sets personal defaults $HOME/.exfilerc -- File that sets defaults when a file is read $HOME/elvis.rc -- Same as .exrc See Also commands, ed, elvprsv, elvrec, ex, fmt, me, vi, view Notes elvis returns zero if the file being edited was updated. It returns one if the file was not updated, and a different nonzero value if an error occurred. Full documentation for elvis is included with this release in compressed file /usr/src/alien/Elvis.doc.Z. elvis is copyright © 1990 by Steve Kirkendall, and was written by Steve Kirkendall (kirkenda@cs.pdx.edu or uunet!tektronix!psueea!eecs!kirkenda), assisted by numerous volunteers. It is freely redistributable, subject to the restrictions noted in included documentation. Source code for elvis is available through the Mark Williams bulletin board, USENET, and numerous other outlets.