*vi_diff.txt*   For Vim version 7.4.  Last change: 2016 Feb 12


		  VIM REFERENCE MANUAL    by Bram Moolenaar


Differences between Vim and Vi				*vi-differences*

Throughout the help files differences between Vim and Vi/Ex are given in
curly braces, like "{not in Vi}".  This file only lists what has not been
mentioned in other files and gives an overview.

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. Command-line arguments		|cmdline-arguments|
7. 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'*

==============================================================================
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}.
							*E340*
Maximum line length	   On machines with 16-bit ints (Amiga and MS-DOS real
			   mode): 32767, otherwise 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 and MS-DOS, '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-DOS in real-mode (no additional drivers required).
	- In protected mode on Windows 3.1 and MS-DOS (DPMI driver required).
	- Windows 95 and Windows NT, with support for long file names.
	- OS/2 (needs emx.dll)
	- Atari MiNT
	- VMS
	- BeOS
	- Macintosh
	- Risc OS
	- IBM OS/390
	Note that on some systems features need to be disabled to reduce
	resource usage, esp. on MS-DOS.  For some outdated systems you need to
	use an older Vim version.

Multi level 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|

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 and Athena interfaces), GTK, Win32
	(Windows 95 and later), BeOS, 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|

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'|.

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.

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

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.
							|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, for MS-DOS, 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 multi-byte 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.

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.

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).

"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.

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 {0-9a-z..} 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 may be a problem with MS-DOS, 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 accepts a command starting with ':').

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.

The AUX: device of the Amiga is supported.

==============================================================================
6. 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" (also in some versions of Vi).

-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.

==============================================================================
7. 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.

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:ft=help:norl:
