diff options
Diffstat (limited to 'runtime/doc/vi_diff.txt')
-rw-r--r-- | runtime/doc/vi_diff.txt | 1365 |
1 files changed, 1365 insertions, 0 deletions
diff --git a/runtime/doc/vi_diff.txt b/runtime/doc/vi_diff.txt new file mode 100644 index 0000000..1714833 --- /dev/null +++ b/runtime/doc/vi_diff.txt @@ -0,0 +1,1365 @@ +*vi_diff.txt* For Vim version 9.1. Last change: 2022 Apr 03 + + + VIM REFERENCE MANUAL by Bram Moolenaar + + +Differences between Vim and Vi *vi-differences* + +This file lists the differences between Vim and Vi/Ex and gives an overview of +what is in Vim that is not in Vi. + +Vim is mostly POSIX 1003.2-1 compliant. The only command known to be missing +is ":open". There are probably a lot of small differences (either because Vim +is missing something or because Posix is beside the mark). + +1. Simulated command |simulated-command| +2. Missing options |missing-options| +3. Limits |limits| +4. The most interesting additions |vim-additions| +5. Other vim features |other-features| +6. Supported Vi features |vi-features| +7. Command-line arguments |cmdline-arguments| +8. POSIX compliance |posix-compliance| + +============================================================================== +1. Simulated command *simulated-command* + +This command is in Vi, but Vim only simulates it: + + *:o* *:op* *:open* +:[range]o[pen] Works like |:visual|: end Ex mode. + {Vi: start editing in open mode} + +:[range]o[pen] /pattern/ As above, additionally move the cursor to the + column where "pattern" matches in the cursor + line. + +Vim does not support open mode, since it's not really useful. For those +situations where ":open" would start open mode Vim will leave Ex mode, which +allows executing the same commands, but updates the whole screen instead of +only one line. + +============================================================================== +2. Missing options *missing-options* + +These options are in the Unix Vi, but not in Vim. If you try to set one of +them you won't get an error message, but the value is not used and cannot be +printed. + +autoprint (ap) boolean (default on) *'autoprint'* *'ap'* +beautify (bf) boolean (default off) *'beautify'* *'bf'* +flash (fl) boolean (default ??) *'flash'* *'fl'* +graphic (gr) boolean (default off) *'graphic'* *'gr'* +hardtabs (ht) number (default 8) *'hardtabs'* *'ht'* + number of spaces that a <Tab> moves on the display +mesg boolean (default on) *'mesg'* +novice boolean (default off) *'novice'* +open boolean (default on) *'open'* +optimize (op) boolean (default off) *'optimize'* *'op'* +redraw boolean (default off) *'redraw'* +slowopen (slow) boolean (default off) *'slowopen'* *'slow'* +sourceany boolean (default off) *'sourceany'* +w300 number (default 23) *'w300'* +w1200 number (default 23) *'w1200'* +w9600 number (default 23) *'w9600'* + +Vi did not allow for changing the termcap entries, you would have to exit Vi, +edit the termcap entry and try again. Vim has the |terminal-options|. + +============================================================================== +3. Limits *limits* + +Vim has only a few limits for the files that can be edited {Vi: can not handle +<Nul> characters and characters above 128, has limited line length, many other +limits}. + +Maximum line length 2147483647 characters. Longer lines are split. +Maximum number of lines 2147483647 lines. +Maximum file size 2147483647 bytes (2 Gbyte) when a long integer is + 32 bits. Much more for 64 bit longs. Also limited + by available disk space for the |swap-file|. + *E75* +Length of a file path Unix and Win32: 1024 characters, otherwise 256 + characters (or as much as the system supports). +Length of an expanded string option + Unix and Win32: 1024 characters, otherwise 256 + characters +Maximum display width Unix and Win32: 1024 characters, otherwise 255 + characters +Maximum lhs of a mapping 50 characters. +Number of different highlighting types: over 30000 +Range of a Number variable: -2147483648 to 2147483647 (might be more on 64 + bit systems) +Maximum length of a line in a tags file: 512 bytes. + +Information for undo and text in registers is kept in memory, thus when making +(big) changes the amount of (virtual) memory available limits the number of +undo levels and the text that can be kept in registers. Other things are also +kept in memory: Command-line history, error messages for Quickfix mode, etc. + +Memory usage limits +------------------- + +The option 'maxmem' ('mm') is used to set the maximum memory used for one +buffer (in kilobytes). 'maxmemtot' is used to set the maximum memory used for +all buffers (in kilobytes). The defaults depend on the system used. For the +Amiga, 'maxmemtot' is set depending on the amount of memory available. +These are not hard limits, but tell Vim when to move text into a swap file. +If you don't like Vim to swap to a file, set 'maxmem' and 'maxmemtot' to a +very large value. The swap file will then only be used for recovery. If you +don't want a swap file at all, set 'updatecount' to 0, or use the "-n" +argument when starting Vim. + +============================================================================== +4. The most interesting additions *vim-additions* + +Vi compatibility. |'compatible'| + Although Vim is 99% Vi compatible, some things in Vi can be + considered to be a bug, or at least need improvement. But still, Vim + starts in a mode which behaves like the "real" Vi as much as possible. + To make Vim behave a little bit better, try resetting the 'compatible' + option: + :set nocompatible + Or start Vim with the "-N" argument: + vim -N + Vim starts with 'nocompatible' automatically if you have a .vimrc + file. See |startup|. + The 'cpoptions' option can be used to set Vi compatibility on/off for + a number of specific items. + +Support for different systems. + Vim can be used on: + - All Unix systems (it works on all systems it was tested on, although + the GUI and Perl interface may not work everywhere). + - Amiga (500, 1000, 1200, 2000, 3000, 4000, ...). + - MS-Windows + - VMS + - Macintosh + - IBM OS/390 + Note that on some systems features need to be disabled to reduce + resource usage. For some outdated systems you need to use an older + Vim version. + +Multi level persistent undo. |undo| + 'u' goes backward in time, 'CTRL-R' goes forward again. Set option + 'undolevels' to the number of changes to be remembered (default 1000). + Set 'undolevels' to 0 for a Vi-compatible one level undo. Set it to + -1 for no undo at all. + When all changes in a buffer have been undone, the buffer is not + considered changed anymore. You can exit it with :q, without <!>. + When undoing a few changes and then making a new change Vim will + create a branch in the undo tree. This means you can go back to any + state of the text, there is no risk of a change causing text to be + lost forever. |undo-tree| + The undo information is stored in a file when the 'undofile' option is + set. This means you can exit Vim, start Vim on a previously edited + file and undo changes that were made before exiting Vim. + +Graphical User Interface (GUI). |gui| + Included support for GUI: menu's, mouse, scrollbars, etc. You can + define your own menus. Better support for CTRL/SHIFT/ALT keys in + combination with special keys and mouse. Supported for various + platforms, such as X11 with Motif, GTK, Win32 (Windows XP and later), + Amiga and Macintosh. + +Multiple windows and buffers. |windows.txt| + Vim can split the screen into several windows, each editing a + different buffer or the same buffer at a different location. Buffers + can still be loaded (and changed) but not displayed in a window. This + is called a hidden buffer. Many commands and options have been added + for this facility. + Vim can also use multiple tab pages, each with one or more windows. A + line with tab labels can be used to quickly switch between these pages. + |tab-page| + +Terminal window. |:terminal| + Vim can create a window in which a terminal emulator runs. This can + be used to execute an arbitrary command, a shell or a debugger. + +Syntax highlighting. |:syntax| + Vim can highlight keywords, patterns and other things. This is + defined by a number of |:syntax| commands, and can be made to + highlight most languages and file types. A number of files are + included for highlighting the most common languages, like C, C++, + Java, Pascal, Makefiles, shell scripts, etc. The colors used for + highlighting can be defined for ordinary terminals, color terminals + and the GUI with the |:highlight| command. A convenient way to do + this is using a |:colorscheme| command. + The highlighted text can be exported as HTML. |convert-to-HTML| + Other items that can be highlighted are matches with the search string + |'hlsearch'|, matching parens |matchparen| and the cursor line and + column |'cursorline'| |'cursorcolumn'|. + +Text properties |textprop.txt| + Vim supports highlighting text by a plugin. Property types can be + specified with |prop_type_add()| and properties can be placed with + |prop_add()|. + +Spell checking. |spell| + When the 'spell' option is set Vim will highlight spelling mistakes. + About 50 languages are currently supported, selected with the + 'spelllang' option. In source code only comments and strings are + checked for spelling. + +Folding. |folding| + A range of lines can be shown as one "folded" line. This allows + overviewing a file and moving blocks of text around quickly. + Folds can be created manually, from the syntax of the file, by indent, + etc. + +Diff mode. |diff| + Vim can show two versions of a file with the differences highlighted. + Parts of the text that are equal are folded away. Commands can be + used to move text from one version to the other. + +Plugins. |add-plugin| + The functionality can be extended by dropping a plugin file in the + right directory. That's an easy way to start using Vim scripts + written by others. Plugins can be for all kind of files, or + specifically for a filetype. + Packages make this even easier. |packages| + +Asynchronous communication and timers. |channel| |job| |timer| + Vim can exchange messages with other processes in the background. + This makes it possible to have servers do work and send back the + results to Vim. |channel| + Vim can start a job, communicate with it and stop it. |job| + Timers can fire once or repeatedly and invoke a function to do any + work. |timer| + +Repeat a series of commands. |q| + "q{c}" starts recording typed characters into named register {c}. + A subsequent "q" stops recording. The register can then be executed + with the "@{c}" command. This is very useful to repeat a complex + action. + +Flexible insert mode. |ins-special-special| + The arrow keys can be used in insert mode to move around in the file. + This breaks the insert in two parts as far as undo and redo is + concerned. + + CTRL-O can be used to execute a single Normal mode command. This is + almost the same as hitting <Esc>, typing the command and doing |a|. + +Visual mode. |Visual-mode| + Visual mode can be used to first highlight a piece of text and then + give a command to do something with it. This is an (easy to use) + alternative to first giving the operator and then moving to the end of + the text to be operated upon. + |v| and |V| are used to start Visual mode. |v| works on characters + and |V| on lines. Move the cursor to extend the Visual area. It is + shown highlighted on the screen. By typing "o" the other end of the + Visual area can be moved. The Visual area can be affected by an + operator: + d delete + c change + y yank + > or < insert or delete indent + ! filter through external program + = filter through indent + : start |:| command for the Visual lines. + gq format text to 'textwidth' columns + J join lines + ~ swap case + u make lowercase + U make uppercase + {Vi has no Visual mode, the name "visual" is used for Normal mode, to + distinguish it from Ex mode} + +Block operators. |visual-block| + With Visual mode a rectangular block of text can be selected. Start + Visual mode with CTRL-V. The block can be deleted ("d"), yanked ("y") + or its case can be changed ("~", "u" and "U"). A deleted or yanked + block can be put into the text with the "p" and "P" commands. + +Help system. |:help| + Help is displayed in a window. The usual commands can be used to + move around, search for a string, etc. Tags can be used to jump + around in the help files, just like hypertext links. The |:help| + command takes an argument to quickly jump to the info on a subject. + <F1> is the quick access to the help system. The name of the help + index file can be set with the 'helpfile' option. + +Command-line editing and history. |cmdline-editing| + You can insert or delete at any place in the command-line using the + cursor keys. The right/left cursor keys can be used to move + forward/backward one character. The shifted right/left cursor keys + can be used to move forward/backward one word. CTRL-B/CTRL-E can be + used to go to the begin/end of the command-line. + {Vi: can only alter the last character in the line} + {Vi: when hitting <Esc> the command-line is executed. This is + unexpected for most people; therefore it was changed in Vim. But when + the <Esc> is part of a mapping, the command-line is executed. If you + want the Vi behaviour also when typing <Esc>, use ":cmap ^V<Esc> + ^V^M"} + |cmdline-history| + The command-lines are remembered. The up/down cursor keys can be used + to recall previous command-lines. The 'history' option can be set to + the number of lines that will be remembered. There is a separate + history for commands and for search patterns. + +Command-line completion. |cmdline-completion| + While entering a command-line (on the bottom line of the screen) + <Tab> can be typed to complete + what example ~ + - command :e<Tab> + - tag :ta scr<Tab> + - option :set sc<Tab> + - option value :set hf=<Tab> + - file name :e ve<Tab> + - etc. + + If there are multiple matches, CTRL-N (next) and CTRL-P (previous) + will walk through the matches. <Tab> works like CTRL-N, but wraps + around to the first match. + + The 'wildchar' option can be set to the character for command-line + completion, <Tab> is the default. CTRL-D can be typed after an + (incomplete) wildcard; all matches will be listed. CTRL-A will insert + all matches. CTRL-L will insert the longest common part of the + matches. + +Insert-mode completion. |ins-completion| + In Insert mode the CTRL-N and CTRL-P keys can be used to complete a + word that appears elsewhere. |i_CTRL-N| + With CTRL-X another mode is entered, through which completion can be + done for: + |i_CTRL-X_CTRL-F| file names + |i_CTRL-X_CTRL-K| words from 'dictionary' files + |i_CTRL-X_CTRL-T| words from 'thesaurus' files + |i_CTRL-X_CTRL-I| words from included files + |i_CTRL-X_CTRL-L| whole lines + |i_CTRL-X_CTRL-]| words from the tags file + |i_CTRL-X_CTRL-D| definitions or macros + |i_CTRL-X_CTRL-O| Omni completion: clever completion + specifically for a file type + etc. + +Long line support. |'wrap'| |'linebreak'| + If the 'wrap' option is off, long lines will not wrap and only part + of them will be shown. When the cursor is moved to a part that is not + shown, the screen will scroll horizontally. The minimum number of + columns to scroll can be set with the 'sidescroll' option. The |zh| + and |zl| commands can be used to scroll sideways. + Alternatively, long lines are broken in between words when the + 'linebreak' option is set. This allows editing a single-line + paragraph conveniently (e.g. when the text is later read into a DTP + program). Move the cursor up/down with the |gk| and |gj| commands. + +Text formatting. |formatting| + The 'textwidth' option can be used to automatically limit the line + length. This supplements the 'wrapmargin' option of Vi, which was not + very useful. The |gq| operator can be used to format a piece of text + (for example, |gqap| formats the current paragraph). Commands for + text alignment: |:center|, |:left| and |:right|. + +Extended search patterns. |pattern| + There are many extra items to match various text items. Examples: + A "\n" can be used in a search pattern to match a line break. + "x\{2,4}" matches "x" 2 to 4 times. + "\s" matches a white space character. + +Directory, remote and archive browsing. |netrw| + Vim can browse the file system. Simply edit a directory. Move around + in the list with the usual commands and press <Enter> to go to the + directory or file under the cursor. + This also works for remote files over ftp, http, ssh, etc. + Zip and tar archives can also be browsed. |tar| |zip| + +Edit-compile-edit speedup. |quickfix| + The |:make| command can be used to run the compilation and jump to the + first error. A file with compiler error messages is interpreted. Vim + jumps to the first error. + + Each line in the error file is scanned for the name of a file, line + number and error message. The 'errorformat' option can be set to a + list of scanf-like strings to handle output from many compilers. + + The |:cn| command can be used to jump to the next error. + |:cl| lists all the error messages. Other commands are available. + The 'makeef' option has the name of the file with error messages. + The 'makeprg' option contains the name of the program to be executed + with the |:make| command. + The 'shellpipe' option contains the string to be used to put the + output of the compiler into the errorfile. + +Finding matches in files. |:vimgrep| + Vim can search for a pattern in multiple files. This uses the + advanced Vim regexp pattern, works on all systems and also works to + search in compressed files. + +Improved indenting for programs. |'cindent'| + When the 'cindent' option is on the indent of each line is + automatically adjusted. C syntax is mostly recognized. The indent + for various styles can be set with 'cinoptions'. The keys to trigger + indenting can be set with 'cinkeys'. + + Comments can be automatically formatted. The 'comments' option can be + set to the characters that start and end a comment. This works best + for C code, but also works for e-mail (">" at start of the line) and + other types of text. The |=| operator can be used to re-indent + lines. + + For many other languages an indent plugin is present to support + automatic indenting. |30.3| + +Searching for words in included files. |include-search| + The |[i| command can be used to search for a match of the word under + the cursor in the current and included files. The 'include' option + can be set to a pattern that describes a command to include a file + (the default is for C programs). + The |[I| command lists all matches, the |[_CTRL-I| command jumps to + a match. + The |[d|, |[D| and |[_CTRL-D| commands do the same, but only for + lines where the pattern given with the 'define' option matches. + +Automatic commands. |autocommand| + Commands can be automatically executed when reading a file, writing a + file, jumping to another buffer, etc., depending on the file name. + This is useful to set options and mappings for C programs, + documentation, plain text, e-mail, etc. This also makes it possible + to edit compressed files. + +Scripts and Expressions. |expression| + Commands have been added to form up a powerful script language. + |:if| Conditional execution, which can be used for example + to set options depending on the value of $TERM. + |:while| Repeat a number of commands. + |:for| Loop over a list. + |:echo| Print the result of an expression. + |:let| Assign a value to an internal variable, option, etc. + Variable types are Number, String, List and Dictionary. + |:execute| Execute a command formed by an expression. + |:try| Catch exceptions. + etc., etc. See |eval|. + Debugging and profiling are supported. |debug-scripts| |profile| + If this is not enough, an interface is provided to |Python|, |Ruby|, + |Tcl|, |Lua|, |Perl| and |MzScheme|. + +Viminfo. |viminfo-file| + The command-line history, marks and registers can be stored in a file + that is read on startup. This can be used to repeat a search command + or command-line command after exiting and restarting Vim. It is also + possible to jump right back to where the last edit stopped with |'0|. + The 'viminfo' option can be set to select which items to store in the + .viminfo file. This is off by default. + +Printing. |printing| + The |:hardcopy| command sends text to the printer. This can include + syntax highlighting. + +Mouse support. |mouse-using| + The mouse is supported in the GUI version, in an xterm for Unix, for + BSDs with sysmouse, for Linux with gpm, and Win32. It can be used to + position the cursor, select the visual area, paste a register, etc. + +Usage of key names. |<>| |key-notation| + Special keys now all have a name like <Up>, <End>, etc. + This name can be used in mappings, to make it easy to edit them. + +Editing binary files. |edit-binary| + Vim can edit binary files. You can change a few characters in an + executable file, without corrupting it. Vim doesn't remove NUL + characters (they are represented as <NL> internally). + |-b| command-line argument to start editing a binary file + |'binary'| Option set by |-b|. Prevents adding an <EOL> for the + last line in the file. + +Multi-language support. |multi-lang| + Files in double-byte or multibyte encodings can be edited. There is + UTF-8 support to be able to edit various languages at the same time, + without switching fonts. |UTF-8| + Messages and menus are available in different languages. + +Move cursor beyond lines. + When the 'virtualedit' option is set the cursor can move all over the + screen, also where there is no text. This is useful to edit tables + and figures easily. + +============================================================================== +5. Other vim features *other-features* + +A random collection of nice extra features. + + +When Vim is started with "-s scriptfile", the characters read from +"scriptfile" are treated as if you typed them. If end of file is reached +before the editor exits, further characters are read from the console. + +The "-w" option can be used to record all typed characters in a script file. +This file can then be used to redo the editing, possibly on another file or +after changing some commands in the script file. + +The "-o" option opens a window for each argument. "-o4" opens four windows. + +Vi requires several termcap entries to be able to work full-screen. Vim only +requires the "cm" entry (cursor motion). + + +In command mode: + +When the 'showcmd' option is set, the command characters are shown in the last +line of the screen. They are removed when the command is finished. + +If the 'ruler' option is set, the current cursor position is shown in the +last line of the screen. + +"U" still works after having moved off the last changed line and after "u". + +Characters with the 8th bit set are displayed. The characters between '~' and +0xa0 are displayed as "~?", "~@", "~A", etc., unless they are included in the +'isprint' option. + +"][" goes to the next ending of a C function ('}' in column 1). +"[]" goes to the previous ending of a C function ('}' in column 1). + +"]f", "[f" and "gf" start editing the file whose name is under the cursor. +CTRL-W f splits the window and starts editing the file whose name is under +the cursor. + +"*" searches forward for the identifier under the cursor, "#" backward. +"K" runs the program defined by the 'keywordprg' option, with the identifier +under the cursor as argument. + +"%" can be preceded with a count. The cursor jumps to the line that +percentage down in the file. The normal "%" function to jump to the matching +brace skips braces inside quotes. + +With the CTRL-] command, the cursor may be in the middle of the identifier. + +The used tags are remembered. Commands that can be used with the tag stack +are CTRL-T, ":pop" and ":tag". ":tags" lists the tag stack. + +Vi uses 'wrapscan' when searching for a tag. When jumping to a tag Vi starts +searching in line 2 of another file. It does not find a tag in line 1 of +another file when 'wrapscan' is not set. + +The 'tags' option can be set to a list of tag file names. Thus multiple +tag files can be used. For file names that start with "./", the "./" is +replaced with the path of the current file. This makes it possible to use a +tags file in the same directory as the file being edited. +{Vi: always uses binary search in some versions} +{Vi does not have the security prevention for commands in tag files} + +Previously used file names are remembered in the alternate file name list. +CTRL-^ accepts a count, which is an index in this list. +":files" command shows the list of alternate file names. +"#<N>" is replaced with the <N>th alternate file name in the list. +"#<" is replaced with the current file name without extension. + +Search patterns have more features. The <NL> character is seen as part of the +search pattern and the substitute string of ":s". Vi sees it as the end of +the command. + +Searches can put the cursor on the end of a match and may include a character +offset. + +Count added to "~", ":next", ":Next", "n" and "N". + +The command ":next!" with 'autowrite' set does not write the file. In vi the +file was written, but this is considered to be a bug, because one does not +expect it and the file is not written with ":rewind!". + +In Vi when entering a <CR> in replace mode deletes a character only when 'ai' +is set (but does not show it until you hit <Esc>). Vim always deletes a +character (and shows it immediately). + +Added :wnext command. Same as ":write" followed by ":next". + +The ":w!" command always writes, also when the file is write protected. In Vi +you would have to do ":!chmod +w %:S" and ":set noro". + +When 'tildeop' has been set, "~" is an operator (must be followed by a +movement command). + +With the "J" (join) command you can reset the 'joinspaces' option to have only +one space after a period (Vi inserts two spaces). + +"cw" can be used to change white space formed by several characters (Vi is +confusing: "cw" only changes one space, while "dw" deletes all white space). +{Vi: "cw" when on a blank followed by other blanks changes only the first +blank; this is probably a bug, because "dw" deletes all the blanks} + +"o" and "O" accept a count for repeating the insert (Vi clears a part of +display). + +Flags after Ex commands not supported (no plans to include it). + +On non-UNIX systems ":cd" command shows current directory instead of going to +the home directory (there isn't one). ":pwd" prints the current directory on +all systems. + +After a ":cd" command the file names (in the argument list, opened files) +still point to the same files. In Vi ":cd" is not allowed in a changed file; +otherwise the meaning of file names change. + +":source!" command reads Vi commands from a file. + +":mkexrc" command writes current modified options and mappings to a ".exrc" +file. ":mkvimrc" writes to a ".vimrc" file. + +No check for "tail recursion" with mappings. This allows things like +":map! foo ^]foo". + +When a mapping starts with number, vi loses the count typed before it (e.g. +when using the mapping ":map g 4G" the command "7g" goes to line 4). This is +considered a vi bug. Vim concatenates the counts (in the example it becomes +"74G"), as most people would expect. + +The :put! command inserts the contents of a register above the current line. + +The "p" and "P" commands of vi cannot be repeated with "." when the putted +text is less than a line. In Vim they can always be repeated. + +":noremap" command can be used to enter a mapping that will not be remapped. +This is useful to exchange the meaning of two keys. ":cmap", ":cunmap" and +":cnoremap" can be used for mapping in command-line editing only. ":imap", +":iunmap" and ":inoremap" can be used for mapping in insert mode only. +Similar commands exist for abbreviations: ":noreabbrev", ":iabbrev" +":cabbrev", ":iunabbrev", ":cunabbrev", ":inoreabbrev", ":cnoreabbrev". + +In Vi the command ":map foo bar" would remove a previous mapping +":map bug foo". This is considered a bug, so it is not included in Vim. +":unmap! foo" does remove ":map! bug foo", because unmapping would be very +difficult otherwise (this is vi compatible). + +The ':' register contains the last command-line. +The '%' register contains the current file name. +The '.' register contains the last inserted text. + +":dis" command shows the contents of the yank registers. + +CTRL-O/CTRL-I can be used to jump to older/newer positions. These are the +same positions as used with the '' command, but may be in another file. The +":jumps" command lists the older positions. + +If the 'shiftround' option is set, an indent is rounded to a multiple of +'shiftwidth' with ">" and "<" commands. + +The 'scrolljump' option can be set to the minimum number of lines to scroll +when the cursor gets off the screen. Use this when scrolling is slow. + +The 'scrolloff' option can be set to the minimum number of lines to keep +above and below the cursor. This gives some context to where you are +editing. When set to a large number the cursor line is always in the middle +of the window. + +Uppercase marks can be used to jump between files. The ":marks" command lists +all currently set marks. The commands "']" and "`]" jump to the end of the +previous operator or end of the text inserted with the put command. "'[" and +"`[" do jump to the start. {Vi: no uppercase marks} + +The 'shelltype' option can be set to reflect the type of shell used on the +Amiga. + +The 'highlight' option can be set for the highlight mode to be used for +several commands. + +The CTRL-A (add) and CTRL-X (subtract) commands are new. The count to the +command (default 1) is added to/subtracted from the number at or after the +cursor. That number may be decimal, octal (starts with a '0') or hexadecimal +(starts with '0x'). Very useful in macros. + +With the :set command the prefix "inv" can be used to invert boolean options. + +In both Vi and Vim you can create a line break with the ":substitute" command +by using a CTRL-M. For Vi this means you cannot insert a real CTRL-M in the +text. With Vim you can put a real CTRL-M in the text by preceding it with a +CTRL-V. + + +In Insert mode: + +If the 'revins' option is set, insert happens backwards. This is for typing +Hebrew. When inserting normal characters the cursor will not be shifted and +the text moves rightwards. Backspace, CTRL-W and CTRL-U will also work in +the opposite direction. CTRL-B toggles the 'revins' option. In replace mode +'revins' has no effect. Only when enabled at compile time. + +The backspace key can be used just like CTRL-D to remove auto-indents. + +You can backspace, CTRL-U and CTRL-W over line breaks if the 'backspace' (bs) +option includes "eol". You can backspace over the start of insert if the +'backspace' option includes "start". + +When the 'paste' option is set, a few options are reset and mapping in insert +mode and abbreviation are disabled. This allows for pasting text in windowing +systems without unexpected results. When the 'paste' option is reset, the old +option values are restored. + +CTRL-T/CTRL-D always insert/delete an indent in the current line, no matter +what column the cursor is in. + +CTRL-@ (insert previously inserted text) works always (Vi: only when typed as +first character). + +CTRL-A works like CTRL-@ but does not leave insert mode. + +CTRL-R {register} can be used to insert the contents of a register. + +When the 'smartindent' option is set, C programs will be better auto-indented. +With 'cindent' even more. + +CTRL-Y and CTRL-E can be used to copy a character from above/below the +current cursor position. + +After CTRL-V you can enter a three digit decimal number. This byte value is +inserted in the text as a single character. Useful for international +characters that are not on your keyboard. + +When the 'expandtab' (et) option is set, a <Tab> is expanded to the +appropriate number of spaces. + +The window always reflects the contents of the buffer (Vi does not do this +when changing text and in some other cases). + +If Vim is compiled with DIGRAPHS defined, digraphs are supported. A set of +normal digraphs is included. They are shown with the ":digraph" command. +More can be added with ":digraph {char1}{char2} {number}". A digraph is +entered with "CTRL-K {char1} {char2}" or "{char1} BS {char2}" (only when +'digraph' option is set). + +When repeating an insert, e.g. "10atest <Esc>" vi would only handle wrapmargin +for the first insert. Vim does it for all. + +A count to the "i" or "a" command is used for all the text. Vi uses the count +only for one line. "3iabc<NL>def<Esc>" would insert "abcabcabc<NL>def" in Vi +but "abc<NL>defabc<NL>defabc<NL>def" in Vim. + + +In Command-line mode: + +<Esc> terminates the command-line without executing it. In vi the command +line would be executed, which is not what most people expect (hitting <Esc> +should always get you back to command mode). To avoid problems with some +obscure macros, an <Esc> in a macro will execute the command. If you want a +typed <Esc> to execute the command like vi does you can fix this with + ":cmap ^V<Esc> ^V<CR>" + +General: + +The 'ttimeout' option is like 'timeout', but only works for cursor and +function keys, not for ordinary mapped characters. The 'timeoutlen' option +gives the number of milliseconds that is waited for. If the 'esckeys' option +is not set, cursor and function keys that start with <Esc> are not recognized +in insert mode. + +There is an option for each terminal string. Can be used when termcap is not +supported or to change individual strings. + +The 'fileformat' option can be set to select the <EOL>: "dos" <CR><NL>, "unix" +<NL> or "mac" <CR>. +When the 'fileformats' option is not empty, Vim tries to detect the type of +<EOL> automatically. The 'fileformat' option is set accordingly. + +On systems that have no job control (older Unix systems and non-Unix systems) +the CTRL-Z, ":stop" or ":suspend" command starts a new shell. + +If Vim is started on the Amiga without an interactive window for output, a +window is opened (and :sh still works). You can give a device to use for +editing with the |-d| argument, e.g. "-d con:20/20/600/150". + +The 'columns' and 'lines' options are used to set or get the width and height +of the display. + +Option settings are read from the first and last few lines of the file. +Option 'modelines' determines how many lines are tried (default is 5). Note +that this is different from the Vi versions that can execute any Ex command +in a modeline (a major security problem). |trojan-horse| + +If the 'insertmode' option is set (e.g. in .exrc), Vim starts in insert mode. +And it comes back there, when pressing <Esc>. + +Undo information is kept in memory. Available memory limits the number and +size of change that can be undone. This is hardly a problem on the Amiga and +almost never with Unix and Win32. + +If the 'backup' or 'writebackup' option is set: Before a file is overwritten, +a backup file (.bak) is made. If the "backup" option is set it is left +behind. + +Vim creates a file ending in ".swp" to store parts of the file that have been +changed or that do not fit in memory. This file can be used to recover from +an aborted editing session with "vim -r file". Using the swap file can be +switched off by setting the 'updatecount' option to 0 or starting Vim with +the "-n" option. Use the 'directory' option for placing the .swp file +somewhere else. + +Vim is able to work correctly on filesystems with 8.3 file names, also when +using messydos or crossdos filesystems on the Amiga, or any 8.3 mounted +filesystem under Unix. See |'shortname'|. + +Error messages are shown at least one second (Vi overwrites error messages). + +If Vim gives the |hit-enter| prompt, you can hit any key. Characters other +than <CR>, <NL> and <Space> are interpreted as the (start of) a command. +{Vi: only ":" commands are interpreted} + +The contents of the numbered and unnamed registers is remembered when +changing files. + +The "No lines in buffer" message is a normal message instead of an error +message, since that may cause a mapping to be aborted. +{Vi: error messages may be overwritten with other messages before you have a +chance to read them} + +The AUX: device of the Amiga is supported. + +============================================================================== +6. Supported Vi features *vi-features* + +Vim supports nearly all Vi commands and mostly in the same way. That is when +the 'compatible' option is set and 'cpoptions' contains all flags. What the +effect is of resetting 'compatible' and removing flags from 'cpoptions' can be +found at the help for the specific command. + +The help files used to mark features that are in Vim but not in Vi with {not +in Vi}. However, since these remarks cluttered the help files we now do it +the other way around: Below is listed what Vi already supported. Anything +else has been added by Vim. + + +The following Ex commands are supported by Vi: ~ + +`:abbreviate` enter abbreviation +`:append` append text +`:args` print the argument list +`:cd` change directory; Vi: no "cd -" +`:change` replace a line or series of lines +`:chdir` change directory +`:copy` copy lines +`:delete` delete lines +`:edit` edit a file +`:exit` same as `:xit` +`:file` show or set the current file name; Vi: without the column number +`:global` execute commands for matching lines +`:insert` insert text +`:join` join lines; Vi: not :join! +`:k` set a mark +`:list` print lines +`:map` show or enter a mapping +`:mark` set a mark +`:move` move lines +`:Next` go to previous file in the argument list {Vi: no count} +`:next` go to next file in the argument list {Vi: no count} +`:number` print lines with line number +`:open` start open mode (not implemented in Vim) +`:pop` jump to older entry in tag stack (only in some versions) +`:preserve` write all text to swap file {Vi: might also exit} +`:previous` same as `:Next` {Vi: only in some versions} +`:print` print lines +`:put` insert contents of register in the text +`:quit` quit Vi +`:read` read file into the text +`:recover` recover a file from a swap file {Vi: recovers in another way + and sends mail if there is something to recover} +`:rewind` go to the first file in the argument list; no ++opt +`:set` set option; but not `:set inv{option}`, `:set option&`, + `:set all&`, `:set option+=value`, `:set option^=value` + `:set option-=value` `:set option<` +`:shell` escape to a shell +`:source` read Vi or Ex commands from a file +`:stop` suspend the editor or escape to a shell +`:substitute` find and replace text; Vi: no '&', 'i', 's', 'r' or 'I' flag, + confirm prompt only supports 'y' and 'n', no highlighting +`:suspend` same as ":stop" +`:t` same as ":copy" +`:tag` jump to tag +`:unabbreviate` remove abbreviation +`:undo` undo last change {Vi: only one level} +`:unmap` remove mapping +`:vglobal` execute commands for not matching lines +`:version` print version number and other info +`:visual` same as ":edit", but turns off "Ex" mode +`:wq` write to a file and quit Vi +`:write` write to a file +`:xit` write if buffer changed and quit Vi +`:yank` yank lines into a register +`:z` print some lines {not in all versions of Vi} +`:!` filter lines or execute an external command +`:"` comment +`:#` same as ":number" +`:*` execute contents of a register +`:&` repeat last ":substitute" +`:<` shift lines one 'shiftwidth' left +`:=` print the cursor line number +`:>` shift lines one 'shiftwidth' right +`:@` execute contents of a register; but not `:@`; `:@@` only in + some versions + +Common for these commands is that Vi doesn't support the ++opt argument on +`:edit` and other commands that open a file. + + +The following Normal mode commands are supported by Vi: ~ + +note: See the beginning of |normal-index| for the meaning of WORD, N, Nmove +and etc in the description text. + +|CTRL-B| scroll N screens Backwards +|CTRL-C| interrupt current (search) command +|CTRL-D| scroll Down N lines (default: half a screen); Vim scrolls + 'scroll' screen lines, Vi scrolls file lines; makes a + difference when lines wrap +|CTRL-E| scroll N lines upwards (N lines Extra) +|CTRL-F| scroll N screens Forward +|CTRL-G| display current file name and position +|<BS>| same as "h" +|CTRL-H| same as "h" +|<NL>| same as "j" +|CTRL-J| same as "j" +|CTRL-L| redraw screen +|<CR>| cursor to the first CHAR N lines lower +|CTRL-M| same as <CR> +|CTRL-N| same as "j" +|CTRL-P| same as "k" +|CTRL-R| in some Vi versions: same as CTRL-L +|CTRL-T| jump to N older Tag in tag list +|CTRL-U| N lines Upwards (default: half a screen) {Vi used file lines + while Vim scrolls 'scroll' screen lines; makes a difference + when lines wrap} +|CTRL-Y| scroll N lines downwards +|CTRL-Z| suspend program (or start new shell) +|CTRL-]| :ta to ident under cursor {Vi: identifier after the cursor} +|CTRL-^| edit alternate file {Vi: no count} +|<Space>| same as "l" +|!| filter Nmove text through the {filter} command +|!!| filter N lines through the {filter} command +" use register {a-zA-Z0-9.%#:-"} for next delete, yank or put + (uppercase to append) ({.%#:} only work with put) +|$| cursor to the end of Nth next line +|%| find the next (curly/square) bracket on this line and go to + its match, or go to matching comment bracket, or go to + matching preprocessor directive (Vi: no count supported) +|&| repeat last :s +|'| jump to mark (Vi: only lowercase marks) +|(| cursor N sentences backward +|)| cursor N sentences forward +|+| same as <CR> +|,| repeat latest f, t, F or T in opposite direction N times +|-| cursor to the first CHAR N lines higher +|.| repeat last change with count replaced with N +|/| search forward for the Nth occurrence of {pattern} +|0| cursor to the first char of the line +|:| start entering an Ex command +|;| repeat latest f, t, F or T N times +|<| shift Nmove lines one 'shiftwidth' leftwards +|<<| shift N lines one 'shiftwidth' leftwards +|=| filter Nmove lines through "indent" +|==| filter N lines through "indent" +|>| shift Nmove lines one 'shiftwidth' rightwards +|>>| shift N lines one 'shiftwidth' rightwards +|?| search backward for the Nth previous occurrence of {pattern} +|@| execute the contents of register {a-z} N times + {Vi: only named registers} +|@@| repeat the previous @{a-z} N times +|A| append text after the end of the line N times +|B| cursor N WORDS backward +|C| change from the cursor position to the end of the line +|D| delete the characters under the cursor until the end of the + line and N-1 more lines [into register x]; synonym for "d$" +|E| cursor forward to the end of WORD N +|F| cursor to the Nth occurrence of {char} to the left +|G| cursor to line N, default last line +|H| cursor to line N from top of screen +|I| insert text before the first CHAR on the line N times +|J| Join N lines; default is 2 +|L| cursor to line N from bottom of screen +|M| cursor to middle line of screen +|N| repeat the latest '/' or '?' N times in opposite direction +|O| begin a new line above the cursor and insert text, repeat N + times {Vi: blank [count] screen lines} +|P| put the text [from register x] before the cursor N times + {Vi: no count} +|Q| switch to "Ex" mode +|R| enter replace mode: overtype existing characters, repeat the + entered text N-1 times +|S| delete N lines [into register x] and start insert; synonym for + "cc". +|T| cursor till after Nth occurrence of {char} to the left +|U| undo all latest changes on one line + {Vi: while not moved off of the last modified line} +|W| cursor N WORDS forward +|X| delete N characters before the cursor [into register x] +|Y| yank N lines [into register x]; synonym for "yy" +|ZZ| store current file if modified, and exit +|[[| cursor N sections backward +|]]| cursor N sections forward +|^| cursor to the first CHAR of the line +|_| cursor to the first CHAR N - 1 lines lower +|`| cursor to the mark {a-zA-Z0-9} +|a| append text after the cursor N times +|b| cursor N words backward +|c| delete Nmove text [into register x] and start insert +|cc| delete N lines [into register x] and start insert +|d| delete Nmove text [into register x] +|dd| delete N lines [into register x] +|e| cursor forward to the end of word N +|f| cursor to Nth occurrence of {char} to the right +|h| cursor N chars to the left +|i| insert text before the cursor N times +|j| cursor N lines downward +|k| cursor N lines upward +|l| cursor N chars to the right +|m| set mark {A-Za-z} at cursor position +|n| repeat the latest '/' or '?' N times +|o| begin a new line below the cursor and insert text + {Vi: blank [count] screen lines} +|p| put the text [from register x] after the cursor N times + {Vi: no count} +|r| replace N chars with {char} {Vi: CTRL-V <CR> still replaces + with a line break, cannot replace something with a <CR>} +|s| (substitute) delete N characters [into register x] and start + insert +|t| cursor till before Nth occurrence of {char} to the right +|u| undo changes {Vi: only one level} +|w| cursor N words forward +|x| delete N characters under and after the cursor [into register + x] +|y| yank Nmove text [into register x] +|yy| yank N lines [into register x] +|z<CR>| current line to the top +|z-| current line to the bottom +|z+| cursor on line N +|z^| cursor on line N +|{| cursor N paragraphs backward +| cursor to column N +|}| cursor N paragraphs forward +|~| switch case of N characters under the cursor; Vim: depends on + 'tildeop' {Vi: no count, no 'tildeop'} +|<Del>| same as "x" + + +The following commands are supported in Insert mode by Vi: ~ + +CTRL-@ insert previously inserted text and stop insert + {Vi: only when typed as first char, only up to 128 chars} +CTRL-C quit insert mode, without checking for abbreviation, unless + 'insertmode' set. +CTRL-D delete one shiftwidth of indent in the current line + {Vi: CTRL-D works only when used after autoindent} +<BS> delete character before the cursor {Vi: does not delete + autoindents, does not cross lines, does not delete past start + position of insert} +CTRL-H same as <BS> +<Tab> insert a <Tab> character +CTRL-I same as <Tab> +<NL> same as <CR> +CTRL-J same as <CR> +<CR> begin new line +CTRL-M same as <CR> +CTRL-T insert one shiftwidth of indent in current line {Vi: only when + in indent} +CTRL-V {char} insert next non-digit literally {Vi: no decimal byte entry} +CTRL-W delete word before the cursor +CTRL-Z when 'insertmode' set: suspend Vi +<Esc> end insert mode (unless 'insertmode' set) +CTRL-[ same as <Esc> +0 CTRL-D delete all indent in the current line +^ CTRL-D delete all indent in the current line, restore it in the next + line +<Del> delete character under the cursor + + +The following options are supported by Vi: ~ + +'autoindent' 'ai' take indent for new line from previous line + {Vi does this slightly differently: After the + indent is deleted when typing <Esc> or <CR>, the + cursor position when moving up or down is after + the deleted indent; Vi puts the cursor somewhere + in the deleted indent}. +'autowrite' 'aw' automatically write file if changed +'directory' 'dir' list of directory names for the swap file + {Vi: directory to put temp file in, defaults to + "/tmp"} +'edcompatible' 'ed' toggle flags of ":substitute" command +'errorbells' 'eb' ring the bell for error messages +'ignorecase' 'ic' ignore case in search patterns +'lines' number of lines in the display +'lisp' automatic indenting for Lisp {Vi: Does it a little + bit differently} +'list' show <Tab> and <EOL> +'magic' changes special characters in search patterns +'modeline' 'ml' recognize 'modelines' at start or end of file + {called modelines in some Vi versions} +'number' 'nu' print the line number in front of each line +'paragraphs' 'para' nroff macros that separate paragraphs +'prompt' 'prompt' enable prompt in Ex mode +'readonly' 'ro' disallow writing the buffer {Vim sets 'readonly' + when editing a file with `:view`} +'remap' allow mappings to work recursively +'report' threshold for reporting nr. of lines changed +'scroll' 'scr' lines to scroll with CTRL-U and CTRL-D +'sections' 'sect' nroff macros that separate sections +'shell' 'sh' name of shell to use for external commands +'shiftwidth' 'sw' number of spaces to use for (auto)indent step +'showmatch' 'sm' briefly jump to matching bracket if insert one +'showmode' 'smd' message on status line to show current mode +'tabstop' 'ts' number of spaces that <Tab> in file uses +'taglength' 'tl' number of significant characters for a tag +'tags' 'tag' list of file names used by the tag command + {Vi: default is "tags /usr/lib/tags"} +'tagstack' 'tgst' push tags onto the tag stack {not in all versions + of Vi} +'term' name of the terminal +'terse' shorten some messages +'timeout' 'to' time out on mappings and key codes +'timeoutlen' 'tm' time for 'timeout' {only in some Vi versions} +'ttytype' 'tty' alias for 'term' +'verbose' 'vbs' give informative messages {only in some Vi + versions as a boolean option} +'warn' warn for shell command when buffer was changed +'window' 'wi' nr of lines to scroll for CTRL-F and CTRL-B + {Vi also uses the option to specify the number of + displayed lines} +'wrapmargin' 'wm' chars from the right where wrapping starts + {Vi: works differently and less usefully} +'wrapscan' 'ws' searches wrap around the end of the file +'writeany' 'wa' write to file with no need for "!" override + +Also see |missing-options|. + +============================================================================== +7. Command-line arguments *cmdline-arguments* + +Different versions of Vi have different command-line arguments. This can be +confusing. To help you, this section gives an overview of the differences. + +Five variants of Vi will be considered here: + Elvis Elvis version 2.1b + Nvi Nvi version 1.79 + Posix Posix 1003.2 + Vi Vi version 3.7 (for Sun 4.1.x) + Vile Vile version 7.4 (incomplete) + Vim Vim version 5.2 + +Only Vim is able to accept options in between and after the file names. + ++{command} Elvis, Nvi, Posix, Vi, Vim: Same as "-c {command}". + +- Nvi, Posix, Vi: Run Ex in batch mode. + Vim: Read file from stdin (use -s for batch mode). + +-- Vim: End of options, only file names are following. + +--cmd {command} Vim: execute {command} before sourcing vimrc files. + +--echo-wid Vim: GTK+ echoes the Window ID on stdout + +--help Vim: show help message and exit. + +--literal Vim: take file names literally, don't expand wildcards. + +--nofork Vim: same as |-f| + +--noplugin[s] Vim: Skip loading plugins. + +--remote Vim: edit the files in another Vim server + +--remote-expr {expr} Vim: evaluate {expr} in another Vim server + +--remote-send {keys} Vim: send {keys} to a Vim server and exit + +--remote-silent {file} Vim: edit the files in another Vim server if possible + +--remote-wait Vim: edit the files in another Vim server and wait for it + +--remote-wait-silent Vim: like --remote-wait, no complaints if not possible + +--role {role} Vim: GTK+ 2: set role of main window + +--serverlist Vim: Output a list of Vim servers and exit + +--servername {name} Vim: Specify Vim server name + +--socketid {id} Vim: GTK window socket to run Vim in + +--windowid {id} Vim: Win32 window ID to run Vim in + +--version Vim: show version message and exit. + +-? Vile: print usage summary and exit. + +-a Elvis: Load all specified file names into a window (use -o for + Vim). + +-A Vim: Start in Arabic mode (when compiled with Arabic). + +-b {blksize} Elvis: Use {blksize} blocksize for the session file. +-b Vim: set 'binary' mode. + +-C Vim: Compatible mode. + +-c {command} Elvis, Nvi, Posix, Vim: run {command} as an Ex command after + loading the edit buffer. + Vim: allow up to 10 "-c" arguments + +-d {device} Vim: Use {device} for I/O (Amiga only). {only when compiled + without the |+diff| feature} +-d Vim: start with 'diff' set. |vimdiff| + +-dev {device} Vim: Use {device} for I/O (Amiga only). + +-D Vim: debug mode. + +-e Elvis, Nvi, Vim: Start in Ex mode, as if the executable is + called "ex". + +-E Vim: Start in improved Ex mode |gQ|, like "exim". + +-f Vim: Run GUI in foreground (Amiga: don't open new window). +-f {session} Elvis: Use {session} as the session file. + +-F Vim: Start in Farsi mode (when compiled with Farsi). + Nvi: Fast start, don't read the entire file when editing + starts. + +-G {gui} Elvis: Use the {gui} as user interface. + +-g Vim: Start GUI. +-g N Vile: start editing at line N + +-h Vim: Give help message. + Vile: edit the help file + +-H Vim: start Hebrew mode (when compiled with it). + +-i Elvis: Start each window in Insert mode. +-i {viminfo} Vim: Use {viminfo} for viminfo file. + +-L Vim: Same as "-r" {only in some versions of Vi: "List + recoverable edit sessions"}. + +-l Nvi, Vi, Vim: Set 'lisp' and 'showmatch' options. + +-m Vim: Modifications not allowed to be written, resets 'write' + option. + +-M Vim: Modifications not allowed, resets 'modifiable' and the + 'write' option. + +-N Vim: No-compatible mode. + +-n Vim: No swap file used. + +-nb[args] Vim: open a NetBeans interface connection + +-O[N] Vim: Like -o, but use vertically split windows. + +-o[N] Vim: Open [N] windows, or one for each file. + +-p[N] Vim: Open [N] tab pages, or one for each file. + +-P {parent-title} Win32 Vim: open Vim inside a parent application window + +-q {name} Vim: Use {name} for quickfix error file. +-q{name} Vim: Idem. + +-R Elvis, Nvi, Posix, Vile, Vim: Set the 'readonly' option. + +-r Elvis, Nvi, Posix, Vi, Vim: Recovery mode. + +-S Nvi: Set 'secure' option. +-S {script} Vim: source script after starting up. + +-s Nvi, Posix, Vim: Same as "-" (silent mode), when in Ex mode. + Elvis: Sets the 'safer' option. +-s {scriptin} Vim: Read from script file {scriptin}; only when not in Ex + mode. +-s {pattern} Vile: search for {pattern} + +-t {tag} Elvis, Nvi, Posix, Vi, Vim: Edit the file containing {tag}. +-t{tag} Vim: Idem. + +-T {term} Vim: Set terminal name to {term}. + +-u {vimrc} Vim: Read initializations from {vimrc} file. + +-U {gvimrc} Vim: Read GUI initializations from {gvimrc} file. + +-v Nvi, Posix, Vi, Vim: Begin in Normal mode (visual mode, in Vi + terms). + Vile: View mode, no changes possible. + +-V Elvis, Vim: Verbose mode. +-V{nr} Vim: Verbose mode with specified level. + +-w {size} Elvis, Posix, Nvi, Vi, Vim: Set value of 'window' to {size}. +-w{size} Nvi, Vi: Same as "-w {size}". +-w {name} Vim: Write to script file {name} (must start with non-digit). + +-W {name} Vim: Append to script file {name}. + +-x Vi, Vim: Ask for encryption key. See |encryption|. + +-X Vim: Don't connect to the X server. + +-y Vim: Start in easy mode, like |evim|. + +-Z Vim: restricted mode + +@{cmdfile} Vile: use {cmdfile} as startup file. + +============================================================================== +8. POSIX compliance *posix* *posix-compliance* + +In 2005 the POSIX test suite was run to check the compatibility of Vim. Most +of the test was executed properly. There are the few things where Vim +is not POSIX compliant, even when run in Vi compatibility mode. + *$VIM_POSIX* +Set the $VIM_POSIX environment variable to have 'cpoptions' include the POSIX +flags when Vim starts up. This makes Vim run as POSIX as it can. That's +a bit different from being Vi compatible. + +You can find the Posix specification for Vi here: +https://pubs.opengroup.org/onlinepubs/9699919799/utilities/vi.html +And the related Ex specification: +https://pubs.opengroup.org/onlinepubs/9699919799/utilities/ex.html + +This is where Vim does not behave as POSIX specifies and why: + + *posix-screen-size* + The $COLUMNS and $LINES environment variables are ignored by Vim if + the size can be obtained from the terminal in a more reliable way. + Add the '|' flag to 'cpoptions' to have $COLUMNS and $LINES overrule + sizes obtained in another way. + + The "{" and "}" commands don't stop at a "{" in the original Vi, but + POSIX specifies it does. Add the '{' flag to 'cpoptions' if you want + it the POSIX way. + + The "D", "o" and "O" commands accept a count. Also when repeated. + Add the '#' flag to 'cpoptions' if you want to ignore the count. + + The ":cd" command fails if the current buffer is modified when the '.' + flag is present in 'cpoptions'. + + There is no ATTENTION message, the "A" flag is added to 'shortmess'. + +These are remarks about running the POSIX test suite: +- vi test 33 sometimes fails for unknown reasons +- vi test 250 fails; behavior will be changed in a new revision + http://www.opengroup.org/austin/mailarchives/ag-review/msg01710.html + (link no longer works, perhaps it's now: + https://www.opengroup.org/sophocles/show_mail.tpl?CALLER=show_archive.tpl&source=L&listname=austin-review-l&id=1711) +- vi test 310 fails; exit code non-zero when any error occurred? +- ex test 24 fails because test is wrong. Changed between SUSv2 and SUSv3. +- ex tests 47, 48, 49, 72, 73 fail because .exrc file isn't read in silent + mode and $EXINIT isn't used. +- ex tests 76, 78 fail because echo is used instead of printf. (fixed) + Also: problem with \s not changed to space. +- ex test 355 fails because 'window' isn't used for "30z". +- ex test 368 fails because shell command isn't echoed in silent mode. +- ex test 394 fails because "=" command output isn't visible in silent mode. +- ex test 411 fails because test file is wrong, contains stray ':'. +- ex test 475 and 476 fail because reprint output isn't visible in silent mode. +- ex test 480 and 481 fail because the tags file has spaces instead of a tab. +- ex test 502 fails because .exrc isn't read in silent mode. +- ex test 509 fails because .exrc isn't read in silent mode. and exit code is + 1 instead of 2. +- ex test 534 fails because .exrc isn't read in silent mode. + + + vim:tw=78:ts=8:noet:ft=help:norl: |