(Note: quick reference)
The editor is line oriented. It has two different modes, Command Mode and Insert Mode. In Command Mode, commands may be given that affect a range of lines in the main buffer. In Insert Mode, new lines may be added to the main buffer. Apart from the main buffer, lines may be copied to and from 26 secondary buffers. The editor remembers the current line and at most 26 marked lines in the main buffer, and has some status-affecting variables which can be changed by the user. 1. Insert Mode In Insert Mode, each line typed by the user is inserted into the main buffer. Insert Mode is indicated by the prompt '*'. Insert Mode is entered with the commands 'append', 'change' and 'insert' from Command Mode, and is left by typing a line consisting of a single '.'. 2. Command Mode In Command Mode, the user may issue commands that affect the current line, all lines or a specified range of lines. Command Mode is indicated by the prompt ':'. After a command has been executed, the new current line will usually be displayed. The most general format of commands is as follows: address1 , address2 command ! parameters count flags <address1> and <address2> specify the first and last line of a range of lines that are to be affected by the command. If no second line address is given, the range is assumed to be <address1, address1>. If no line range is specified at all, a default range is assumed, usually just the current line. <command> is a string of letters or non-digits. <!> may be given with some commands to specify a different, but similar operation. Some commands require <parameters>. A <count> may be given with many commands to specify the number of lines that is to be affected by the command, as an alternative to specifying the first and last line. A <count> will always override <address2>, if given. Finally, <flags> may be given to affect the way in which the new current line is displayed after the command has been executed. All parts are optional, even the command itself may be omitted. A range of lines without a following command will print the lines specified. A single <address> will set the current line to <address>, and the 'empty command' will set the current line to the next line. 2.1 Line addressing An <address> specifies a line in the main buffer. It may be a number, '.' or '$', a regular expression, a marked line, or an expression containing one of the previous and an offset. The most general format is: [number | . | $ | /pattern/ | ?pattern? | 'm] [+ | -] [number] Lines in the main buffer are numbered starting with 1. A number may be given to specify a line. '.' denotes the current line, and '$' the last line in the main buffer. A regular expression must be enclosed within '/' or '?' pairs. '/pattern/' will search forward, starting with the line after the current line, and '?pattern?' will search backward. If no pattern is specified, '//' or '??' will respectively search forward and backward, using the previous regular expression. If the regular expression forms the whole command, the closing '/' or '?' may be omitted. A marked line is specified by a single quote "'", followed by a lowercase letter. The mark must have been set by the 'mark' command. Offsets may be given to a given <address> using '+' and '-', followed by a number. If the '+' or '-' sign is not preceded by an <address>, the current line is assumed. If the '+' or '-' sign is not followed by a number, the number 1 is assumed. Offsets may be repeated, with a cumulative effect. A range of lines is indicated by <address1, address2>. Either of the addresses may be omitted: <address, > means <address, address> <, address> means <., address> <,> means <., .> Alternatively, ',' can be replaced with ';'. This has the effect of setting the current line to <address1>, just before <address2> is evaluated. '%' is an alias for '1,$'. 2.1.1 Regular expressions In a regular expression, characters may form a string that is searched for in the main buffer. Only strings on a single line can be searched for. Some characters and character sequences have a special meaning in regular expressions: ^ matches the beginning of the line. $ matches the end of the line. . matches any single character. \< matches the beginning of a word (LPC identifier). \> matches the end of a word (LPC identifier). [string] matches any single character in the string between the square brackets. a-z specifies a range of characters, and if the first character following the opening '[' is '^', any character NOT in the string is matched. * matches 0, 1 or more occurances of the preceding (single character matching) pattern. \( and \) does not match a pattern, but indicate the beginning and end of a subpattern that can be used in the 'substitute' command. If any of the symbols '^', '$', '.', '[', '*' or '\' itself is desired in regular expressions, it should be prefixed by '\'. Depending on the value of the 'ignorecase' variable, which can be changed with the 'set' command, lowercase letters may match either just the lowercase letter or both uppercase and lowercase. By default, only lowercase letters are matched. 2.1.2 Marked lines Lines in the main buffer can be given a mark, consisting of a lowercase letter, which afterwards can be used in line addresses to refer to the marked line. This is done with the 'mark' command. 2.2 Secondary buffers Apart from the main buffer, the editor maintains 26 secondary buffers which are addressed by letters. A range of lines from the main buffer may be copied into a secondary buffer, and the contents of a secondary buffer may be copied into the main buffer. When copying lines to a secondary buffer, a lowercase letter indicates that the previous contents of the secondary buffer (if any) is to be replaced, and an uppercase letter indicates that the lines are to be appended to the secondary buffer. When copying back lines from a secondary buffer, case of the letter specifying the buffer is not significant. 2.2.1 Default buffer Each command that has the option of copying lines into a secondary buffer, always stores the lines in a default buffer also. If no secondary buffer is specified when lines are copied back to the main buffer, lines are copied from the default buffer. 2.3 Flags Many commands may followed by one of the characters 'p', 'l', '#', '+' and '-', which affect the way in which the current line is displayed after the command is executed or, if the command itself prints lines, in which way these lines are printed. The characters have the following meaning: p print the current line after the command has finished. This usually happens automatically. l print the current line after the command has finished, in 'list' format. # print the current line after the command has finished, in 'number' format. + increase the current line number by 1 before printing it. - decrease the current line number by 1 before printing it. Flags may be repeated, with a cumulative effect. 2.4 Multiple commands inside a global command More than one command may be given inside a global command, by separating the individual commands with '|'. 2.5 Command summary In the following list of commands, the default line range is shown in parenthesis, and an optional parameter is marked with '[' ']'. After each command, the current line is set at the last line changed or displayed. RANGE COMMAND ABBREV (.) append a Enter Insert Mode and append lines after the specified line. A line address of 0 may be given to indicate that lines are to be inserted before the first line in the main buffer. (.,.) change [count] c Enter Insert Mode and replace the specified lines. (.,.) copy address [count] [flags] co Place a copy of the specified lines after the given address. The address may be 0, in which case the copied lines are inserted before the first line in the main buffer. (.,.) delete [buffer] [count] [flags] d Delete the specified lines. The deleted lines are saved in the default buffer, and in the secondary buffer if one is specified. edit [file] e Start editing a new file. The current main buffer and all secondary buffers will be discarded. The current line will be placed at the last line of the main buffer. edit! [file] e! Start editing a new file, even if the current main buffer was modified. file [file] f Show statistics on the current file edited. If an argument is given, the current file name is changed into the one specified. (1,$) global /pattern/ [command] g Execute the command on all lines matching the given pattern. By default, the matching lines are just printed. (1,$) global! /pattern/ [command] g! Execute the command on all lines not matching the given pattern. By default, the lines that don't match are just printed. (.) insert i Enter Insert Mode and insert lines before the specified one. (.,.+1) join [count] [flags] j Join the specified lines together in a single line. White space at the beginning of a next line will be discarded. Unless the next line starts with ')', a space is inserted between two joined lines, or two spaces if the first line ends in '.'. (.,.+1) join! [count] [flags] j! Join the specified lined together in a single line without white space processing. (.,.) list [count] [flags] l Show the specified lines, displaying tabs as '^I' and marking the end of the line with '$'. (.) mark x k Mark the specified line with x, a single lowercase letter. If the abbreviation 'k' is used, there need not be any spaces between the command and the argument. (.,.) move address [flags] m Reposition the specified lines after the given address. (.,.) number [count] [flags] # Display the specified lines, preceded by their line number. (.,.) print [count] [flags] p Display the specified lines. (.) put [buffer] pu Copy lines from the secondary buffer, or from the default buffer if none is given, after the specified line. quit q Quit this editing session. quit! q! Quit this editing session, even if the main buffer has been modified. (.) read [file] r Place a copy of the text in [file] after the specified line. set [parameter] se Set without argument shows the current values of the editor variables. Variables are numeric or toggles. Toggles can be turned on with 'set option' and turned off with 'set nooption'. Numeric variables can be given a value with 'set numeric=value'. The following variables exist: NAME ABBREV DEFAULT MEANING ignorecase ic noic ignore case in searches. shiftwidth sw 4 affects the '<', '>' and 'I' commands. window wi 20 specifies the number of lines displayed with the z command. (.,.) substitute /pattern/replacement/ [g] [count] [flags] s Replace <pattern> by <replacement> in the specified lines. If the 'g' option is specified, repeat the substitution in each line until all occurrances of <pattern> have been replaced. In <replacement>, \x, where x is a digit in range 1-9, specifies the xth subexpression in <pattern>, which is enclosed by \( \) pairs in <pattern>. Furthermore, '&' in <replacement> specifies the text that matched <pattern>, and '\n' in <replacement> specifies a newline, splitting the line in two. If the symbols '&' and '\' themselves are desired in <replacement>, they should be prefixed by '\'. All parameters are optional. 'substitute' by itself will repeat the previous substitution. (.,.) t address [flags] An alias for the 'copy' command. undo u Undo the effects of the previous command on the main buffer. 'edit' and 'yank' commands can not be undone, and 'global' commands are undone as a whole. (1,$) v /pattern/ [command] An alias for the 'global!' command. (1,$) write [file] w Write the specified lines to [file], or to the current file if no argument is specified. (1,$) write! [file] w! Write the specified lines to [file], even if some error occurred that prevented the main buffer from containing an exact image of the file that is being edited. (1,$) write >> [file] w>> This variant of write appends to a file, instead of overwriting it. (1,$) wq [file] Write the main buffer to the current file, and quit this editing session. (1,$) wq! [file] Write the main buffer to the current file and quit this editing session, even if some error occurred that prevented the main buffer from containing an exact image of the file that is being edited. xit [file] x Write the main buffer to the current file if it was modified, and quit this editing session. (.,.) yank [buffer] [count] [flags] y Copy the specified lines to the secondary buffer given in the argument, or just to the default buffer if no argument is given. (.+1) z [mode] [flags] Show a page of lines, starting with the specified line. The number of lines displayed is determined by the value of the 'window' variable, which can be changed by the 'set' command. [mode] can be one of the following: + show specified line at top of page (default) . show specified line in middle of page - show specified line at bottom of page (.,.) < [count] [flags] Leftshift the specified lines the number of spaces given by the 'shiftwidth' variable, which can be changed by the 'set' command. (.,.) > [count] [flags] Rightshift the specified lines the number of spaces given by the 'shiftwidth' variable, which can be changed by the 'set' command. ($) = Show the specified line number. (1,$) I [flags] Indent the specified lines, under the assumption that they are LPC code. The number of spaces used for indentation is given by the 'shiftwidth' variable, which can be changed by the 'set' command.