Quick links: help overview · quick reference · user manual toc · reference manual toc · faq
Go to keyword (shortcut: k)
Site search (shortcut: s)
version4.txt  For Vim version 9.1.  Last change: 2006 Apr 24


		  VIM REFERENCE MANUAL    by Bram Moolenaar


This document lists the incompatible differences between Vim 3.0 and Vim 4.0.
Although 4.0 is mentioned here, this is also for version 4.1, 4.2, etc..

This file is important for everybody upgrading from Vim 3.0.  Read it
carefully to avoid unexpected problems.

'backup' option default changed			backup-changed
Extension for backup file changed		backup-extension
Structure of swap file changed			swapfile-changed
"-w scriptout" argument changed			scriptout-changed
Backspace and Delete keys			backspace-delete
Escape for | changed				escape-bar
Key codes changed				key-codes-changed
Terminal options changed			termcap-changed
'errorformat' option changed			errorformat-changed
'graphic' option gone				graphic-option-gone
'yankendofline' option gone			ye-option-gone
'icon' and 'title' default value changed	icon-changed
'highlight' option changed			highlight-changed
'tildeop' and 'weirdinvert' short names changed	short-name-changed
Use of "v", "V" and "CTRL-V" in Visual mode	use-visual-cmds
CTRL-B in Insert mode removed			toggle-revins


'backup' option default changed				backup-changed
-------------------------------

The default value for 'backup' used to be on.  This resulted in a backup file
being made when the original file was overwritten.

Now the default for 'backup' is off.  As soon as the writing of the file has
successfully finished, the backup file is deleted.  If you want to keep the
backup file, set 'backup' on in your vimrc.  The reason for this change is
that many people complained that leaving a backup file behind is not
Vi-compatible.						'backup'


Extension for backup file changed			backup-extension
---------------------------------

The extension for the backup file used to be ".bak".  Since other programs
also use this extension and some users make copies with this extension, it was
changed to the less obvious "~".  Another advantage is that this takes less
space, which is useful when working on a system with short file names.  For
example, on MS-DOS the backup files for "longfile.c" and "longfile.h" would
both become "longfile.bak"; now they will be "longfile.c~" and "longfile.h~".

If you prefer to use ".bak", you can set the 'backupext' option: 
	:set bex=.bak


Structure of swap file changed				swapfile-changed
------------------------------

The contents of the swap file were extended with several parameters.  Vim
stores the user name and other information about the edited file to make
recovery more easy and to be able to know where the swap file comes from.  The
first part of the swap file can now be understood on a machine with a
different byte order or sizeof(int).  When you try to recover a file on such a
machine, you will get an error message that this is not possible.

Because of this change, swap files cannot be exchanged between 3.0 and 4.0.
If you have a swap file from a crashed session with 3.0, use Vim 3.0 to
recover the file---don't use 4.0.			swap-file


"-w scriptout" argument changed				scriptout-changed
-------------------------------

"vim -w scriptout" used to append to the scriptout file.  Since this was
illogical, it now creates a new file.  An existing file is not overwritten
(to avoid destroying an existing file for those who rely on the appending).
[This was removed again later]					-w


Backspace and Delete keys				backspace-delete
-------------------------

In 3.0 both the delete key and the backspace key worked as a backspace in
insert mode; they deleted the character to the left of the cursor.  In 4.0 the
delete key has a new function: it deletes the character under the cursor, just
like it does on the command-line.  If the cursor is after the end of the line
and 'bs' is set, two lines are joined.			<Del> i_<Del>

In 3.0 the backspace key was always defined as CTRL-H and delete as CTRL-?.
In 4.0 the code for the backspace and delete key is obtained from termcap or
termlib, and adjusted for the "stty erase" value on Unix.  This helps people
who define the erase character according to the keyboard they are working on.
							<BS> i_<BS>

If you prefer backspace and delete in Insert mode to have the old behavior,
put this line in your vimrc:

	inoremap ^? ^H

And you may also want to add these, to fix the values for <BS> and <Del>:

	set t_kb=^H
	set t_kD=^?

(Enter ^H with CTRL-V CTRL-H and ^? with CTRL-V CTRL-? or <Del>.)

If the value for t_kb is correct, but the t_kD value is not, use the ":fixdel"
command.  It will set t_kD according to the value of t_kb.  This is useful if
you are using several different terminals.		:fixdel

When ^H is not recognized as <BS> or <Del>, it is used like a backspace.


Escape for | changed					escape-bar
--------------------

When the 'b' flag is present in 'cpoptions', the backslash cannot be used to
escape '|' in mapping and abbreviate commands, only CTRL-V can.  This is
Vi-compatible.  If you work in Vi-compatible mode and had used "\|" to include
a bar in a mapping, this needs to be replaced by "^V|".  See :bar.


Key codes changed					key-codes-changed
-----------------

The internal representation of key codes has changed dramatically.  In 3.0 a
one-byte code was used to represent a key.  This caused problems with
different characters sets that also used these codes.  In 4.0 a three-byte
code is used that cannot be confused with a character.		key-notation

If you have used the single-byte key codes in your vimrc for mappings, you
will have to replace them with the 4.0 codes.  Instead of using the three-byte
code directly, you should use the symbolic representation for this in <>.  See
the table below.  The table also lists the old name, as it was used in the 3.0
documentation.

The key names in <> can be used in mappings directly.  This makes it possible
to copy/paste examples or type them literally.  The <> notation has been
introduced for this <>.  The 'B' and '<' flags must not be present in
'cpoptions' to enable this to work 'cpoptions'.

old name	new name	  old code	old MS-DOS code	
				hex	dec	hex	dec	
<ESC>		<Esc>
<TAB>		<Tab>
<LF>		<NL> <NewLine> <LineFeed>
<SPACE>		<Space>
<NUL>		<Nul>
<BELL>		<Bell>
<BS>		<BS> <BackSpace>
<INSERT>	<Insert>
<DEL>		<Del> <Delete>
<HOME>		<Home>
<END>		<End>
<PAGE_UP>	<PageUp>
<PAGE_DOWN>	<PageDown>

<C_UP>		<Up>		0x80	128	0xb0	176
<C_DOWN>	<Down>		0x81	129     0xb1	177
<C_LEFT>	<Left>		0x82	130     0xb2	178
<C_RIGHT>	<Right>		0x83	131     0xb3	179
<SC_UP>		<S-Up>		0x84	132     0xb4	180
<SC_DOWN>	<S-Down>	0x85	133     0xb5	181
<SC_LEFT>	<S-Left>	0x86	134     0xb6	182
<SC_RIGHT>	<S-Right>	0x87	135     0xb7	183

<F1>		<F1>		0x88	136     0xb8	184
<F2>		<F2>		0x89	137     0xb9	185
<F3>		<F3>		0x8a	138     0xba	186
<F4>		<F4>		0x8b	139     0xbb	187
<F5>		<F5>		0x8c	140     0xbc	188
<F6>		<F6>		0x8d	141     0xbd	189
<F7>		<F7>		0x8e	142     0xbe	190
<F8>		<F8>		0x8f	143     0xbf	191
<F9>		<F9>		0x90	144     0xc0	192
<F10>		<F10>		0x91	145     0xc1	193

<SF1>		<S-F1>		0x92	146     0xc2	194
<SF2>		<S-F2>		0x93	147     0xc3	195
<SF3>		<S-F3>		0x94	148     0xc4	196
<SF4>		<S-F4>		0x95	149     0xc5	197
<SF5>		<S-F5>		0x96	150     0xc6	198
<SF6>		<S-F6>		0x97	151     0xc7	199
<SF7>		<S-F7>		0x98	152     0xc8	200
<SF8>		<S-F8>		0x99	153     0xc9	201
<SF9>		<S-F9>		0x9a	154     0xca	202
<SF10>		<S-F10>		0x9b	155     0xcb	203

<HELP>		<Help>		0x9c	156     0xcc	204
<UNDO>		<Undo>		0x9d	157     0xcd	205

		(not used)	0x9e	158     0xce	206
		(not used)	0x9f	159     0xcf	207


Terminal options changed				termcap-changed
------------------------

The names of the terminal options have been changed to match the termcap names
of these options.  All terminal options now have the name t_xx, where xx is
the termcap name.  Normally these options are not used, unless you have a
termcap entry that is wrong or incomplete, or you have set the highlight
options to a different value.				terminal-options

Note that for some keys there is no termcap name.  Use the <> type of name
instead, which is a good idea anyway.

Note that "t_ti" has become "t_mr" (invert/reverse output) and "t_ts" has
become "t_ti" (init terminal mode).  Be careful when you use "t_ti"!

old name	new name	meaning		
t_cdl		t_DL		delete number of lines		t_cdl
t_ci		t_vi		cursor invisible		t_ci
t_cil		t_AL		insert number of lines		t_cil
t_cm		t_cm		move cursor
t_cri		t_RI		cursor number of chars right	t_cri
t_cv		t_ve		cursor visible			t_cv
t_cvv		t_vs		cursor very visible		t_cvv
t_dl		t_dl		delete line
t_cs		t_cs		scroll region
t_ed		t_cl		clear display			t_ed
t_el		t_ce		clear line			t_el
t_il		t_al		insert line			t_il
		t_da		display may be retained above the screen
		t_db		display may be retained below the screen
t_ke		t_ke		put terminal out of keypad transmit mode
t_ks		t_ks		put terminal in keypad transmit mode
t_ms		t_ms		save to move cursor in highlight mode
t_se		t_se		normal mode (undo t_so)
t_so		t_so		shift out (standout) mode
t_ti		t_mr		reverse highlight
t_tb		t_md		bold mode			t_tb
t_tp		t_me		highlight end			t_tp
t_sr		t_sr		scroll reverse
t_te		t_te		out of termcap mode
t_ts		t_ti		into termcap mode		t_ts_old
t_vb		t_vb		visual bell
t_csc		t_CS		cursor is relative to scroll region t_csc

t_ku	t_ku	<Up>		arrow up
t_kd	t_kd	<Down>		arrow down
t_kr	t_kr	<Right>		arrow right
t_kl	t_kl	<Left>		arrow left
t_sku		<S-Up>		shifted arrow up		t_sku
t_skd		<S-Down>	shifted arrow down		t_skd
t_skr	t_%i	<S-Right>	shifted arrow right		t_skr
t_skl	t_#4	<S-Left>	shifted arrow left		t_skl
t_f1	t_k1	<F1>		function key 1			t_f1
t_f2	t_k2	<F2>		function key 2			t_f2
t_f3	t_k3	<F3>		function key 3			t_f3
t_f4	t_k4	<F4>		function key 4			t_f4
t_f5	t_k5	<F5>		function key 5			t_f5
t_f6	t_k6	<F6>		function key 6			t_f6
t_f7	t_k7	<F7>		function key 7			t_f7
t_f8	t_k8	<F8>		function key 8			t_f8
t_f9	t_k9	<F9>		function key 9			t_f9
t_f10	t_k;	<F10>		function key 10			t_f10
t_sf1		<S-F1>		shifted function key 1		t_sf1
t_sf2		<S-F2>		shifted function key 2		t_sf2
t_sf3		<S-F3>		shifted function key 3		t_sf3
t_sf4		<S-F4>		shifted function key 4		t_sf4
t_sf5		<S-F5>		shifted function key 5		t_sf5
t_sf6		<S-F6>		shifted function key 6		t_sf6
t_sf7		<S-F7>		shifted function key 7		t_sf7
t_sf8		<S-F8>		shifted function key 8		t_sf8
t_sf9		<S-F9>		shifted function key 9		t_sf9
t_sf10		<S-F10>		shifted function key 10		t_sf10
t_help	t_%1	<Help>		help key			t_help
t_undo	t_&8	<Undo>		undo key			t_undo


'errorformat' option changed				errorformat-changed
----------------------------

'errorformat' can now contain several formats, separated by commas.  The first
format that matches is used.  The default values have been adjusted to catch
the most common formats.				errorformat

If you have a format that contains a comma, it needs to be preceded with a
backslash.  Type two backslashes, because the ":set" command will eat one.


'graphic' option gone					graphic-option-gone
---------------------

The 'graphic' option was used to make the characters between <~> and 0xa0
display directly on the screen.  Now the 'isprint' option takes care of this
with many more possibilities.  The default setting is the same; you only need
to look into this if you previously set the 'graphic' option in your vimrc.
							'isprint'


'yankendofline' option gone				ye-option-gone
---------------------------

The 'yankendofline' option has been removed.  Instead you can just use
	:map Y y$


'icon' and 'title' default value changed		icon-changed
----------------------------------------

The 'title' option is now only set by default if the original title can be
restored.  Avoids "Thanks for flying Vim" titles.  If you want them anyway,
put ":set title" in your vimrc.				'title'

The default for 'icon' now depends on the possibility of restoring the
original value, just like 'title'.  If you don't like your icon titles to be
changed, add this line to your vimrc:			'icon'
	:set noicon


'highlight' option changed				highlight-changed
--------------------------

The 'i' flag now means italic highlighting, instead of invert.  The 'r' flag
is used for reverse highlighting, which is what 'i' used to be.  Normally you
won't see the difference, because italic mode is not supported on most
terminals and reverse mode is used as a fallback.	'highlight'

When an occasion is not present in 'highlight', use the mode from the default
value for 'highlight', instead of reverse mode.


'tildeop' and 'weirdinvert' short names changed		short-name-changed
-----------------------------------------------

Renamed 'to' (abbreviation for 'tildeop') to 'top'.	'tildeop'
Renamed 'wi' (abbreviation for 'weirdinvert') to 'wiv'.	'weirdinvert'

This was done because Vi uses 'wi' as the short name for 'window' and 'to' as
the short name for 'timeout'.  This means that if you try setting these
options, you won't get an error message, but the effect will be different.


Use of "v", "V" and "CTRL-V" in Visual mode		use-visual-cmds
-------------------------------------------

In Visual mode, "v", "V", and "CTRL-V" used to end Visual mode.  Now this
happens only if the Visual mode was in the corresponding type.  Otherwise the
type of Visual mode is changed.  Now only ESC can be used in all circumstances
to end Visual mode without doing anything.		v_V


CTRL-B in Insert mode removed				toggle-revins
-----------------------------

CTRL-B in Insert mode used to toggle the 'revins' option.  If you don't know
this and accidentally hit CTRL-B, it is very difficult to find out how to undo
it.  Since hardly anybody uses this feature, it is disabled by default.  If
you want to use it, define RIGHTLEFT in feature.h before compiling. 'revins'

 vim:tw=78:ts=8:noet:ft=help:norl:


Quick links: help overview · quick reference · user manual toc · reference manual toc · faq