changeset 10:4e2284e71352

updated for version 7.0002
author vimboss
date Thu, 24 Jun 2004 15:53:16 +0000
parents 4102fb4ea781
children 4424b47a0797
files Filelist runtime/doc/eval.txt runtime/doc/filetype.txt runtime/doc/insert.txt runtime/doc/options.txt runtime/doc/repeat.txt runtime/doc/todo.txt runtime/doc/usr_05.txt runtime/doc/version7.txt runtime/plugin/explorer.vim runtime/plugin/netrw.vim runtime/syntax/logtalk.vim runtime/syntax/texinfo.vim src/GvimExt/GvimExt.reg src/GvimExt/Make_bc5.mak src/GvimExt/Make_ming.mak src/GvimExt/Makefile src/GvimExt/README.txt src/GvimExt/gvimext.cpp src/GvimExt/gvimext.def src/GvimExt/gvimext.h src/GvimExt/gvimext.inf src/GvimExt/gvimext.rc src/GvimExt/gvimext_ming.def src/GvimExt/gvimext_ming.rc src/GvimExt/resource.h src/GvimExt/uninst.bat src/edit.c src/eval.c src/ex_cmds2.c src/ex_getln.c src/fileio.c src/getchar.c src/misc1.c src/option.c src/option.h src/os_win32.c src/po/es.po src/vim.h
diffstat 39 files changed, 4009 insertions(+), 2190 deletions(-) [+]
line wrap: on
line diff
--- a/Filelist
+++ b/Filelist
@@ -204,7 +204,19 @@ SRC_DOS_UNIX =	\
 
 # source files for DOS (also in the extra archive)
 SRC_DOS =	\
-		src/GvimExt \
+		src/GvimExt/*.mak \
+		src/GvimExt/GvimExt.reg \
+		src/GvimExt/Makefile \
+		src/GvimExt/README.txt \
+		src/GvimExt/gvimext.cpp \
+		src/GvimExt/gvimext.def \
+		src/GvimExt/gvimext.h \
+		src/GvimExt/gvimext.inf \
+		src/GvimExt/gvimext.rc \
+		src/GvimExt/gvimext_ming.def \
+		src/GvimExt/gvimext_ming.rc \
+		src/GvimExt/resource.h \
+		src/GvimExt/uninst.bat \
 		README_srcdos.txt \
 		src/INSTALLpc.txt \
 		src/Make_bc3.mak \
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*      For Vim version 7.0aa.  Last change: 2004 Jun 20
+*eval.txt*      For Vim version 7.0aa.  Last change: 2004 Jun 22
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1236,10 +1236,19 @@ eventhandler()						*eventhandler()*
 executable({expr})					*executable()*
 		This function checks if an executable with the name {expr}
 		exists.  {expr} must be the name of the program without any
-		arguments.  executable() uses the normal $PATH.
-		On MS-DOS and MS-Windows the ".exe", ".bat", etc. must be
-		included.  It only checks if the file exists and is not a
-		directory, not if it's really executable.
+		arguments.
+		executable() uses the value of $PATH and/or the normal
+		searchpath for programs.		*PATHEXT*
+		On MS-DOS and MS-Windows the ".exe", ".bat", etc. can
+		optionally be included.  Then the extensions in $PATHEXT are
+		tried.  Thus if "foo.exe" does not exist, "foo.exe.bat" can be
+		found.  If $PATHEXT is not set then ".exe;.com;.bat;.cmd" is
+		used.  A dot by itself can be used in $PATHEXT to try using
+		the name without an extension.  When 'shell' looks like a
+		Unix shell, then the name is also tried without adding an
+		extension.
+		On MS-DOS and MS-Windows it only checks if the file exists and
+		is not a directory, not if it's really executable.
 		The result is a Number:
 			1	exists
 			0	does not exist
--- a/runtime/doc/filetype.txt
+++ b/runtime/doc/filetype.txt
@@ -1,4 +1,4 @@
-*filetype.txt*  For Vim version 7.0aa.  Last change: 2004 May 05
+*filetype.txt*  For Vim version 7.0aa.  Last change: 2004 Jun 24
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -148,7 +148,7 @@ This means that the contents of compress
 
 							*new-filetype*
 If a file type that you want to use is not detected yet, there are three ways
-to add it.  In any way, it's better not modify the $VIMRUNTIME/filetype.vim
+to add it.  In any way, it's better not to modify the $VIMRUNTIME/filetype.vim
 file.  It will be overwritten when installing a new version of Vim.
 
 A. If you want to overrule all default file type checks.
--- a/runtime/doc/insert.txt
+++ b/runtime/doc/insert.txt
@@ -1,4 +1,4 @@
-*insert.txt*    For Vim version 7.0aa.  Last change: 2004 Jun 16
+*insert.txt*    For Vim version 7.0aa.  Last change: 2004 Jun 24
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -375,6 +375,11 @@ This redefines the backspace key to star
 undo the effect of the backspace key, without changing what you typed before
 that, with CTRL-O u.
 
+Using CTRL-O splits undo: the text typed before and after it is undone
+separately.  If you want to avoid this (e.g., in a mapping) you might be able
+to use CTRL-R = |i_CTRL-R|.  E.g., to call a function: >
+	:imap <F2> <C-R>=MyFunc()<CR>
+
 When the 'whichwrap' option is set appropriately, the <Left> and <Right>
 keys on the first/last character in the line make the cursor wrap to the
 previous/next line.
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt*	For Vim version 7.0aa.  Last change: 2004 Jun 15
+*options.txt*	For Vim version 7.0aa.  Last change: 2004 Jun 21
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -50,7 +50,7 @@ 1. Setting options					*set-option*
 :se[t] {option}&vim	Reset option to its Vim default value. {not in Vi}
 
 :se[t] all&		Set all options, except terminal options, to their
-			default value.	The values of 'term', 'lines' and
+			default value.  The values of 'term', 'lines' and
 			'columns' are not changed. {not in Vi}
 
 						*:set-args* *E487* *E521*
@@ -140,7 +140,7 @@ example, if Alt-b produces <Esc>b, use t
 The advantage over a mapping is that it works in all situations.
 
 The listing from ":set" looks different from Vi.  Long string options are put
-at the end of the list.  The number of options is quite large.	The output of
+at the end of the list.  The number of options is quite large.  The output of
 "set all" probably does not fit on the screen, causing Vim to give the
 |more-prompt|.
 
@@ -154,14 +154,14 @@ A few examples: >
    :set tags=tags\\,file	    results in "tags\,file"
    :set tags=tags\\\ file	    results in "tags\ file"
 
-The "|" character separates a ":set" command from a following command.	To
-include the "|" in the option value, use "\|" instead.	This example sets the
+The "|" character separates a ":set" command from a following command.  To
+include the "|" in the option value, use "\|" instead.  This example sets the
 'titlestring' option to "hi|there": >
    :set titlestring=hi\|there
 This sets the 'titlestring' option to "hi" and 'iconstring' to "there": >
    :set titlestring=hi|set iconstring=there
 
-For MS-DOS and WIN32 backslashes in file names are mostly not removed.	More
+For MS-DOS and WIN32 backslashes in file names are mostly not removed.  More
 precise: For options that expect a file name (those where environment
 variables are expanded) a backslash before a normal file name character is not
 removed.  But a backslash before a special character (space, backslash, comma,
@@ -172,7 +172,7 @@ There is one special situation, when the
    :set dir=\\path\\file	    results in "\\path\file" (wrong!)
 For the first one the start is kept, but for the second one the backslashes
 are halved.  This makes sure it works both when you expect backslashes to be
-halved and when you expect the backslashes to be kept.	The third gives a
+halved and when you expect the backslashes to be kept.  The third gives a
 result which is probably not what you want.  Avoid it.
 
 				*add-option-flags* *remove-option-flags*
@@ -183,12 +183,12 @@ option, without changing the existing on
 Remove a flag from an option like this: >
    :set guioptions-=a
 This removes the 'a' flag from 'guioptions'.
-Note that you should add or remove one flag at a time.	If 'guioptions' has
+Note that you should add or remove one flag at a time.  If 'guioptions' has
 the value "ab", using "set guioptions-=ba" won't work, because the string "ba"
 doesn't appear.
 
 			   *:set_env* *expand-env* *expand-environment-var*
-Environment variables in most string options will be expanded.	If the
+Environment variables in most string options will be expanded.  If the
 environment variable exists the '$' and the following environment variable
 name is replaced with its value.  If it does not exist the '$' and the name
 are not modified.  Any non-id character (not a letter, digit or '_') may
@@ -247,7 +247,7 @@ value, ":setlocal list" only changes the
 global value.  Note that if you do this next: >
 	:e one
 You will not get back the 'list' value as it was the last time you edited
-"one".	The options local to a window are not remembered for each buffer.
+"one".  The options local to a window are not remembered for each buffer.
 
 							*:setl* *:setlocal*
 :setl[ocal] ...		Like ":set" but set only the value local to the
@@ -300,7 +300,7 @@ then the other window will switch to the
 the 'makeprg' option in the other C source window too.
 However, if you start editing a Perl file in a new window, you want to use
 another 'makeprog' for it, without changing the value used for the C source
-files.	You use this command: >
+files.  You use this command: >
 	:setlocal makeprg=perlmake
 You can switch back to using the global value by making the local value empty: >
 	:setlocal makeprg=
@@ -384,7 +384,7 @@ the system, mostly it is something like 
 				:  fixdel
 				:endif
 <			Where "^V" is CTRL-V and "<BS>" is the backspace key
-			(don't type four characters!).	Replace "termname"
+			(don't type four characters!).  Replace "termname"
 			with your terminal name.
 
 			If your <Delete> key sends a strange key sequence (not
@@ -500,7 +500,7 @@ will give an error message for the trail
 If an error is detected the rest of the line is skipped.
 
 If you want to include a ':' in a set command precede it with a '\'.  The
-backslash in front of the ':' will be removed.	Example: >
+backslash in front of the ':' will be removed.  Example: >
    /* vi:set dir=c\:\tmp: */
 This sets the 'dir' option to "c:\tmp".  Only a single backslash before the
 ':' is removed.  Thus to include "\:" you have to specify "\\:".
@@ -529,7 +529,7 @@ used when 'compatible' is not set, and t
 'compatible' is set.
 
 Most options are the same in all windows and buffers.  There are a few that
-are specific to how the text is presented in a window.	These can be set to a
+are specific to how the text is presented in a window.  These can be set to a
 different value in each window.  For example the 'list' option can be set in
 one window and reset in another for the same text, giving both types of view
 at the same time.  There are a few options that are specific to a certain
@@ -546,14 +546,14 @@ are used as a default value for the wind
 buffer-specific options this depends on the 's' and 'S' flags in the
 'cpoptions' option.  If 's' is included (which is the default) the values for
 buffer options are copied from the currently active buffer when a buffer is
-first entered.	If 'S' is present the options are copied each time the buffer
-is entered, this is almost like having global options.	If 's' and 'S' are not
+first entered.  If 'S' is present the options are copied each time the buffer
+is entered, this is almost like having global options.  If 's' and 'S' are not
 present, the options are copied from the currently active buffer when the
 buffer is created.
 
-Not all options are supported in all versions.	To test if option "foo" can be
-used with ":set" use "exists('&foo')".	This doesn't mean the value is
-actually remembered and works.	Some options are hidden, which means that you
+Not all options are supported in all versions.  To test if option "foo" can be
+used with ":set" use "exists('&foo')".  This doesn't mean the value is
+actually remembered and works.  Some options are hidden, which means that you
 can set them but the value is not remembered.  To test if option "foo" is
 really supported use "exists('+foo')".
 
@@ -597,7 +597,7 @@ A jump table for the options with a shor
 	When off, the keyboard map toggles between Hebrew and English. This
 	is useful to start the Vim in native mode i.e. English (left-to-right
 	mode) and have default second language Farsi or Hebrew (right-to-left
-	mode).	See |farsi.txt|.
+	mode).  See |farsi.txt|.
 
 						*'ambiwidth'* *'ambw'*
 'ambiwidth' 'ambw'	string (default: "single")
@@ -703,9 +703,12 @@ A jump table for the options with a shor
 	Copy indent from current line when starting a new line (typing <CR>
 	in Insert mode or when using the "o" or "O" command).  If you do not
 	type anything on the new line except <BS> or CTRL-D and then type
-	<Esc> or <CR>, the indent is deleted again.  When autoindent is on,
-	formatting (with the "gq" command or when you reach 'textwidth' in
-	Insert mode) uses the indentation of the first line.
+	<Esc> or <CR>, the indent is deleted again.  Moving the cursor to
+	another line has the same effect, unless the 'I' flag is included in
+	'cpoptions'.
+	When autoindent is on, formatting (with the "gq" command or when you
+	reach 'textwidth' in Insert mode) uses the indentation of the first
+	line.
 	When 'smartindent' or 'cindent' is on the indent is changed in
 	a different way.
 	The 'autoindent' option is reset when the 'paste' option is set.
@@ -757,7 +760,7 @@ A jump table for the options with a shor
 	color, see |:hi-normal|.
 
 	When 'background' is set Vim will adjust the default color groups for
-	the new value.	But the colors used for syntax highlighting will not
+	the new value.  But the colors used for syntax highlighting will not
 	change.
 	When a color scheme is loaded (the "colors_name" variable is set)
 	setting 'background' will cause the color scheme to be reloaded.  If
@@ -824,7 +827,7 @@ A jump table for the options with a shor
 	backup file, but you do want a backup while the file is being
 	written, reset this option and set the 'writebackup' option (this is
 	the default).  If you do not want a backup file at all reset both
-	options (use this if your file system is almost full).	See the
+	options (use this if your file system is almost full).  See the
 	|backup-table| for more explanations.
 	When the 'backupskip' pattern matches, a backup is not made anyway.
 	When 'patchmode' is set, the backup may be renamed to become the
@@ -877,13 +880,13 @@ A jump table for the options with a shor
 	One situation where "no" and "auto" will cause problems: A program
 	that opens a file, invokes Vim to edit that file, and then tests if
 	the open file was changed (through the file descriptor) will check the
-	backup file instead of the newly created file.	"crontab -e" is an
+	backup file instead of the newly created file.  "crontab -e" is an
 	example.
 
 	When a copy is made, the original file is truncated and then filled
 	with the new text.  This means that protection bits, owner and
 	symbolic links of the original file are unmodified.  The backup file
-	however, is a new file, owned by the user who edited the file.	The
+	however, is a new file, owned by the user who edited the file.  The
 	group of the backup is set to the group of the original file.  If this
 	fails, the protection bits for the group are made the same as for
 	others.
@@ -1134,7 +1137,7 @@ A jump table for the options with a shor
 	these words, separated by a comma:
 	internal	Use internal case mapping functions, the current
 			locale does not change the case mapping.  This only
-			matters when 'encoding' is a Unicode encoding.	When
+			matters when 'encoding' is a Unicode encoding.  When
 			"internal" is omitted, the towupper() and towlower()
 			system library functions are used when available.
 	keepascii	For the ASCII characters (0x00 to 0x7f) use the US
@@ -1389,7 +1392,7 @@ A jump table for the options with a shor
 	This is a special kind of option, because when it's set or reset,
 	other options are also changed as a side effect.  CAREFUL: Setting or
 	resetting this option can have a lot of unexpected effects: Mappings
-	are interpreted in another way, undo behaves differently, etc.	If you
+	are interpreted in another way, undo behaves differently, etc.  If you
 	set this option in your vimrc file, you should probably put it at the
 	very start.
 	By default this option is on and the Vi defaults are used for the
@@ -1401,7 +1404,7 @@ A jump table for the options with a shor
 	to the Vim defaults.  Effectively, this means that when a ".vimrc"
 	file exists, Vim will use the Vim defaults, otherwise it will use the
 	Vi defaults.  (Note: This doesn't happen for the system-wide vimrc
-	file).	Also see |compatible-default|.
+	file).  Also see |compatible-default|.
 	You can also set this option with the "-C" argument, and reset it with
 	"-N".  See |-C| and |-N|.
 	Switching this option off makes the Vim defaults be used for options
@@ -1409,7 +1412,7 @@ A jump table for the options with a shor
 	marked with a '+' below.  Other options are not modified.
 	At the moment this option is set, several other options will be set
 	or reset to make Vim as Vi-compatible as possible.  See the table
-	below.	This can be used if you want to revert to Vi compatible
+	below.  This can be used if you want to revert to Vi compatible
 	editing.
 	See also 'cpoptions'.
 
@@ -1529,7 +1532,7 @@ A jump table for the options with a shor
 			global
 			{not in Vi}  {only for MS-DOS}
 	When on direct console I/O is used to obtain a keyboard character.
-	This should work in most cases.  Also see |'bioskey'|.	Together,
+	This should work in most cases.  Also see |'bioskey'|.  Together,
 	three methods of console input are available:
 	'conskey'   'bioskey'	    action ~
 	   on	     on or off	    direct console input
@@ -1556,7 +1559,7 @@ A jump table for the options with a shor
 			global
 			{not in Vi}
 	A sequence of single character flags.  When a character is present
-	this indicates vi-compatible behavior.	This is used for things where
+	this indicates vi-compatible behavior.  This is used for things where
 	not being vi-compatible is mostly or sometimes preferred.
 	'cpoptions' stands for "compatible-options".
 	Commas can be added for readability.
@@ -1635,6 +1638,9 @@ A jump table for the options with a shor
 								*cpo-i*
 		i	When included, interrupting the reading of a file will
 			leave it modified.
+								*cpo-I*
+		I	When moving the cursor up or down just after inserting
+			indent for 'autoindent', do not delete the indent.
 								*cpo-j*
 		j	When joining lines, only add two spaces after a '.',
 			not after '!' or '?'.  Also see 'joinspaces'.
@@ -1698,7 +1704,7 @@ A jump table for the options with a shor
 								*cpo-s*
 		s	Set buffer options when entering the buffer for the
 			first time.  This is like it is in Vim version 3.0.
-			And it is the default.	If not present the options are
+			And it is the default.  If not present the options are
 			set when the buffer is created.
 								*cpo-S*
 		S	Set buffer options always when entering a buffer
@@ -1719,7 +1725,7 @@ A jump table for the options with a shor
 			the history for search pattern, but doesn't change the
 			last used search pattern.
 								*cpo-u*
-		u	Undo is Vi compatible.	See |undo-two-ways|.
+		u	Undo is Vi compatible.  See |undo-two-ways|.
 								*cpo-v*
 		v	Backspaced characters remain visible on the screen in
 			Insert mode.  Without this flag the characters are
@@ -1763,14 +1769,14 @@ A jump table for the options with a shor
 			specially.  When matching a paren outside of quotes,
 			everything inside quotes is ignored.  When matching a
 			paren inside quotes, it will find the matching one (if
-			there is one).	This works very well for C programs.
+			there is one).  This works very well for C programs.
 								*cpo-star*
 		*	Use ":*" in the same way as ":@".  When not included,
 			":*" is an alias for ":'<,'>", select the Visual area.
 								*cpo-<*
 		<	Disable the recognition of special key codes in |<>|
 			form in mappings, abbreviations, and the "to" part of
-			menu commands.	For example, the command
+			menu commands.  For example, the command
 			":map X <Tab>" results in X being mapped to:
 				'<' included:	"<Tab>"  (5 characters)
 				'<' excluded:	"^I"	 (^I is a real <Tab>)
@@ -1845,7 +1851,7 @@ A jump table for the options with a shor
 'define' 'def'		string	(default "^\s*#\s*define")
 			global or local to buffer |global-local|
 			{not in Vi}
-	Pattern to be used to find a macro definition.	It is a search
+	Pattern to be used to find a macro definition.  It is a search
 	pattern, just like for the "/" command.  This option is used for the
 	commands like "[i" and "[d" |include-search|.  The 'isident' option is
 	used to recognize the defined name after the match:
@@ -1882,7 +1888,7 @@ A jump table for the options with a shor
 	contain a list of words.  This can be one word per line, or several
 	words per line, separated by non-keyword characters (white space is
 	preferred).  Maximum line length is 510 bytes.
-	To include a comma in a file name precede it with a backslash.	Spaces
+	To include a comma in a file name precede it with a backslash.  Spaces
 	after a comma are ignored, otherwise spaces are included in the file
 	name.  See |option-backslash| about using backslashes.
 	Where to find a list of words?
@@ -1901,7 +1907,7 @@ A jump table for the options with a shor
 			{not available when compiled without the |+diff|
 			feature}
 	Join the current window in the group of windows that shows differences
-	between files.	See |vimdiff|.
+	between files.  See |vimdiff|.
 
 						*'dex'* *'diffexpr'*
 'diffexpr' 'dex'	string	(default "")
@@ -1920,7 +1926,7 @@ A jump table for the options with a shor
 			{not in Vi}
 			{not available when compiled without the |+diff|
 			feature}
-	Option settings for diff mode.	It can consist of the following items.
+	Option settings for diff mode.  It can consist of the following items.
 	All are optional.  Items must be separated by a comma.
 
 		filler		Show filler lines, to keep the text
@@ -2014,7 +2020,7 @@ A jump table for the options with a shor
 	Change the way text is displayed.  This is comma separated list of
 	flags:
 	lastline	When included, as much as possible of the last line
-			in a window will be displayed.	When not included, a
+			in a window will be displayed.  When not included, a
 			last line that doesn't fit is replaced with "@" lines.
 	uhex		Show unprintable characters hexadecimal as <xx>
 			instead of using ^C and ~C.
@@ -2058,12 +2064,12 @@ A jump table for the options with a shor
 	"utf-8".  Although care has been taken to allow different values of
 	'encoding', "utf-8" is the natural choice for the environment and
 	avoids unnecessary conversion overhead.  "utf-8" has not been made
-	the default to prevent different behaviour of the GUI and terminal
+	the default to prevent different behavior of the GUI and terminal
 	versions, and to avoid changing the encoding of newly created files
 	without your knowledge (in case 'fileencodings' is empty).
 
 	The character encoding of files can be different from 'encoding'.
-	This is specified with 'fileencoding'.	The conversion is done with
+	This is specified with 'fileencoding'.  The conversion is done with
 	iconv() or as specified with 'charconvert'.
 
 	Normally 'encoding' will be equal to your current locale.  This will
@@ -2101,7 +2107,7 @@ A jump table for the options with a shor
 			local to buffer
 			{not in Vi}
 	When writing a file and this option is off and the 'binary' option
-	is on, no <EOL> will be written for the last line in the file.	This
+	is on, no <EOL> will be written for the last line in the file.  This
 	option is automatically set when starting to edit a new file, unless
 	the file does not have an <EOL> for the last line in the file, in
 	which case it is reset.  Normally you don't have to set or reset this
@@ -2116,7 +2122,7 @@ A jump table for the options with a shor
 			global
 			{not in Vi}
 	When on, all the windows are automatically made the same size after
-	splitting or closing a window.	When off, splitting a window will
+	splitting or closing a window.  When off, splitting a window will
 	reduce the size of the current window and leave the other windows the
 	same.  When closing a window the extra lines are given to the window
 	next to it (depending on 'splitbelow' and 'splitright').
@@ -2133,7 +2139,7 @@ A jump table for the options with a shor
 	External program to use for "=" command.  When this option is empty
 	the internal formatting functions are used ('lisp', 'cindent' or
 	'indentexpr').
-	Environment variables are expanded |:set_env|.	See |option-backslash|
+	Environment variables are expanded |:set_env|.  See |option-backslash|
 	about including spaces and backslashes.
 	This option cannot be set from a |modeline| or in the |sandbox|, for
 	security reasons.
@@ -2144,7 +2150,7 @@ A jump table for the options with a shor
 	Ring the bell (beep or screen flash) for error messages.  This only
 	makes a difference for error messages, the bell will be used always
 	for a lot of errors without a message (e.g., hitting <Esc> in Normal
-	mode).	See 'visualbell' on how to make the bell behave like a beep,
+	mode).  See 'visualbell' on how to make the bell behave like a beep,
 	screen flash or do nothing.
 
 						*'errorfile'* *'ef'*
@@ -2204,7 +2210,7 @@ A jump table for the options with a shor
 			local to buffer
 			{not in Vi}
 	In Insert mode: Use the appropriate number of spaces to insert a
-	<Tab>.	Spaces are used in indents with the '>' and '<' commands and
+	<Tab>.  Spaces are used in indents with the '>' and '<' commands and
 	when 'autoindent' is on.  To insert a real tab when 'expandtab' is
 	on, use CTRL-V<Tab>.  See also |:retab| and |ins-expandtab|.
 	NOTE: This option is reset when 'compatible' is set.
@@ -2256,7 +2262,7 @@ A jump table for the options with a shor
 
 							*'fe'*
 	NOTE: Before version 6.0 this option specified the encoding for the
-	whole of Vim, this was a mistake.  Now use 'encoding' instead.	The
+	whole of Vim, this was a mistake.  Now use 'encoding' instead.  The
 	old short name was 'fe', which is no longer used.
 
 					*'fileencodings'* *'fencs'*
@@ -2270,7 +2276,7 @@ A jump table for the options with a shor
 	an existing file.  When a file is read, Vim tries to use the first
 	mentioned character encoding.  If an error is detected, the next one
 	in the list is tried.  When an encoding is found that works,
-	'fileencoding' is set to it.	If all fail, 'fileencoding' is set to
+	'fileencoding' is set to it.  If all fail, 'fileencoding' is set to
 	an empty string, which means the value of 'encoding' is used.
 		WARNING: Conversion can cause loss of information!  When
 		'encoding' is "utf-8" (or one of the other Unicode variants)
@@ -2344,7 +2350,7 @@ A jump table for the options with a shor
 	- When empty, the format defined with 'fileformat' will be used
 	  always.  It is not set automatically.
 	- When set to one name, that format will be used whenever a new buffer
-	  is opened.  'fileformat' is set accordingly for that buffer.	The
+	  is opened.  'fileformat' is set accordingly for that buffer.  The
 	  'fileformats' name will be used when a file is read into an existing
 	  buffer, no matter what 'fileformat' for that buffer is set to.
 	- When more than one name is present, separated by commas, automatic
@@ -2353,7 +2359,7 @@ A jump table for the options with a shor
 	  1. If all lines end in <CR><NL>, and 'fileformats' includes "dos",
 	     'fileformat' is set to "dos".
 	  2. If a <NL> is found and 'fileformats' includes "unix", 'fileformat'
-	     is set to "unix".	Note that when a <NL> is found without a
+	     is set to "unix".  Note that when a <NL> is found without a
 	     preceding <CR>, "unix" is preferred over "dos".
 	  3. If 'fileformats' includes "mac", 'fileformat' is set to "mac".
 	     This means that "mac" is only chosen when "unix" is not present,
@@ -2424,7 +2430,7 @@ A jump table for the options with a shor
 	  fold:c	'-'		filling 'foldtext'
 	  diff:c	'-'		deleted lines of the 'diff' option
 
-	Any one that is omitted will fall back to the default.	For "stl" and
+	Any one that is omitted will fall back to the default.  For "stl" and
 	"stlnc" the space will be used when there is highlighting, '^' or '-'
 	otherwise.
 
@@ -2449,7 +2455,7 @@ A jump table for the options with a shor
 			feature}
 	When on, the keyboard is mapped for the Farsi character set.
 	Normally you would set 'allowrevins' and use CTRL-_ in insert mode to
-	toggle this option |i_CTRL-_|.	See |farsi.txt|.
+	toggle this option |i_CTRL-_|.  See |farsi.txt|.
 
 						*'foldclose'* *'fcl'*
 'foldclose' 'fcl'	string (default "")
@@ -2481,7 +2487,7 @@ A jump table for the options with a shor
 	When off, all folds are open.  This option can be used to quickly
 	switch between showing all text unfolded and viewing the text with
 	folds (including manually opened or closed folds).  It can be toggled
-	with the |zi| command.	The 'foldcolumn' will remain blank when
+	with the |zi| command.  The 'foldcolumn' will remain blank when
 	'foldenable' is off.
 	This option is set by commands that create a new fold or close a fold.
 	See |folding|.
@@ -2504,7 +2510,7 @@ A jump table for the options with a shor
 			feature}
 	Used only when 'foldmethod' is "indent".  Lines starting with
 	characters in 'foldignore' will get their fold level from surrounding
-	lines.	White space is skipped before checking for this character.
+	lines.  White space is skipped before checking for this character.
 	The default "#" works well for C programs.  See |fold-indent|.
 
 						*'foldlevel'* *'fdl'*
@@ -2529,7 +2535,7 @@ A jump table for the options with a shor
 	Useful to always start editing with all folds closed (value zero),
 	some folds closed (one) or no folds closed (99).
 	This is done before reading any modeline, thus a setting in a modeline
-	overrules this option.	Starting to edit a file for |diff-mode| also
+	overrules this option.  Starting to edit a file for |diff-mode| also
 	ignores this option and closes all folds.
 	It is also done before BufReadPre autocommands, to allow an autocmd to
 	overrule the 'foldlevel' value for specific files.
@@ -2605,7 +2611,7 @@ A jump table for the options with a shor
 				(not for a search pattern in a ":" command)
 		tag		jumping to a tag: ":ta", CTRL-T, etc.
 		undo		undo or redo: "u" and CTRL-R
-	When the command is part of a mapping this option is not used.	Add
+	When the command is part of a mapping this option is not used.  Add
 	the |zv| command to the mapping to get the same effect.
 	When a movement command is used for an operator (e.g., "dl" or "y%")
 	this option is not used.  This means the operator will include the
@@ -2715,12 +2721,12 @@ A jump table for the options with a shor
 			{only available when compiled with GUI enabled, and
 			for MS-DOS and Win32 console}
 	This option tells Vim what the cursor should look like in different
-	modes.	It fully works in the GUI.  In an MSDOS or Win32 console, only
+	modes.  It fully works in the GUI.  In an MSDOS or Win32 console, only
 	the height of the cursor can be changed.  This can be done by
 	specifying a block cursor, or a percentage for a vertical or
 	horizontal cursor.
 
-	The option is a comma separated list of parts.	Each part consist of a
+	The option is a comma separated list of parts.  Each part consist of a
 	mode-list and an argument-list:
 		mode-list:argument-list,mode-list:argument-list,..
 	The mode-list is a dash separated list of these modes:
@@ -2901,7 +2907,7 @@ A jump table for the options with a shor
 	If set and valid, 'guifontwide' is always used for double width
 	characters, even if 'encoding' is not set to "utf-8".
 	Vim does not attempt to find an appropriate value for 'guifontwide'
-	automatically.	If 'guifontwide' is empty Pango/Xft will choose the
+	automatically.  If 'guifontwide' is empty Pango/Xft will choose the
 	font for characters not available in 'guifont'.  Thus you do not need
 	to set 'guifontwide' at all unless you want to override the choice
 	made by Pango/Xft.
@@ -2913,7 +2919,7 @@ A jump table for the options with a shor
 	The number of pixels subtracted from the screen height when fitting
 	the GUI window on the screen.  Set this before the GUI is started,
 	e.g., in your |gvimrc| file.  When zero, the whole screen height will
-	be used by the window.	When positive, the specified number of pixel
+	be used by the window.  When positive, the specified number of pixel
 	lines will be left for window decorations and other items on the
 	screen.  Set it to a negative value to allow windows taller than the
 	screen.
@@ -2947,7 +2953,7 @@ A jump table for the options with a shor
 		by a yank or delete operation for the "* register.
 		The same applies to the modeless selection.
 
-	  'A'	Autoselect for the modeless selection.	Like 'a', but only
+	  'A'	Autoselect for the modeless selection.  Like 'a', but only
 		applies to the modeless selection.
 
 		    'guioptions'   autoselect Visual  autoselect modeless ~
@@ -2972,7 +2978,7 @@ A jump table for the options with a shor
 		limitations of X11.  For a color icon, see |X11-icon|.
 
 	  'm'	Menu bar is present.
-	  'M'	The system menu "$VIMRUNTIME/menu.vim" is not sourced.	Note
+	  'M'	The system menu "$VIMRUNTIME/menu.vim" is not sourced.  Note
 		that this flag must be added in the .vimrc file, before
 		switching on syntax or filetype recognition (when the .gvimrc
 		file is sourced the system menu has already been loaded; the
@@ -3009,7 +3015,7 @@ A jump table for the options with a shor
 		the right moment, try adding this flag.  This must be done
 		before starting the GUI.  Set it in your gvimrc.  Adding or
 		removing it after the GUI has started has no effect.
-	  'F'	Add a footer.  Only for Motif.	See |gui-footer|.
+	  'F'	Add a footer.  Only for Motif.  See |gui-footer|.
 
 						*'guipty'* *'noguipty'*
 'guipty'		boolean	(default on)
@@ -3029,7 +3035,7 @@ A jump table for the options with a shor
 	in 'runtimepath' will be used.
 	Environment variables are expanded |:set_env|.  For example:
 	"$VIMRUNTIME/doc/help.txt".  If $VIMRUNTIME is not set, $VIM is also
-	tried.	Also see |$VIMRUNTIME| and |option-backslash| about including
+	tried.  Also see |$VIMRUNTIME| and |option-backslash| about including
 	spaces and backslashes.
 	This option cannot be set from a |modeline| or in the |sandbox|, for
 	security reasons.
@@ -3075,7 +3081,7 @@ A jump table for the options with a shor
 	The commands that move through the buffer list sometimes make a buffer
 	hidden although the 'hidden' option is off: When the buffer is
 	modified, 'autowrite' is off or writing is not possible, and the '!'
-	flag was used.	See also |windows.txt|.
+	flag was used.  See also |windows.txt|.
 	This option is set for one command with ":hide {command}" |:hide|.
 	WARNING: It's easy to forget that you have changes in hidden buffers.
 	Think twice when using ":q!" or ":qa!".
@@ -3095,7 +3101,7 @@ A jump table for the options with a shor
 	This option can be used to set highlighting mode for various
 	occasions.  It is a comma separated list of character pairs.  The
 	first character in a pair gives the occasion, the second the mode to
-	use for that occasion.	The occasions are:
+	use for that occasion.  The occasions are:
 	|hl-SpecialKey|	 8  Meta and special keys listed with ":map"
 	|hl-NonText|	 @  '~' and '@' at the end of the window and
 			    characters from 'showbreak'
@@ -3158,7 +3164,7 @@ A jump table for the options with a shor
 	highlighting comes back.
 	When the search pattern can match an end-of-line, Vim will try to
 	highlight all of the matched text.  However, this depends on where the
-	search starts.	This will be the first line in the window or the first
+	search starts.  This will be the first line in the window or the first
 	line below a closed fold.  A match in a previous line which is not
 	drawn may not continue in an newly drawn line.
 	NOTE: This option is reset when 'compatible' is set.
@@ -3227,7 +3233,7 @@ A jump table for the options with a shor
 	When Vim was compiled with HAVE_X11 defined, the original icon will be
 	restored if possible |X11|.
 	When this option contains printf-style '%' items, they will be
-	expanded according to the rules used for 'statusline'.	See
+	expanded according to the rules used for 'statusline'.  See
 	'titlestring' for example settings.
 	{not available when compiled without the |+statusline| feature}
 
@@ -3342,7 +3348,7 @@ A jump table for the options with a shor
 			{not in Vi}
 			{not available when compiled without the
 			|+find_in_path| feature}
-	Pattern to be used to find an include command.	It is a search
+	Pattern to be used to find an include command.  It is a search
 	pattern, just like for the "/" command (See |pattern|).  The default
 	value is for C programs.  This option is used for the commands "[i",
 	"]I", "[d", etc..  The 'isfname' option is used to recognize the file
@@ -3356,12 +3362,12 @@ A jump table for the options with a shor
 			{not available when compiled without the
 			|+find_in_path| or |+eval| feature}
 	Expression to be used to transform the string found with the 'include'
-	option to a file name.	Mostly useful to change "." to "/" for Java: >
+	option to a file name.  Mostly useful to change "." to "/" for Java: >
 		:set includeexpr=substitute(v:fname,'\\.','/','g')
 <	The "v:fname" variable will be set to the file name that was detected.
 	Evaluated in the |sandbox|.
 	Also used for the |gf| command if an unmodified file name can't be
-	found.	Allows doing "gf" on the name after an 'include' statement.
+	found.  Allows doing "gf" on the name after an 'include' statement.
 	Also used for |<cfile>|.
 
 				 *'incsearch'* *'is'* *'noincsearch'* *'nois'*
@@ -3371,11 +3377,11 @@ A jump table for the options with a shor
 			{not available when compiled without the
 			|+extra_search| feature}
 	While typing a search command, show immediately where the so far
-	typed pattern matches.	The matched string is highlighted.  If the
+	typed pattern matches.  The matched string is highlighted.  If the
 	pattern is invalid or not found, nothing is shown.  The screen will
 	be updated often, this is only useful on fast terminals.  Note that
 	the match will be shown, but the cursor is not actually positioned
-	there.	You still need to finish the search command with <CR> to move
+	there.  You still need to finish the search command with <CR> to move
 	the cursor.  The highlighting can be set with the 'i' flag in
 	'highlight'.  See also: 'hlsearch'.
 	NOTE: This option is reset when 'compatible' is set.
@@ -3472,7 +3478,7 @@ A jump table for the options with a shor
 			{not in Vi}
 	The characters specified by this option are included in file names and
 	path names.  Filenames are used for commands like "gf", "[i" and in
-	the tags file.	It is also used for "\f" in a |pattern|.
+	the tags file.  It is also used for "\f" in a |pattern|.
 	Multi-byte characters 256 and above are always included, only the
 	characters up to 255 are specified with this option.
 	For UTF-8 the characters 0xa0 to 0xff are included as well.
@@ -3486,8 +3492,8 @@ A jump table for the options with a shor
 	cmd.exe.
 
 	The format of this option is a list of parts, separated with commas.
-	Each part can be a single character number or a range.	A range is two
-	character numbers with '-' in between.	A character number can be a
+	Each part can be a single character number or a range.  A range is two
+	character numbers with '-' in between.  A character number can be a
 	decimal number between 0 and 255 or the ASCII character itself (does
 	not work for digits).  Example:
 		"_,-,128-140,#-43"	(include '_' and '-' and the range
@@ -3524,7 +3530,7 @@ A jump table for the options with a shor
 	|pattern|. See 'isfname' for a description of the format of this
 	option.
 	Careful: If you change this option, it might break expanding
-	environment variables.	E.g., when '/' is included and Vim tries to
+	environment variables.  E.g., when '/' is included and Vim tries to
 	expand "$HOME/.viminfo".  Maybe you should change 'iskeyword' instead.
 
 						*'iskeyword'* *'isk'*
@@ -3535,7 +3541,7 @@ A jump table for the options with a shor
 			local to buffer
 			{not in Vi}
 	Keywords are used in searching and recognizing with many commands:
-	"w", "*", "[i", etc.  It is also used for "\k" in a |pattern|.	See
+	"w", "*", "[i", etc.  It is also used for "\k" in a |pattern|.  See
 	'isfname' for a description of the format of this option.  For C
 	programs you could use "a-z,A-Z,48-57,_,.,-,>".
 	For a help file it is set to all non-blank printable characters except
@@ -3650,7 +3656,7 @@ A jump table for the options with a shor
 			{only available when compiled with the |+langmap|
 			feature}
 	This option allows switching your keyboard into a special language
-	mode.	When you are typing text in Insert mode the characters are
+	mode.  When you are typing text in Insert mode the characters are
 	inserted directly.  When in command mode the 'langmap' option takes
 	care of translating these special characters to the original meaning
 	of the key.  This means you don't have to change the keyboard mode to
@@ -3730,7 +3736,7 @@ A jump table for the options with a shor
 			{not in Vi}
 	When this option is set, the screen will not be redrawn while
 	executing macros, registers and other commands that have not been
-	typed.	Also, updating the window title is postponed.  To force an
+	typed.  Also, updating the window title is postponed.  To force an
 	update use |:redraw|.
 
 			*'linebreak'* *'lbr'* *'nolinebreak'* *'nolbr'*
@@ -3811,7 +3817,7 @@ A jump table for the options with a shor
 'listchars' 'lcs'	string	(default "eol:$")
 			global
 			{not in Vi}
-	Strings to use in 'list' mode.	It is a comma separated list of string
+	Strings to use in 'list' mode.  It is a comma separated list of string
 	settings.
 	  eol:c		Character to show at the end of each line.  When
 			omitted, there is no extra character at the end of the
@@ -3821,7 +3827,7 @@ A jump table for the options with a shor
 			fill the space that the Tab normally occupies.
 			"tab:>-" will show a Tab that takes four spaces as
 			">---".  When omitted, a Tab is show as ^I.
-	  trail:c	Character to show for trailing spaces.	When omitted,
+	  trail:c	Character to show for trailing spaces.  When omitted,
 			trailing spaces are blank.
 	  extends:c	Character to show in the last column, when 'wrap' is
 			off and the line continues beyond the right of the
@@ -3830,7 +3836,7 @@ A jump table for the options with a shor
 			is off and there is text preceding the character
 			visible in the first column.
 
-	The characters ':' and ',' should not be used.	UTF-8 characters can
+	The characters ':' and ',' should not be used.  UTF-8 characters can
 	be used when 'encoding' is "utf-8", otherwise only printable
 	characters are allowed.
 
@@ -3902,7 +3908,7 @@ A jump table for the options with a shor
 			local to buffer
 			{not in Vi}
 	Characters that form pairs.  The |%| command jumps from one to the
-	other.	Currently only single character pairs are allowed, and they
+	other.  Currently only single character pairs are allowed, and they
 	must be different.  The characters must be separated by a colon.  The
 	pairs must be separated by a comma.  Example for including '<' and '>'
 	(HTML): >
@@ -3961,7 +3967,7 @@ A jump table for the options with a shor
 			global
 			{not in Vi}
 	Maximum amount of memory (in Kbyte) to use for all buffers together.
-	Maximum value 2000000.	Use this to work without a limit.  Also see
+	Maximum value 2000000.  Use this to work without a limit.  Also see
 	'maxmem'.
 
 						*'menuitems'* *'mis'*
@@ -4048,7 +4054,7 @@ A jump table for the options with a shor
 	See |mouse-using|.  Also see |'clipboard'|.
 
 	Note: When enabling the mouse in a terminal, copy/paste will use the
-	"* register if there is access to an X-server.	The xterm handling of
+	"* register if there is access to an X-server.  The xterm handling of
 	the mouse buttons can still be used by keeping the shift key pressed.
 	Also see the 'clipboard' option.
 
@@ -4235,11 +4241,11 @@ A jump table for the options with a shor
 'paste'			boolean	(default off)
 			global
 			{not in Vi}
-	Put Vim in Paste mode.	This is useful if you want to cut or copy
-	some text from one window and paste it in Vim.	This will avoid
+	Put Vim in Paste mode.  This is useful if you want to cut or copy
+	some text from one window and paste it in Vim.  This will avoid
 	unexpected effects.
 	Setting this option is useful when using Vim in a terminal, where Vim
-	cannot distinguish between typed text and pasted text.	In the GUI, Vim
+	cannot distinguish between typed text and pasted text.  In the GUI, Vim
 	knows about pasting and will mostly do the right thing without 'paste'
 	being set.  The same is true for a terminal where Vim handles the
 	mouse clicks itself.
@@ -4300,7 +4306,7 @@ A jump table for the options with a shor
 			{not available when compiled without the |+diff|
 			feature}
 	Expression which is evaluated to apply a patch to a file and generate
-	the resulting new version of the file.	See |diff-patchexpr|.
+	the resulting new version of the file.  See |diff-patchexpr|.
 
 						*'patchmode'* *'pm'* *E206*
 'patchmode' 'pm'	string	(default "")
@@ -4370,7 +4376,7 @@ A jump table for the options with a shor
 		:set path=.,c:/include
 <	Don't forget "." or files won't even be found in the same directory as
 	the file!
-	The maximum length is limited.	How much depends on the system, mostly
+	The maximum length is limited.  How much depends on the system, mostly
 	it is something like 256 or 1024 characters.
 	You can check if all the include files are found, using the value of
 	'path', see |:checkpath|.
@@ -4419,7 +4425,7 @@ A jump table for the options with a shor
 			{not in Vi}
 			{not available when compiled without the |+windows| or
 			|+quickfix| feature}
-	Identifies the preview window.	Only one window can have this option
+	Identifies the preview window.  Only one window can have this option
 	set.  It's normally not set directly, but by using one of the commands
 	|:ptag|, |:pedit|, etc.
 
@@ -4733,14 +4739,14 @@ A jump table for the options with a shor
 			{not available when compiled without the
 			|+cmdline_info| feature}
 	Show the line and column number of the cursor position, separated by a
-	comma.	When there is room, the relative position of the displayed
+	comma.  When there is room, the relative position of the displayed
 	text in the file is shown on the far right:
 		Top	first line is visible
 		Bot	last line is visible
 		All	first and last line are visible
 		45%	relative position in the file
 	If 'rulerformat' is set, it will determine the contents of the ruler.
-	Each window has its own ruler.	If a window has a status line, the
+	Each window has its own ruler.  If a window has a status line, the
 	ruler is shown there.  Otherwise it is shown in the last line of the
 	screen.  If the statusline is given by 'statusline' (ie. not empty),
 	this option takes precedence over 'ruler' and 'rulerformat'
@@ -4833,7 +4839,7 @@ A jump table for the options with a shor
 
 	Note that, unlike 'path', no wildcards like "**" are allowed.  Normal
 	wildcards are allowed, but can significantly slow down searching for
-	runtime files.	For speed, use as few items as possible and avoid
+	runtime files.  For speed, use as few items as possible and avoid
 	wildcards.
 	See |:runtime|.
 	Example: >
@@ -4856,7 +4862,7 @@ A jump table for the options with a shor
 	Number of lines to scroll with CTRL-U and CTRL-D commands.  Will be
 	set to half the number of lines in the window when the window size
 	changes.  If you give a count to the CTRL-U or CTRL-D command it will
-	be used as the new value for 'scroll'.	Reset to half the window
+	be used as the new value for 'scroll'.  Reset to half the window
 	height with ":set scroll=0".   {Vi is a bit different: 'scroll' gives
 	the number of screen lines instead of file lines, makes a difference
 	when lines wrap}
@@ -4945,7 +4951,7 @@ A jump table for the options with a shor
 	displayed.  Switch it off only if you know that you will not run into
 	problems, or when the 'exrc' option is off.  On Unix this option is
 	only used if the ".vimrc" or ".exrc" is not owned by you.  This can be
-	dangerous if the systems allows users to do a "chown".	You better set
+	dangerous if the systems allows users to do a "chown".  You better set
 	'secure' at the end of your ~/.vimrc then.
 	This option cannot be set from a |modeline| or in the |sandbox|, for
 	security reasons.
@@ -5035,14 +5041,14 @@ A jump table for the options with a shor
 	Name of the shell to use for ! and :! commands.  When changing the
 	value also check these options: 'shelltype', 'shellpipe', 'shellslash'
 	'shellredir', 'shellquote', 'shellxquote' and 'shellcmdflag'.
-	It is allowed to give an argument to the command, e.g.	"csh -f".
+	It is allowed to give an argument to the command, e.g.  "csh -f".
 	See |option-backslash| about including spaces and backslashes.
 	Environment variables are expanded |:set_env|.
 	If the name of the shell contains a space, you might need to enclose
 	it in quotes.  Example: >
 		:set shell=\"c:\program\ files\unix\sh.exe\"\ -f
 <	Note the backslash before each quote (to avoid starting a comment) and
-	each space (to avoid ending the option value).	Also note that the
+	each space (to avoid ending the option value).  Also note that the
 	"-f" is not inside the quotes, because it is not part of the command
 	name.  And Vim automagically recognizes the backslashes that are path
 	separators.
@@ -5080,7 +5086,7 @@ A jump table for the options with a shor
 			{not available when compiled without the |+quickfix|
 			feature}
 	String to be used to put the output of the ":make" command in the
-	error file.  See also |:make_makeprg|.	See |option-backslash| about
+	error file.  See also |:make_makeprg|.  See |option-backslash| about
 	including spaces and backslashes.
 	The name of the temporary file can be represented by "%s" if necessary
 	(the file name is appended automatically if no %s appears in the value
@@ -5209,7 +5215,7 @@ A jump table for the options with a shor
 						*'shiftwidth'* *'sw'*
 'shiftwidth' 'sw'	number	(default 8)
 			local to buffer
-	Number of spaces to use for each step of (auto)indent.	Used for
+	Number of spaces to use for each step of (auto)indent.  Used for
 	|'cindent'|, |>>|, |<<|, etc.
 
 						*'shortmess'* *'shm'*
@@ -5298,7 +5304,7 @@ A jump table for the options with a shor
 			{not in Vi}
 			{not available when compiled without the
 			|+cmdline_info| feature}
-	Show (partial) command in status line.	Set this option off if your
+	Show (partial) command in status line.  Set this option off if your
 	terminal is slow.
 	In Visual mode the size of the selected area is shown:
 	- When selecting characters within a line, the number of characters.
@@ -5313,7 +5319,7 @@ A jump table for the options with a shor
 			{not in Vi}
 	When completing a word in insert mode (see |ins-completion|) from the
 	tags file, show both the tag name and a tidied-up form of the search
-	pattern (if there is one) as possible matches.	Thus, if you have
+	pattern (if there is one) as possible matches.  Thus, if you have
 	matched a C function, you can see a template for what arguments are
 	required (coding style permitting).
 
@@ -5340,7 +5346,7 @@ A jump table for the options with a shor
 	If in Insert, Replace or Visual mode put a message on the last line.
 	Use the 'M' flag in 'highlight' to set the type of highlighting for
 	this message.
-	When |XIM| may be used the message will include "XIM".	But this
+	When |XIM| may be used the message will include "XIM".  But this
 	doesn't mean XIM is really active, especially when 'imactivatekey' is
 	not set.
 	NOTE: This option is set to the Vi default value when 'compatible' is
@@ -5386,7 +5392,7 @@ A jump table for the options with a shor
 	Override the 'ignorecase' option if the search pattern contains upper
 	case characters.  Only used when the search pattern is typed and
 	'ignorecase' option is on.  Used for the commands "/", "?", "n", "N",
-	":g" and ":s".	Not used for "*", "#", "gd", tag search, etc..	After
+	":g" and ":s".  Not used for "*", "#", "gd", tag search, etc..  After
 	"*" and "#" you can make 'smartcase' used by doing a "/" command,
 	recalling the search pattern from history and hitting <Enter>.
 	NOTE: This option is reset when 'compatible' is set.
@@ -5411,11 +5417,11 @@ A jump table for the options with a shor
 	given the same indent as the matching '{'.
 	When typing '#' as the first character in a new line, the indent for
 	that line is removed, the '#' is put in the first column.  The indent
-	is restored for the next line.	If you don't want this, use this
+	is restored for the next line.  If you don't want this, use this
 	mapping: ":inoremap # X^H#", where ^H is entered with CTRL-V CTRL-H.
 	When using the ">>" command, lines starting with '#' are not shifted
 	right.
-	NOTE: 'smartindent' is reset when 'compatible' is set.	When 'paste'
+	NOTE: 'smartindent' is reset when 'compatible' is set.  When 'paste'
 	is set smart indenting is disabled.
 
 				 *'smarttab'* *'sta'* *'nosmarttab'* *'nosta'*
@@ -5475,7 +5481,7 @@ A jump table for the options with a shor
 			{not in Vi}
 	When "on" the commands listed below move the cursor to the first
 	blank of the line.  When off the cursor is kept in the same column
-	(if possible).	This applies to the commands: CTRL-D, CTRL-U, CTRL-B,
+	(if possible).  This applies to the commands: CTRL-D, CTRL-U, CTRL-B,
 	CTRL-F, "G", "H", "M", "L", , and to the commands "d", "<<" and ">>"
 	with a linewise operator, with "%" with a count and to buffer changing
 	commands (CTRL-^, :bnext, :bNext, etc.).  Also for an Ex command that
@@ -5508,7 +5514,7 @@ A jump table for the options with a shor
 	0	    Leading zeroes in numeric items. Overridden by '-'.
 	minwid	    Minimum width of the item, padding as set by '-' & '0'.
 		    Value must be 50 or less.
-	maxwid	    Maximum width of the item.	Truncation occurs with a '<'
+	maxwid	    Maximum width of the item.  Truncation occurs with a '<'
 		    on the left for text items.  Numeric items will be
 		    shifted down to maxwid-2 digits followed by '>'number
 		    where number is the amount of missing digits, much like
@@ -5551,7 +5557,7 @@ A jump table for the options with a shor
 	L N   Number of lines in buffer.
 	c N   Column number.
 	v N   Virtual column number.
-	V N   Virtual column number as -{num}.	Not displayed if equal to 'c'.
+	V N   Virtual column number as -{num}.  Not displayed if equal to 'c'.
 	p N   Percentage through file in lines as in |CTRL-G|.
 	P S   Percentage through file of displayed window.  This is like the
 	      percentage described for 'ruler'.  Always 3 in length.
@@ -5573,7 +5579,7 @@ A jump table for the options with a shor
 
 	Display of flags are controlled by the following heuristic:
 	If a flag text starts with comma it is assumed that it wants to
-	separate itself from anything but preceding plaintext.	If it starts
+	separate itself from anything but preceding plaintext.  If it starts
 	with a space it is assumed that it wants to separate itself from
 	anything but other flags.  That is: A leading comma is removed if the
 	preceding character stems from plaintext.  A leading space is removed
@@ -5631,8 +5637,8 @@ A jump table for the options with a shor
 			{not in Vi}
 	Files with these suffixes get a lower priority when multiple files
 	match a wildcard.  See |suffixes|.  Commas can be used to separate the
-	suffixes.  Spaces after the comma are ignored.	A dot is also seen as
-	the start of a suffix.	To avoid a dot or comma being recognized as a
+	suffixes.  Spaces after the comma are ignored.  A dot is also seen as
+	the start of a suffix.  To avoid a dot or comma being recognized as a
 	separator, precede it with a backslash (see |option-backslash| about
 	including spaces and backslashes).
 	See 'wildignore' for completely ignoring files.
@@ -5654,7 +5660,7 @@ A jump table for the options with a shor
 'swapfile' 'swf'	boolean (default on)
 			local to buffer
 			{not in Vi}
-	Use a swapfile for the buffer.	This option can be reset when a
+	Use a swapfile for the buffer.  This option can be reset when a
 	swapfile is not wanted for a specific buffer.  For example, with
 	confidential information that even root must not be able to access.
 	Careful: All text will be in memory:
@@ -5675,7 +5681,7 @@ A jump table for the options with a shor
 			global
 			{not in Vi}
 	When this option is not empty a swap file is synced to disk after
-	writing to it.	This takes some time, especially on busy unix systems.
+	writing to it.  This takes some time, especially on busy unix systems.
 	When this option is empty parts of the swap file may be in memory and
 	not written to disk.  When the system crashes you may lose more work.
 	On Unix the system does a sync now and then without Vim asking for it,
@@ -5742,7 +5748,7 @@ A jump table for the options with a shor
 	   'expandtab'.  This way you will always insert spaces.  The
 	   formatting will never be messed up when 'tabstop' is changed.
 	3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a
-	   |modeline| to set these values when editing the file again.	Only
+	   |modeline| to set these values when editing the file again.  Only
 	   works when using Vim to edit the file.
 	4. Always set 'tabstop' and 'shiftwidth' to the same value, and
 	   'noexpandtab'.  This should then work (for initial indents only)
@@ -5756,7 +5762,7 @@ A jump table for the options with a shor
 			global
 			{not in Vi}
 	When searching for a tag (e.g., for the |:ta| command), Vim can either
-	use a binary search or a linear search in a tags file.	Binary
+	use a binary search or a linear search in a tags file.  Binary
 	searching makes searching for a tag a LOT faster, but a linear search
 	will find more tags if the tags file wasn't properly sorted.
 	Vim normally assumes that your tags files are sorted, or indicate that
@@ -5764,7 +5770,7 @@ A jump table for the options with a shor
 	'tagbsearch' option need to be switched off.
 
 	When 'tagbsearch' is on, binary searching is first used in the tags
-	files.	In certain situations, Vim will do a linear search instead for
+	files.  In certain situations, Vim will do a linear search instead for
 	certain files, or retry all files with a linear search.  When
 	'tagbsearch' is off, only a linear search is done.
 
@@ -5950,8 +5956,8 @@ A jump table for the options with a shor
 			{not in Vi}
 	Maximum width of text that is being inserted.  A longer line will be
 	broken after white space to get this width.  A zero value disables
-	this.  'textwidth' is set to 0 when the 'paste' option is set.	When
-	'textwidth' is zero, 'wrapmargin' may be used.	See also
+	this.  'textwidth' is set to 0 when the 'paste' option is set.  When
+	'textwidth' is zero, 'wrapmargin' may be used.  See also
 	'formatoptions' and |ins-textwidth|.
 	NOTE: This option is set to 0 when 'compatible' is set.
 
@@ -5960,13 +5966,13 @@ A jump table for the options with a shor
 			global or local to buffer |global-local|
 			{not in Vi}
 	List of file names, separated by commas, that are used to lookup words
-	for thesaurus completion commands |i_CTRL-X_CTRL-T|.	Each line in
+	for thesaurus completion commands |i_CTRL-X_CTRL-T|.  Each line in
 	the file should contain words with similar meaning, separated by
 	non-keyword characters (white space is preferred).  Maximum line
 	length is 510 bytes.
 	To obtain a file to be used here, check out the wordlist FAQ at
 	http://www.hyphenologist.co.uk .
-	To include a comma in a file name precede it with a backslash.	Spaces
+	To include a comma in a file name precede it with a backslash.  Spaces
 	after a comma are ignored, otherwise spaces are included in the file
 	name.  See |option-backslash| about using backslashes.
 	The use of |:set+=| and |:set-=| is preferred when adding or removing
@@ -6083,8 +6089,8 @@ A jump table for the options with a shor
 			{not available when compiled without the |+title|
 			feature}
 	Gives the percentage of 'columns' to use for the length of the window
-	title.	When the title is longer, only the end of the path name is
-	shown.	A '<' character before the path name is used to indicate this.
+	title.  When the title is longer, only the end of the path name is
+	shown.  A '<' character before the path name is used to indicate this.
 	Using a percentage makes this adapt to the width of the window.  But
 	it won't work perfectly, because the actual number of characters
 	available also depends on the font used and other things in the title
@@ -6124,7 +6130,7 @@ A jump table for the options with a shor
 	Some people prefer to have the file name first: >
     :set titlestring=%t%(\ %M%)%(\ (%{expand(\"%:~:.:h\")})%)%(\ %a%)
 <	Note the use of "%{ }" and an expression to get the path of the file,
-	without the file name.	The "%( %)" constructs are used to add a
+	without the file name.  The "%( %)" constructs are used to add a
 	separating space only when needed.
 	NOTE: Use of special characters in 'titlestring' may cause the display
 	to be garbled (e.g., when it contains a CR or NL character).
@@ -6135,12 +6141,12 @@ A jump table for the options with a shor
 			global
 			{only for |+GUI_GTK|, |+GUI_Athena|, |+GUI_Motif| and
 			|+GUI_Photon|}
-	The contents of this option controls various toolbar settings.	The
+	The contents of this option controls various toolbar settings.  The
 	possible values are:
 		icons		Toolbar buttons are shown with icons.
 		text		Toolbar buttons shown with text.
 		horiz		Icon and text of a toolbar button are
-				horizontally arranged.	{only in GTK+ 2 GUI}
+				horizontally arranged.  {only in GTK+ 2 GUI}
 		tooltips	Tooltips are active for toolbar buttons.
 	Tooltips refer to the popup help text which appears after the mouse
 	cursor is placed over a toolbar button for a brief moment.
@@ -6352,7 +6358,7 @@ A jump table for the options with a shor
 			{not available when compiled without the +mksession
 			feature}
 	Changes the effect of the |:mkview| command.  It is a comma separated
-	list of words.	Each word enables saving and restoring something:
+	list of words.  Each word enables saving and restoring something:
 	   word		save and restore ~
 	   cursor	cursor position in file and in window
 	   folds	manually created folds, opened/closed folds and local
@@ -6378,7 +6384,7 @@ A jump table for the options with a shor
 			{not available when compiled without the  |+viminfo|
 			feature}
 	When non-empty, the viminfo file is read upon startup and written
-	when exiting Vim (see |viminfo-file|).	The string should be a comma
+	when exiting Vim (see |viminfo-file|).  The string should be a comma
 	separated list of parameters, each consisting of a single character
 	identifying the particular parameter, followed by a number or string
 	which specifies the value of that parameter.  If a particular
@@ -6397,7 +6403,7 @@ A jump table for the options with a shor
 	%	When included, save and restore the buffer list.  If Vim is
 		started with a file name argument, the buffer list is not
 		restored.  If Vim is started without a file name argument, the
-		buffer list is restored from the viminfo file.	Buffers
+		buffer list is restored from the viminfo file.  Buffers
 		without a file name and buffers for help files are not written
 		to the viminfo file.
 	'	Maximum number of previously edited files for which the marks
@@ -6406,23 +6412,23 @@ A jump table for the options with a shor
 		Including this item also means that the |jumplist| and the
 		|changelist| are stored in the viminfo file.
 	/	Maximum number of items in the search pattern history to be
-		saved.	If non-zero, then the previous search and substitute
+		saved.  If non-zero, then the previous search and substitute
 		patterns are also saved.  When not included, the value of
 		'history' is used.
 	:	Maximum number of items in the command-line history to be
-		saved.	When not included, the value of 'history' is used.
+		saved.  When not included, the value of 'history' is used.
 	<	Maximum number of lines saved for each register.  If zero then
 		registers are not saved.  When not included, all lines are
 		saved.  '"' is the old name for this item.
 		Also see the 's' item below: limit specified in Kbyte.
 	@	Maximum number of items in the input-line history to be
-		saved.	When not included, the value of 'history' is used.
+		saved.  When not included, the value of 'history' is used.
 	c	When included, convert the text in the viminfo file from the
 		'encoding' used when writing the file to the current
 		'encoding'. See |viminfo-encoding|.
 	f	Whether file marks need to be stored.  If zero, file marks ('0
 		to '9, 'A to 'Z) are not stored.  When not present or when
-		non-zero, they are all stored.	'0 is used for the current
+		non-zero, they are all stored.  '0 is used for the current
 		cursor position (when exiting or when doing ":wviminfo").
 	h	Disable the effect of 'hlsearch' when loading the viminfo
 		file.  When not included, it depends on whether ":nohlsearch"
@@ -6631,7 +6637,7 @@ A jump table for the options with a shor
 			global
 			{not in Vi}
 	Completion mode that is used for the character specified with
-	'wildchar'.  It is a comma separated list of up to four parts.	Each
+	'wildchar'.  It is a comma separated list of up to four parts.  Each
 	part specifies what to do for each consecutive use of 'wildchar.  The
 	first part specifies the behavior for the first use of 'wildchar',
 	The second part for the second use, etc.
@@ -6678,7 +6684,7 @@ A jump table for the options with a shor
 	  yes	ALT key handling is done by the windowing system.  ALT key
 		combinations cannot be mapped.
 	  menu	Using ALT in combination with a character that is a menu
-		shortcut key, will be handled by the windowing system.	Other
+		shortcut key, will be handled by the windowing system.  Other
 		keys can be mapped.
 	If the menu is disabled by excluding 'm' from 'guioptions', the ALT
 	key is never used for the menu.
@@ -6692,7 +6698,7 @@ A jump table for the options with a shor
 			{not available when compiled without the +windows
 			feature}
 	Minimal number of lines for the current window.  This is not a hard
-	minimum, Vim will use fewer lines if there is not enough room.	If the
+	minimum, Vim will use fewer lines if there is not enough room.  If the
 	current window is smaller, its size is increased, at the cost of the
 	height of other windows.  Set it to 999 to make the current window
 	always fill the screen (although this has the drawback that ":all"
@@ -6771,8 +6777,8 @@ A jump table for the options with a shor
 	This option changes how text is displayed.  It doesn't change the text
 	in the buffer, see 'textwidth' for that.
 	When on, lines longer than the width of the window will wrap and
-	displaying continues on the next line.	When off lines will not wrap
-	and only part of long lines will be displayed.	When the cursor is
+	displaying continues on the next line.  When off lines will not wrap
+	and only part of long lines will be displayed.  When the cursor is
 	moved to a part that is not shown, the screen will scroll
 	horizontally.
 	The line will be broken in the middle of a word if necessary.  See
@@ -6805,7 +6811,7 @@ A jump table for the options with a shor
 			{not in Vi}
 	Allows writing files.  When not set, writing a file is not allowed.
 	Can be used for a view-only mode, where modifications to the text are
-	still allowed.	Can be reset with the |-m| or |-M| command line
+	still allowed.  Can be reset with the |-m| or |-M| command line
 	argument.  Filtering text is still possible, even though this requires
 	writing a temporary file.
 
--- a/runtime/doc/repeat.txt
+++ b/runtime/doc/repeat.txt
@@ -1,4 +1,4 @@
-*repeat.txt*    For Vim version 7.0aa.  Last change: 2004 Apr 02
+*repeat.txt*    For Vim version 7.0aa.  Last change: 2004 Jun 22
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -467,6 +467,13 @@ DEFINING BREAKPOINTS
 		Set a breakpoint in a sourced file.  Example: >
 			:breakadd file 43 .vimrc
 
+:breaka[dd] here
+		Set a breakpoint in the current line of the current file.
+		Like doing: >
+			:breakadd file <cursor-line> <current-file>
+<		Note that this only works for commands that are executed when
+		sourcing the file, not for a function defined in that file.
+
 The [lnum] is the line number of the breakpoint.  Vim will stop at or after
 this line.  When omitted line 1 is used.
 
@@ -501,6 +508,9 @@ DELETING BREAKPOINTS
 :breakd[el] file [lnum] {name}
 		Delete a breakpoint in a sourced file.
 
+:breakd[el] here
+		Delete a breakpoint at the current line of the current file.
+
 When [lnum] is omitted, the first breakpoint in the function or file is
 deleted.
 The {name} must be exactly the same as what was typed for the ":breakadd"
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 7.0aa.  Last change: 2004 Jun 20
+*todo.txt*      For Vim version 7.0aa.  Last change: 2004 Jun 24
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -30,6 +30,8 @@ be worked on, but only if you sponsor Vi
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
+Change for fsync() error in Vim 6 as patch?
+
 For version 7.0:
 -   Include many PATCHES:
     9   Merge in ideas from tutor.txt (Gabriel Zachmann)
@@ -59,7 +61,7 @@ For version 7.0:
 	InsmodLeave	    Taro Muraoka, 2004 Jun 16
     -   Include the kvim patch. http://freenux.org/vim/ (Mickael Marchand)
 	Do not add Qtopia yet, it doesn't work very well.
-	Mickael will update the patch before 21st.
+	update from Mickael 2004 Jun 20.
     8   Unix: When libcall() fails there is no clear error message.  Johannes
 	Zellner has a patch for this.
 	updated patch 2004 June 16.
@@ -88,7 +90,8 @@ For version 7.0:
     7   Completion of network shares, patch by Yasuhiro Matsumoto.
 	Update 2004 Jun 17.
     8   Patches from Peter "Rain Dog" Cucka:
-	- guifont selector (2002 Dec 15)  will send update
+	- guifont selector (2002 Dec 15)
+	  update 2004 Jun 20
     7   Add an option to set the width of the 'number' column.  Eight
 	positions is often more than needed.  Or adjust the width to the
 	length of the file?
@@ -215,11 +218,6 @@ For version 7.0:
     7   Motif: use the menu font consistently.  Patch from Martin Dalecki 2002
 	Jan 11.
     -   Motif: add 3D shading for the menu entries?  Patch from Martin Dalecki.
-    9   When 'autoindent' is set, hitting <CR> twice, while there is text after
-	the cursor, doesn't delete the autoindent in the resulting blank line.
-	(Rich Wales) This is Vi compatible, but it looks like a bug.  Rich has
-	a suggestion for a patch to fix this.
-	e-mail to Rich bounced.
     7   For Visual mode: Command to do a search for the string in the marked
 	area.  Only when fewer than two lines. Use "g/" and "gb".  Patch from
 	Yegappan Lakshmanan.
@@ -260,6 +258,12 @@ For version 7.0:
 	ispell inside Vim).  Gautam Iyer has an example with "aspell".
 	"engspchk" from Charles Campbell is a good way.  Support for
 	approximate-regexps will help (agrep http://www.tgries.de/agrep/).
+	- Charles Campbell asks for method to add "contained" groups to
+	  existing syntax items (to add @Spell).  Add ":syntax contains
+	  {pattern} add=@Spell" command?  A bit like ":syn cluster" but change
+	  the contains list directly for matching syntax items.
+        - Keep wordlist in syntax group, load it only once and use it several
+	  times later.  Sort of global syntax items.
 -   REFACTORING: The main() function is very long.  Move parts to separate
     functions, especially loops.  Ideas from Walter Briscoe (2003 Apr 3, 2004
     Feb 9).
@@ -302,6 +306,11 @@ 7   Support WINDOW TABS.  Works like sev
     Especially when using the scrollbar.  Typing a cursor-movement command
     scrolls back to where the cursor is.
 8   Support four composing characters, needed for Hebrew. (Ron Aaron)
+-   Add a few more things to 'diffopt': "horizontal", "vertical",
+    "foldcolumn". (Benji Fisher, 2004 Jun 21)
+-   FileChangedShellPost autocommand event: after (not) reloading a changed
+    file.  Can be used to update statusline oslt.
+-   Displaying size of Visual area: use 24-33 column display.
 
 
 Vi incompatibility:
@@ -1111,6 +1120,8 @@ Problems that will (probably) not be sol
 -   GTK: When pasting a selection from Vim to xclipboard gvim crashes with a
     ABRT signal.  Probably an error in the file gdkselection.c, the assert
     always fails when XmbTextListToTextProperty() fails. (Tom Allard)
+-   GTK 2: gives an assertion error for every non-builtin icon in the toolbar.
+    This is a GTK 2.4.x bug, fixed in GTK 2.4.2. (Thomas de Grenier de Latour)
 -   When using an xterm that supports the termresponse feature, and the 't_Co'
     termcap option was wrong when Vim started, it will be corrected when the
     termresponse is received.  Since the number of colors changes, the
@@ -2171,6 +2182,9 @@ Command line history:
 
 
 Insert mode:
+9   When 'autoindent' is set, hitting <CR> twice, while there is text after
+    the cursor, doesn't delete the autoindent in the resulting blank line.
+    (Rich Wales) This is Vi compatible, but it looks like a bug.
 8   When using CTRL-O in Insert mode, then executing an insert command
     "a" or "i", should we return to Insert mode after <Esc>? (Eggink)
     Perhaps it can be allowed a single time, to be able to do
@@ -3299,8 +3313,6 @@ 7   Tighter integration with xxd to edit
 -   Implement 'redraw' option.
 -   Add special code to 'sections' option to define something else but '{' or
     '}' as the start of a section (e.g. one shiftwidth to the right).
--   Add 'indent' option: Always use this amount of indent when starting a new
-    line and when formatting text.
 -   Use pipes for filtering on Unix.  Requires using fork() to be able to read
     and write at the same time, or some select() mechanism.
 7   Allow using Vim in a pipe: "ls | vim -u xxx.vim - | yyy".  Only needs
--- a/runtime/doc/usr_05.txt
+++ b/runtime/doc/usr_05.txt
@@ -1,4 +1,4 @@
-*usr_05.txt*	For Vim version 7.0aa.  Last change: 2004 Mar 12
+*usr_05.txt*	For Vim version 7.0aa.  Last change: 2004 Jun 24
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -369,8 +369,8 @@ adding.  If it's OK, you can give the ne
 	mv thefile ~/.vim/ftplugin/stuff_too.vim
 
 The underscore is used to separate the name of the filetype from the rest,
-which can be anything.  If you would use "otherstuff.vim" it wouldn't work, it
-would be loaded for the "otherstuff" filetype.
+which can be anything.  If you use "otherstuff.vim" it wouldn't work, it would
+be loaded for the "otherstuff" filetype.
 
 On MS-DOS you cannot use long filenames.  You would run into trouble if you
 add a second plugin and the filetype has more than six characters.  You can
@@ -505,7 +505,7 @@ before and after the option name.  For e
 	:help 'wrap'
 
 In case you have messed up an option value, you can set it back to the
-default by putting a ampersand (&) after the option name.  Example: >
+default by putting an ampersand (&) after the option name.  Example: >
 
 	:set iskeyword&
 
@@ -514,8 +514,8 @@ NOT WRAPPING LINES
 
 Vim normally wraps long lines, so that you can see all of the text.  Sometimes
 it's better to let the text continue right of the window.  Then you need to
-scroll the text left-right to see all of a long line.  Switch wrapping of with
-this command: >
+scroll the text left-right to see all of a long line.  Switch wrapping off
+with this command: >
 
 	:set nowrap
 
--- a/runtime/doc/version7.txt
+++ b/runtime/doc/version7.txt
@@ -1,4 +1,4 @@
-*version7.txt*  For Vim version 7.0aa.  Last change: 2004 Jun 07
+*version7.txt*  For Vim version 7.0aa.  Last change: 2004 Jun 24
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -32,6 +32,20 @@ INCOMPATIBLE CHANGES				*incompatible-7*
 These changes are incompatible with previous releases.  Check this list if you
 run into a problem when upgrading from Vim 6.x to 7.0
 
+":helpgrep" now uses a help window to display a match.
+
+
+Minor incompatibilities:
+
+For filetype detection: For many types, instead of ~/.dir/filename use
+*/.dir/filename, so that it also works for other user's files.
+
+":0verbose" now sets 'verbose' to zero instead of one.
+
+Removed the old and incomplete "VimBuddy" code.
+
+Buffers without a name report "No Name" instead of "No File".  It was
+confusing for buffers with a name and 'buftype' set to "nofile".
 
 ==============================================================================
 NEW FEATURES						*new-7*
@@ -68,10 +82,21 @@ New autocommand events: ~
 
 New Syntax files: ~
 
+Others: ~
+
+Mac: Add the selection type to the clipboard, so that Block, line and
+character selections can be used between two Vims. (Eckehard Berns)
+Also fixes the problem that setting 'clipboard' to "unnamed" breaks using
+"yyp".
 
 ==============================================================================
 IMPROVEMENTS						*improvements-7*
 
+":helpgrep" accepts a language specifier after the pattern: "pat@it".
+
+":breakadd here" and ":breakdel here" can be used to set or delete a
+breakpoint at the cursor.
+
 
 ==============================================================================
 COMPILE TIME CHANGES					*compile-changes-7*
@@ -80,5 +105,51 @@ COMPILE TIME CHANGES					*compile-change
 ==============================================================================
 BUG FIXES						*bug-fixes-7*
 
+When using PostScript printing on MS-DOS the default 'printexpr' used "lpr"
+instead of "copy".  When 'printdevice' was empty the copy command did not
+work.  Use "LPT1" then.
+
+The GTK font dialog uses a font size zero when the font name doesn't include a
+size.  Use a default size of 10.
+
+This example in the documentation didn't work:
+    :e `=foo . ".c" `
+Skip over the expression in `=expr` when looking for comments, |, % and #.
+
+When ":helpgrep" doesn't find anything there is no error message.
+
+"L" and "H" did not take closed folds into account.
+
+Win32: The "-P title" argument stopped at the first title that matched, even
+when it doesn't support MDI.
+
+Mac GUI: CTRL-^ and CTRL-@ did not work.
+
+"2daw" on "word." at the end of a line didn't include the preceding white
+space.
+
+Win32: Using FindExecutable() doesn't work to find a program.  Use
+SearchPath() instead.  For executable() use $PATHEXT when the program searched
+for doesn't have an extension.
+
+When 'virtualedit' is set, moving the cursor up after appending a character
+may move it to a different column.  Was caused by auto-formatting moving the
+cursor and not putting it back where it was.
+
+When indent was added automatically and then moving the cursor, the indent was
+not deleted (like when pressing ESC).  The "I" flag in 'cpoptions' can be used
+to make it work the old way.
+
+When <Space> is mapped to something that starts with a space, typing <Space>
+does not expand abbreviations.  Only disable expanding abbreviations when a
+mapping is not remapped, not when the RHS starts with the LHS.
+
+When opening a command-line window, 'textwidth' gets set to 78 by the Vim
+filetype plugin.  Reset 'textwidth' to 0 to avoid lines are broken.
+
+After using cursor(line, col) moving up/down doesn't keep the same column.
+
+Win32: Borland C before 5.5 requires using ".u." for LowPart and HighPart
+fields. (Walter Briscoe)
 
  vim:tw=78:ts=8:ft=help:norl:
--- a/runtime/plugin/explorer.vim
+++ b/runtime/plugin/explorer.vim
@@ -1,7 +1,7 @@
 "=============================================================================
 " File: explorer.vim
 " Author: M A Aziz Ahmed (aziz@acorn-networks.com - doesn't work)
-" Last Change:	2004 May 13
+" Last Change:	2004 Jun 22
 " Version: 2.5 + changes
 " Additions by Mark Waggoner (waggoner@aracnet.com) et al.
 "-----------------------------------------------------------------------------
@@ -647,7 +647,7 @@ function! s:ShowDirectory()
     let b:maxFileLen = 0
     0
     /^"=/+1,$g/^/call s:MarkDirs()
-    normal! `t
+    keepjumps normal! `t
     call s:AddFileInfo()
   endif
 
@@ -840,7 +840,7 @@ function! s:AddFileInfo()
   call s:AddSeparators()
 
   " return to start
-  normal! `t
+  keepjumps normal! `t
 
   let &sc = save_sc
 endfunction
@@ -973,7 +973,7 @@ function! s:UpdateHeader()
   " Go back where we came from if possible
   0
   if line("'t") != 0
-    normal! `t
+    keepjumps normal! `t
   endif
 
   let &report=oldRep
--- a/runtime/plugin/netrw.vim
+++ b/runtime/plugin/netrw.vim
@@ -1,18 +1,18 @@
-" netrw.vim: (global plugin) Handles file transfer across a network
-" Last Change:	Jun 18, 2004
+" netrw.vim: Handles file transfer and remote directory listing across a network
+" Last Change:	Jun 24, 2004
 " Maintainer:	Charles E. Campbell, Jr. PhD   <drchipNOSPAM at campbellfamily.biz>
-" Version:	46
+" Version:	47c	NOT RELEASED
 " License:	Vim License  (see vim's :help license)
 "
 "  But be doers of the word, and not only hearers, deluding your own selves
 "  (James 1:22 RSV)
 " =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
 
-" Exit quickly when already loaded or when 'compatible' is set.
+" Exit quickly when already loaded or when 'compatible' is set. {{{1
 if exists("loaded_netrw") || &cp
   finish
 endif
-let loaded_netrw = "v46"
+let loaded_netrw = "v47c"
 let s:save_cpo   = &cpo
 set cpo&vim
 
@@ -70,7 +70,7 @@ if !exists("g:netrw_fetch_cmd")
 endif
 if !exists("g:netrw_list_cmd")
  if executable("ssh")
-  let g:netrw_list_cmd= "ssh HOSTNAME ls -Fa"
+  let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa"
  else
 "  call Decho("ssh is not executable, can't do netlist")
   let g:netrw_list_cmd= ""
@@ -104,13 +104,13 @@ if version >= 600
  augroup Network
   au!
   if has("win32")
-   au BufReadCmd  file://*		exe "doau BufReadPre ".expand("<afile>")|exe 'e '.substitute(expand("<afile>"),"file:/*","","")|exe "doau BufReadPost ".expand("<afile>")
+   au BufReadCmd  file://*		exe "silent doau BufReadPre ".expand("<afile>")|exe 'e '.substitute(expand("<afile>"),"file:/*","","")|exe "silent doau BufReadPost ".expand("<afile>")
   else
-   au BufReadCmd  file:///*		exe "doau BufReadPre ".expand("<afile>")|exe 'e /'.substitute(expand("<afile>"),"file:/*","","")|exe "doau BufReadPost ".expand("<afile>")
-   au BufReadCmd  file://localhost/*	exe "doau BufReadPre ".expand("<afile>")|exe 'e /'.substitute(expand("<afile>"),"file:/*","","")|exe "doau BufReadPost ".expand("<afile>")
+   au BufReadCmd  file:///*		exe "silent doau BufReadPre ".expand("<afile>")|exe 'e /'.substitute(expand("<afile>"),"file:/*","","")|exe "silent doau BufReadPost ".expand("<afile>")
+   au BufReadCmd  file://localhost/*	exe "silent doau BufReadPre ".expand("<afile>")|exe 'e /'.substitute(expand("<afile>"),"file:/*","","")|exe "silent doau BufReadPost ".expand("<afile>")
   endif
-  au BufReadCmd  ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://*	exe "doau BufReadPre ".expand("<afile>")|exe "Nread 0r ".expand("<afile>")|exe "doau BufReadPost ".expand("<afile>")
-  au FileReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://*	exe "doau BufReadPre ".expand("<afile>")|exe "Nread "   .expand("<afile>")|exe "doau BufReadPost ".expand("<afile>")
+  au BufReadCmd  ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://*	exe "silent doau BufReadPre ".expand("<afile>")|exe "Nread 0r ".expand("<afile>")|exe "silent doau BufReadPost ".expand("<afile>")
+  au FileReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://*	exe "silent doau BufReadPre ".expand("<afile>")|exe "Nread "   .expand("<afile>")|exe "silent doau BufReadPost ".expand("<afile>")
   au BufWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://*    		exe "Nwrite "  .expand("<afile>")|call <SID>NetRestorePosn()
  augroup END
 endif
@@ -160,146 +160,585 @@ endfun
 " ------------------------------------------------------------------------
 " NetRead: responsible for reading a file over the net {{{1
 fun! s:NetRead(...)
-" call Dfunc("NetRead(a:1<".a:1.">)")
-
- " save options
- call s:NetOptionSave()
-
- " Special Exception: if a file is named "0r", then
- "		      "0r" will be used to read the
- "		      following files instead of "r"
- if	a:0 == 0
-  let readcmd= "r"
-  let ichoice= 0
- elseif a:1 == "0r"
-  let readcmd = "0r"
-  let ichoice = 2
- else
-  let readcmd = "r"
-  let ichoice = 1
- endif
-
- " get name of a temporary file
- let tmpfile= tempname()
-
-" call Decho("ichoice=".ichoice." readcmd<".readcmd.">")
- while ichoice <= a:0
-
-  " attempt to repeat with previous host-file-etc
-  if exists("b:netrw_lastfile") && a:0 == 0
-"   call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
-   let choice = b:netrw_lastfile
-   let ichoice= ichoice + 1
-
+"  call Dfunc("NetRead(a:1<".a:1.">)")
+ 
+  " save options
+  call s:NetOptionSave()
+ 
+  " Special Exception: if a file is named "0r", then
+  "		      "0r" will be used to read the
+  "		      following files instead of "r"
+  if	a:0 == 0
+   let readcmd= "r"
+   let ichoice= 0
+  elseif a:1 == "0r"
+   let readcmd = "0r"
+   let ichoice = 2
   else
-   exe "let choice= a:" . ichoice
-"   call Decho("no lastfile: choice<" . choice . ">")
-
-   " Reconstruct Choice if choice starts with '"'
-   if match(choice,"?") == 0
-    echo 'NetRead Usage:'
-    echo ':Nread machine:path                         uses rcp'
-    echo ':Nread "machine path"                       uses ftp   with <.netrc>'
-    echo ':Nread "machine id password path"           uses ftp'
-    echo ':Nread dav://machine[:port]/path            uses cadaver'
-    echo ':Nread fetch://machine/path                 uses fetch'
-    echo ':Nread ftp://[user@]machine[:port]/path     uses ftp   autodetects <.netrc>'
-    echo ':Nread http://[user@]machine/path           uses http  wget'
-    echo ':Nread rcp://[user@]machine/path            uses rcp'
-    echo ':Nread rsync://machine[:port]/path          uses rsync'
-    echo ':Nread scp://[user@]machine[[:#]port]/path  uses scp'
-    echo ':Nread sftp://[user@]machine[[:#]port]/path uses sftp'
-    break
-   elseif match(choice,"^\"") != -1
-"    call Decho("reconstructing choice")
-    if match(choice,"\"$") != -1
-     " case "..."
-     let choice=strpart(choice,1,strlen(choice)-2)
-    else
-      "  case "... ... ..."
-     let choice      = strpart(choice,1,strlen(choice)-1)
-     let wholechoice = ""
-
-     while match(choice,"\"$") == -1
-      let wholechoice = wholechoice . " " . choice
-      let ichoice     = ichoice + 1
-      if ichoice > a:0
-       echoerr "Unbalanced string in filename '". wholechoice ."'"
-"       call Dret("NetRead")
-       return
-      endif
-      let choice= a:{ichoice}
-     endwhile
-     let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
+   let readcmd = "r"
+   let ichoice = 1
+  endif
+ 
+  " get name of a temporary file
+  let tmpfile= tempname()
+ 
+"  call Decho("ichoice=".ichoice." readcmd<".readcmd.">")
+  while ichoice <= a:0
+ 
+   " attempt to repeat with previous host-file-etc
+   if exists("b:netrw_lastfile") && a:0 == 0
+"    call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
+    let choice = b:netrw_lastfile
+    let ichoice= ichoice + 1
+ 
+   else
+    exe "let choice= a:" . ichoice
+"    call Decho("no lastfile: choice<" . choice . ">")
+ 
+    " Reconstruct Choice if choice starts with '"'
+    if match(choice,"?") == 0
+     echo 'NetRead Usage:'
+     echo ':Nread machine:path                         uses rcp'
+     echo ':Nread "machine path"                       uses ftp   with <.netrc>'
+     echo ':Nread "machine id password path"           uses ftp'
+     echo ':Nread dav://machine[:port]/path            uses cadaver'
+     echo ':Nread fetch://machine/path                 uses fetch'
+     echo ':Nread ftp://[user@]machine[:port]/path     uses ftp   autodetects <.netrc>'
+     echo ':Nread http://[user@]machine/path           uses http  wget'
+     echo ':Nread rcp://[user@]machine/path            uses rcp'
+     echo ':Nread rsync://machine[:port]/path          uses rsync'
+     echo ':Nread scp://[user@]machine[[:#]port]/path  uses scp'
+     echo ':Nread sftp://[user@]machine[[:#]port]/path uses sftp'
+     break
+    elseif match(choice,"^\"") != -1
+"     call Decho("reconstructing choice")
+     if match(choice,"\"$") != -1
+      " case "..."
+      let choice=strpart(choice,1,strlen(choice)-2)
+     else
+       "  case "... ... ..."
+      let choice      = strpart(choice,1,strlen(choice)-1)
+      let wholechoice = ""
+ 
+      while match(choice,"\"$") == -1
+       let wholechoice = wholechoice . " " . choice
+       let ichoice     = ichoice + 1
+       if ichoice > a:0
+        echoerr "Unbalanced string in filename '". wholechoice ."'"
+"        call Dret("NetRead")
+        return
+       endif
+       let choice= a:{ichoice}
+      endwhile
+      let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
+     endif
     endif
    endif
-  endif
-"  call Decho("choice<" . choice . ">")
-  let ichoice= ichoice + 1
 
-  " fix up windows urls
-  if has("win32")
-   let choice = substitute(choice,'\\','/','ge')
-"   call Decho("fixing up windows url to <".choice."> tmpfile<".tmpfile)
-   exe 'lcd ' . fnamemodify(tmpfile,':h')
-   let tmpfile = fnamemodify(tmpfile,':t')
-  endif
-
-  " Determine method of read (ftp, rcp, etc)
-  call s:NetMethod(choice)
-
-  " Check if NetList() should be handling this request
-"  call Decho("checking if netlist: choice<".choice."> netrw_list_cmd<".g:netrw_list_cmd.">")
-  if choice =~ "^.*/$"
-   if strlen(g:netrw_list_cmd) > 0
-    call s:NetList(choice)
-"    call Dret("NetRead")
-   else
-    echoerr "sorry, can't do a remote listing; ssh isn't executable"
-   endif
-   return
-  endif
-
-  " ============
-  " Perform Read
-  " ============
+"   call Decho("choice<" . choice . ">")
+   let ichoice= ichoice + 1
+ 
+   " fix up windows urls
+   if has("win32")
+    let choice = substitute(choice,'\\','/','ge')
+"    call Decho("fixing up windows url to <".choice."> tmpfile<".tmpfile)
 
-  ".........................................
-  " rcp:  NetRead Method #1
-  if  b:netrw_method == 1 " read with rcp
-"   call Decho("read via rcp (method #1)")
-  " ER: noting done with g:netrw_uid yet?
-  " ER: on Win2K" rcp machine[.user]:file tmpfile
-  " ER: if machine contains '.' adding .user is required (use $USERNAME)
-  " ER: the tmpfile is full path: rcp sees C:\... as host C
-  if s:netrw_has_nt_rcp == 1
-   if exists("g:netrw_uid") &&	( g:netrw_uid != "" )
-    let uid_machine = g:netrw_machine .'.'. g:netrw_uid
+    exe 'lcd ' . fnamemodify(tmpfile,':h')
+    let tmpfile = fnamemodify(tmpfile,':t')
+   endif
+ 
+   " Determine method of read (ftp, rcp, etc)
+   call s:NetMethod(choice)
+ 
+   " Check if NetList() should be handling this request
+"   call Decho("checking if netlist: choice<".choice."> netrw_list_cmd<".g:netrw_list_cmd.">")
+   if choice =~ "^.*/$"
+    if strlen(g:netrw_list_cmd) > 0
+     keepjumps call s:NetList(choice)
+"     call Dret("NetRead")
+    else
+     echoerr "sorry, can't do a remote listing; ssh isn't executable"
+    endif
+    return
+   endif
+ 
+   " ============
+   " Perform Read
+   " ============
+ 
+   ".........................................
+   " rcp:  NetRead Method #1
+   if  b:netrw_method == 1 " read with rcp
+"    call Decho("read via rcp (method #1)")
+   " ER: noting done with g:netrw_uid yet?
+   " ER: on Win2K" rcp machine[.user]:file tmpfile
+   " ER: if machine contains '.' adding .user is required (use $USERNAME)
+   " ER: the tmpfile is full path: rcp sees C:\... as host C
+   if s:netrw_has_nt_rcp == 1
+    if exists("g:netrw_uid") &&	( g:netrw_uid != "" )
+     let uid_machine = g:netrw_machine .'.'. g:netrw_uid
+    else
+     " Any way needed it machine contains a '.'
+     let uid_machine = g:netrw_machine .'.'. $USERNAME
+    endif
    else
-    " Any way needed it machine contains a '.'
-    let uid_machine = g:netrw_machine .'.'. $USERNAME
+    if exists("g:netrw_uid") &&	( g:netrw_uid != "" )
+     let uid_machine = g:netrw_uid .'@'. g:netrw_machine
+    else
+     let uid_machine = g:netrw_machine
+    endif
    endif
-  else
-   if exists("g:netrw_uid") &&	( g:netrw_uid != "" )
-    let uid_machine = g:netrw_uid .'@'. g:netrw_machine
-   else
-    let uid_machine = g:netrw_machine
-   endif
-  endif
-"  call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".uid_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
-  exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".uid_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
-  let result           = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
-  let b:netrw_lastfile = choice
-
-  ".........................................
-  " ftp + <.netrc>:  NetRead Method #2
-  elseif b:netrw_method  == 2		" read with ftp + <.netrc>
-"   call Decho("read via ftp+.netrc (method #2)")
+"   call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".uid_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
+   exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".uid_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
+   let result           = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
+   let b:netrw_lastfile = choice
+ 
+   ".........................................
+   " ftp + <.netrc>:  NetRead Method #2
+   elseif b:netrw_method  == 2		" read with ftp + <.netrc>
+"    call Decho("read via ftp+.netrc (method #2)")
+     let netrw_fname= b:netrw_fname
+     new
+     set ff=unix
+     exe "put ='".g:netrw_ftpmode."'"
+     exe "put ='get ".netrw_fname." ".tmpfile."'"
+     if exists("g:netrw_port") && g:netrw_port != ""
+"      call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
+      exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
+     else
+"      call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
+      exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine
+     endif
+     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+     if getline(1) !~ "^$"
+      echoerr getline(1)
+     endif
+     bd!
+     let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
+     let b:netrw_lastfile = choice
+ 
+   ".........................................
+   " ftp + machine,id,passwd,filename:  NetRead Method #3
+   elseif b:netrw_method == 3		" read with ftp + machine, id, passwd, and fname
+    " Construct execution string (four lines) which will be passed through filter
+"    call Decho("read via ftp+mipf (method #3)")
+    let netrw_fname= b:netrw_fname
+    new
+    set ff=unix
+    if exists("g:netrw_port") && g:netrw_port != ""
+     put ='open '.g:netrw_machine.' '.g:netrw_port
+    else
+     put ='open '.g:netrw_machine
+    endif
+ 
+    if exists("g:netrw_ftp") && g:netrw_ftp == 1
+     put =g:netrw_uid
+     put =g:netrw_passwd
+    else
+     put ='user '.g:netrw_uid.' '.g:netrw_passwd
+    endif
+ 
+    if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
+     put =g:netrw_ftpmode
+    endif
+    put ='get '.netrw_fname.' '.tmpfile
+ 
+    " perform ftp:
+    " -i       : turns off interactive prompting from ftp
+    " -n  unix : DON'T use <.netrc>, even though it exists
+    " -n  win32: quit being obnoxious about password
+"    call Decho('performing ftp -i -n')
+    norm 1Gdd
+"    call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
+    exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
+    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+    if getline(1) !~ "^$"
+     echoerr getline(1)
+    endif
+    bd!
+    let result		= s:NetGetFile(readcmd, tmpfile, b:netrw_method)
+    let b:netrw_lastfile = choice
+ 
+   ".........................................
+   " scp: NetRead Method #4
+   elseif     b:netrw_method  == 4	" read with scp
+"    call Decho("read via scp (method #4)")
+    if exists("g:netrw_port") && g:netrw_port != ""
+     let useport= " -P ".g:netrw_port
+    else
+     let useport= ""
+    endif
+    if g:netrw_cygwin == 1
+     let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
+"     call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
+     exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
+    else
+"     call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
+     exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
+    endif
+    let result		= s:NetGetFile(readcmd, tmpfile, b:netrw_method)
+    let b:netrw_lastfile = choice
+ 
+   ".........................................
+   elseif     b:netrw_method  == 5	" read with http (wget)
+"    call Decho("read via http (method #5)")
+    if g:netrw_http_cmd == ""
+     echoerr "neither wget nor fetch command is available"
+     exit
+    endif
+ 
+    if match(b:netrw_fname,"#") == -1
+     " simple wget
+"     call Decho("executing: !".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.escape(b:netrw_fname,' ?&'))
+     exe g:netrw_silentxfer."!".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.escape(b:netrw_fname,' ?&')
+     let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
+ 
+    else
+     " wget plus a jump to an in-page marker (ie. http://abc/def.html#aMarker)
+     let netrw_html= substitute(b:netrw_fname,"#.*$","","")
+     let netrw_tag = substitute(b:netrw_fname,"^.*#","","")
+"     call Decho("netrw_html<".netrw_html.">")
+"     call Decho("netrw_tag <".netrw_tag.">")
+"     call Decho("executing: !".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_html)
+     exe g:netrw_silentxfer."!".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_html
+     let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
+"     call Decho('<\s*a\s*name=\s*"'.netrw_tag.'"/')
+     exe 'norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"/'."\<CR>"
+    endif
+    let b:netrw_lastfile = choice
+ 
+   ".........................................
+   " cadaver: NetRead Method #6
+   elseif     b:netrw_method  == 6	" read with cadaver
+"    call Decho("read via cadaver (method #6)")
+ 
+    " Construct execution string (four lines) which will be passed through filter
     let netrw_fname= b:netrw_fname
     new
     set ff=unix
+    if exists("g:netrw_port") && g:netrw_port != ""
+     put ='open '.g:netrw_machine.' '.g:netrw_port
+    else
+     put ='open '.g:netrw_machine
+    endif
+    put ='user '.g:netrw_uid.' '.g:netrw_passwd
+ 
+    if g:netrw_cygwin == 1
+     let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
+     put ='get '.netrw_fname.' '.cygtmpfile
+    else
+     put ='get '.netrw_fname.' '.tmpfile
+    endif
+ 
+    " perform cadaver operation:
+    norm 1Gdd
+"    call Decho("executing: %!".g:netrw_dav_cmd)
+    exe g:netrw_silentxfer."%!".g:netrw_dav_cmd
+    bd!
+    let result		= s:NetGetFile(readcmd, tmpfile, b:netrw_method)
+    let b:netrw_lastfile = choice
+ 
+   ".........................................
+   " rsync: NetRead Method #7
+   elseif     b:netrw_method  == 7	" read with rsync
+"    call Decho("read via rsync (method #7)")
+    if g:netrw_cygwin == 1
+     let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
+"     call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
+     exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
+    else
+"     call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
+     exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
+    endif
+    let result		= s:NetGetFile(readcmd,tmpfile, b:netrw_method)
+    let b:netrw_lastfile = choice
+ 
+   ".........................................
+   " fetch: NetRead Method #8
+   "    fetch://[user@]host[:http]/path
+   elseif     b:netrw_method  == 8	" read with fetch
+    if g:netrw_fetch_cmd == ""
+     echoerr "fetch command not available"
+     exit
+    endif
+    if exists("g:netrw_option") && g:netrw_option == ":http"
+     let netrw_option= "http"
+    else
+     let netrw_option= "ftp"
+    endif
+"    call Decho("read via fetch for ".netrw_option)
+ 
+    if exists("g:netrw_uid") && g:netrw_uid != "" && exists("g:netrw_passwd") && g:netrw_passwd != ""
+"     call Decho("executing: !".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_uid.':'.g:netrw_passwd.'@'.g:netrw_machine."/".escape(b:netrw_fname,' ?&'))
+     exe g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_uid.':'.g:netrw_passwd.'@'.g:netrw_machine."/".escape(b:netrw_fname,' ?&')
+    else
+"     call Decho("executing: !".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_machine."/".escape(b:netrw_fname,' ?&'))
+     exe g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_machine."/".escape(b:netrw_fname,' ?&')
+    endif
+ 
+    let result		= s:NetGetFile(readcmd,tmpfile, b:netrw_method)
+    let b:netrw_lastfile = choice
+ 
+   ".........................................
+   " sftp: NetRead Method #9
+   elseif     b:netrw_method  == 9	" read with sftp
+"    call Decho("read via sftp (method #4)")
+    if g:netrw_cygwin == 1
+     let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
+"     call Decho("!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
+"     call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
+     exe "!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
+    else
+"     call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
+     exe g:netrw_silentxfer."!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
+    endif
+    let result		= s:NetGetFile(readcmd, tmpfile, b:netrw_method)
+    let b:netrw_lastfile = choice
+ 
+   ".........................................
+   else " Complain
+    echo "***warning*** unable to comply with your request<" . choice . ">"
+   endif
+  endwhile
+ 
+  " cleanup
+"  call Decho("cleanup")
+  if exists("b:netrw_method")
+   unlet b:netrw_method
+   unlet g:netrw_machine
+   unlet b:netrw_fname
+  endif
+  call s:NetOptionRestore()
+ 
+"  call Dret("NetRead")
+endfun
+" end of NetRead
+
+" ------------------------------------------------------------------------
+" NetGetFile: Function to read file "fname" with command "readcmd". {{{1
+fun! s:NetGetFile(readcmd, fname, method)
+"   call Dfunc("NetGetFile(readcmd<".a:readcmd.">,fname<".a:fname."> method<".a:method.">)")
+ 
+  if exists("*NetReadFixup")
+   " for the use of NetReadFixup (not otherwise used internally)
+   let line2= line("$")
+  endif
+ 
+  " transform paths from / to \ for Windows, unless the shell is bash
+  if &term == "win32"
+   if &shell == "bash"
+    let fname=a:fname
+"    call Decho("(win32 && bash) fname<".fname.">")
+   else
+    let fname=substitute(a:fname,'/','\\\\','ge')
+"    call Decho("(win32 && !bash) fname<".fname.">")
+   endif
+  else
+   let fname= a:fname
+"   call Decho("(copied) fname<".fname.">")
+  endif
+ 
+  " get the file, but disable undo when reading a new buffer
+  if a:readcmd[0] == '0'
+   let use_e_cmd = 0		" 1 when using ':edit'
+   let delline   = 0		" 1 when have to delete empty last line
+   if line("$") == 1 && getline(1) == ""
+    " Now being asked to 0r a file into an empty file.
+    " Safe to :e it instead, unless there is another window on the same buffer.
+    let curbufnr  = bufnr("%")
+    let use_e_cmd = 1
+    let delline   = 1
+    " Loop over all windows,
+    " reset use_e_cmd when another one is editing the current buffer.
+    let i = 1
+    while 1
+      if i != winnr() && winbufnr(i) == curbufnr
+        let use_e_cmd = 0
+        break
+      endif
+      let i = i + 1
+      if winbufnr(i) < 0
+        break
+      endif
+    endwhile
+   endif
+ 
+   if use_e_cmd > 0
+    " ':edit' the temp file, wipe out the old buffer and rename the buffer
+    let curfilename = expand("%")
+ 
+    let binlocal = &l:bin
+    let binglobal = &g:bin
+    if binlocal
+      setglobal bin		" Need to set 'bin' globally for ":e" command.
+    endif
+    silent exe "e! ".v:cmdarg." ".fname
+    if binlocal && !binglobal
+      setglobal nobin
+      setlocal bin
+    endif
+ 
+    exe curbufnr . "bwipe!"
+    exe "f ".curfilename
+    " the ":f newname" apparently leaves the temporary file as the alternate
+    " file in the buffer list (see :ls!).  The following command wipes it out.
+    exe bufnr("#")."bwipe!"
+   else
+    let oldul= &ul
+    set ul=-1
+    exe a:readcmd." ".v:cmdarg." ".fname
+    if delline > 0
+     " wipe out last line, which should be a blank line anyway
+     $del
+    endif
+    let &ul= oldul
+   endif
+  elseif filereadable(fname)
+"   call Decho("exe<".a:readcmd." ".v:cmdarg." ".fname.">")
+   exe a:readcmd." ".v:cmdarg." ".fname
+  else
+"   call Dret("NetGetFile")
+   return
+  endif
+ 
+  " User-provided (ie. optional) fix-it-up command
+  if exists("*NetReadFixup")
+   let line1= line(".")
+   if a:readcmd == "r"
+    let line2= line("$") - line2 + line1
+   else
+    let line2= line("$") - line2
+   endif
+"   call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")")
+   call NetReadFixup(a:method, line1, line2)
+  endif
+ 
+"  call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> fname<".a:fname."> readable=".filereadable(a:fname))
+ 
+ " insure that we have the right filetype and that its being displayed
+  filetype detect
+  redraw!
+"  call Dret("NetGetFile")
+endfun
+
+" ------------------------------------------------------------------------
+" NetWrite: responsible for writing a file over the net {{{1
+fun! s:NetWrite(...) range
+"  call Dfunc("NetWrite(a:0=".a:0.")")
+ 
+  " option handling
+  let mod= 0
+  call s:NetOptionSave()
+ 
+  " Get Temporary Filename
+  let tmpfile= tempname()
+ 
+  if a:0 == 0
+   let ichoice = 0
+  else
+   let ichoice = 1
+  endif
+ 
+  " write (selected portion of) file to temporary
+  silent exe a:firstline."," . a:lastline . "w! ".v:cmdarg." ".tmpfile
+ 
+  while ichoice <= a:0
+ 
+   " attempt to repeat with previous host-file-etc
+   if exists("b:netrw_lastfile") && a:0 == 0
+"    call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
+    let choice = b:netrw_lastfile
+    let ichoice= ichoice + 1
+   else
+    exe "let choice= a:" . ichoice
+ 
+    " Reconstruct Choice if choice starts with '"'
+    if match(choice,"?") == 0
+     echo 'NetWrite Usage:"'
+     echo ':Nwrite machine:path                        uses rcp'
+     echo ':Nwrite "machine path"                      uses ftp with <.netrc>'
+     echo ':Nwrite "machine id password path"          uses ftp'
+     echo ':Nwrite dav://[user@]machine/path           uses cadaver'
+     echo ':Nwrite fetch://[user@]machine/path         uses fetch'
+     echo ':Nwrite ftp://machine[#port]/path           uses ftp  (autodetects <.netrc>)'
+     echo ':Nwrite rcp://machine/path                  uses rcp'
+     echo ':Nwrite rsync://[user@]machine/path         uses rsync'
+     echo ':Nwrite scp://[user@]machine[[:#]port]/path uses scp'
+     echo ':Nwrite sftp://[user@]machine/path          uses sftp'
+     break
+ 
+    elseif match(choice,"^\"") != -1
+     if match(choice,"\"$") != -1
+       " case "..."
+      let choice=strpart(choice,1,strlen(choice)-2)
+     else
+      "  case "... ... ..."
+      let choice      = strpart(choice,1,strlen(choice)-1)
+      let wholechoice = ""
+ 
+      while match(choice,"\"$") == -1
+       let wholechoice= wholechoice . " " . choice
+       let ichoice    = ichoice + 1
+       if choice > a:0
+        echoerr "Unbalanced string in filename '". wholechoice ."'"
+"        call Dret("NetWrite")
+        return
+       endif
+       let choice= a:{ichoice}
+      endwhile
+      let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
+     endif
+    endif
+   endif
+"   call Decho("choice<" . choice . ">")
+   let ichoice= ichoice + 1
+ 
+   " fix up windows urls
+   if has("win32")
+    let choice= substitute(choice,'\\','/','ge')
+    "ER: see NetRead()
+    exe 'lcd ' . fnamemodify(tmpfile,':h')
+    let tmpfile = fnamemodify(tmpfile,':t')
+   endif
+ 
+   " Determine method of read (ftp, rcp, etc)
+   call s:NetMethod(choice)
+ 
+   " =============
+   " Perform Write
+   " =============
+ 
+   ".........................................
+   " rcp: NetWrite Method #1
+   if  b:netrw_method == 1	" write with rcp
+" Decho "write via rcp (method #1)"
+    if s:netrw_has_nt_rcp == 1
+     if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
+      let uid_machine = g:netrw_machine .'.'. g:netrw_uid
+     else
+      let uid_machine = g:netrw_machine .'.'. $USERNAME
+     endif
+    else
+     if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
+      let uid_machine = g:netrw_uid .'@'. g:netrw_machine
+     else
+      let uid_machine = g:netrw_machine
+     endif
+    endif
+"    call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".escape(b:netrw_fname,' ?&'))
+    exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".escape(b:netrw_fname,' ?&')
+    let b:netrw_lastfile = choice
+ 
+   ".........................................
+   " ftp + <.netrc>: NetWrite Method #2
+   elseif b:netrw_method == 2	" write with ftp + <.netrc>
+    let netrw_fname = b:netrw_fname
+    new
+    set ff=unix
     exe "put ='".g:netrw_ftpmode."'"
-    exe "put ='get ".netrw_fname." ".tmpfile."'"
+"    call Decho(" NetWrite: put ='".g:netrw_ftpmode."'")
+    exe "put ='put ".tmpfile." ".netrw_fname."'"
+"    call Decho("put ='put ".tmpfile." ".netrw_fname."'")
     if exists("g:netrw_port") && g:netrw_port != ""
 "     call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
      exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
@@ -310,579 +749,147 @@ fun! s:NetRead(...)
     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
     if getline(1) !~ "^$"
      echoerr getline(1)
+     let mod=1
+    endif
+    bd!
+    let b:netrw_lastfile = choice
+ 
+   ".........................................
+   " ftp + machine, id, passwd, filename: NetWrite Method #3
+   elseif b:netrw_method == 3	" write with ftp + machine, id, passwd, and fname
+    let netrw_fname= b:netrw_fname
+    new
+    set ff=unix
+    if exists("g:netrw_port") && g:netrw_port != ""
+     put ='open '.g:netrw_machine.' '.g:netrw_port
+    else
+     put ='open '.g:netrw_machine
+    endif
+    if exists("g:netrw_ftp") && g:netrw_ftp == 1
+     put =g:netrw_uid
+     put =g:netrw_passwd
+    else
+     put ='user '.g:netrw_uid.' '.g:netrw_passwd
+    endif
+    put ='put '.tmpfile.' '.netrw_fname
+    " save choice/id/password for future use
+    let b:netrw_lastfile = choice
+ 
+    " perform ftp:
+    " -i       : turns off interactive prompting from ftp
+    " -n  unix : DON'T use <.netrc>, even though it exists
+    " -n  win32: quit being obnoxious about password
+"    call Decho('performing ftp -i -n')
+    norm 1Gdd
+"    call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
+    exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
+    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+    if getline(1) !~ "^$"
+     echoerr getline(1)
+     let mod=1
     endif
     bd!
-    let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
+ 
+   ".........................................
+   " scp: NetWrite Method #4
+   elseif     b:netrw_method == 4	" write with scp
+    if exists("g:netrw_port") && g:netrw_port != ""
+     let useport= " -P ".g:netrw_port
+    else
+     let useport= ""
+    endif
+    if g:netrw_cygwin == 1
+     let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
+"     call Decho("executing: !".g:netrw_scp_cmd.useport." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
+     exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
+    else
+"     call Decho("executing: !".g:netrw_scp_cmd.useport." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
+     exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
+    endif
     let b:netrw_lastfile = choice
-
-  ".........................................
-  " ftp + machine,id,passwd,filename:  NetRead Method #3
-  elseif b:netrw_method == 3		" read with ftp + machine, id, passwd, and fname
-   " Construct execution string (four lines) which will be passed through filter
-"  call Decho("read via ftp+mipf (method #3)")
-   let netrw_fname= b:netrw_fname
-   new
-   set ff=unix
-   if exists("g:netrw_port") && g:netrw_port != ""
-    put ='open '.g:netrw_machine.' '.g:netrw_port
-   else
-    put ='open '.g:netrw_machine
-   endif
-
-   if exists("g:netrw_ftp") && g:netrw_ftp == 1
-    put =g:netrw_uid
-    put =g:netrw_passwd
-   else
+ 
+   ".........................................
+   " http: NetWrite Method #5
+   elseif     b:netrw_method == 5
+    echoerr "***warning*** currently <netrw.vim> does not support writing using http:"
+ 
+   ".........................................
+   " dav: NetWrite Method #6
+   elseif     b:netrw_method == 6	" write with cadaver
+"    call Decho("write via cadaver (method #6)")
+ 
+    " Construct execution string (four lines) which will be passed through filter
+    let netrw_fname= b:netrw_fname
+    new
+    set ff=unix
+    if exists("g:netrw_port") && g:netrw_port != ""
+     put ='open '.g:netrw_machine.' '.g:netrw_port
+    else
+     put ='open '.g:netrw_machine
+    endif
     put ='user '.g:netrw_uid.' '.g:netrw_passwd
-   endif
-
-   if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
-    put =g:netrw_ftpmode
-   endif
-   put ='get '.netrw_fname.' '.tmpfile
-
-   " perform ftp:
-   " -i       : turns off interactive prompting from ftp
-   " -n  unix : DON'T use <.netrc>, even though it exists
-   " -n  win32: quit being obnoxious about password
-"   call Decho('performing ftp -i -n')
-   norm 1Gdd
-"   call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
-   exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
-   " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
-   if getline(1) !~ "^$"
-    echoerr getline(1)
-   endif
-   bd!
-   let result		= s:NetGetFile(readcmd, tmpfile, b:netrw_method)
-   let b:netrw_lastfile = choice
-
-  ".........................................
-  " scp: NetRead Method #4
-  elseif     b:netrw_method  == 4	" read with scp
-"   call Decho("read via scp (method #4)")
-   if exists("g:netrw_port") && g:netrw_port != ""
-    let useport= " -P ".g:netrw_port
-   else
-    let useport= ""
-   endif
-   if g:netrw_cygwin == 1
-    let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-"    call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
-    exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
-   else
-"    call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
-    exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
-   endif
-   let result		= s:NetGetFile(readcmd, tmpfile, b:netrw_method)
-   let b:netrw_lastfile = choice
-
-  ".........................................
-  elseif     b:netrw_method  == 5	" read with http (wget)
-"   call Decho("read via http (method #5)")
-   if g:netrw_http_cmd == ""
-    echoerr "neither wget nor fetch command is available"
-    exit
-   endif
-
-   if match(b:netrw_fname,"#") == -1
-    " simple wget
-"    call Decho("executing: !".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.escape(b:netrw_fname,' ?&'))
-    exe g:netrw_silentxfer."!".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.escape(b:netrw_fname,' ?&')
-    let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
-
-   else
-    " wget plus a jump to an in-page marker (ie. http://abc/def.html#aMarker)
-    let netrw_html= substitute(b:netrw_fname,"#.*$","","")
-    let netrw_tag = substitute(b:netrw_fname,"^.*#","","")
-"	call Decho("netrw_html<".netrw_html.">")
-"	call Decho("netrw_tag <".netrw_tag.">")
-"    call Decho("executing: !".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_html)
-    exe g:netrw_silentxfer."!".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_html
-    let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
-"    call Decho('<\s*a\s*name=\s*"'.netrw_tag.'"/')
-    exe 'norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"/'."\<CR>"
-   endif
-   let b:netrw_lastfile = choice
-
-  ".........................................
-  " cadaver: NetRead Method #6
-  elseif     b:netrw_method  == 6	" read with cadaver
-"   call Decho("read via cadaver (method #6)")
-
-   " Construct execution string (four lines) which will be passed through filter
-   let netrw_fname= b:netrw_fname
-   new
-   set ff=unix
-   if exists("g:netrw_port") && g:netrw_port != ""
-    put ='open '.g:netrw_machine.' '.g:netrw_port
-   else
-    put ='open '.g:netrw_machine
-   endif
-   put ='user '.g:netrw_uid.' '.g:netrw_passwd
-
-   if g:netrw_cygwin == 1
-    let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-    put ='get '.netrw_fname.' '.cygtmpfile
-   else
-    put ='get '.netrw_fname.' '.tmpfile
-   endif
-
-   " perform cadaver operation:
-   norm 1Gdd
-"   call Decho("executing: %!".g:netrw_dav_cmd)
-   exe g:netrw_silentxfer."%!".g:netrw_dav_cmd
-   bd!
-   let result		= s:NetGetFile(readcmd, tmpfile, b:netrw_method)
-   let b:netrw_lastfile = choice
-
-  ".........................................
-  " rsync: NetRead Method #7
-  elseif     b:netrw_method  == 7	" read with rsync
-"   call Decho("read via rsync (method #7)")
-   if g:netrw_cygwin == 1
-    let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-"    call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
-    exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
-   else
-"    call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
-    exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
-   endif
-   let result		= s:NetGetFile(readcmd,tmpfile, b:netrw_method)
-   let b:netrw_lastfile = choice
-
-  ".........................................
-  " fetch: NetRead Method #8
-  "    fetch://[user@]host[:http]/path
-  elseif     b:netrw_method  == 8	" read with fetch
-   if g:netrw_fetch_cmd == ""
-    echoerr "fetch command not available"
-    exit
-   endif
-   if exists("g:netrw_option") && g:netrw_option == ":http"
-    let netrw_option= "http"
-   else
-    let netrw_option= "ftp"
-   endif
-"   call Decho("read via fetch for ".netrw_option)
-
-   if exists("g:netrw_uid") && g:netrw_uid != "" && exists("g:netrw_passwd") && g:netrw_passwd != ""
-"    call Decho("executing: !".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_uid.':'.g:netrw_passwd.'@'.g:netrw_machine."/".escape(b:netrw_fname,' ?&'))
-    exe g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_uid.':'.g:netrw_passwd.'@'.g:netrw_machine."/".escape(b:netrw_fname,' ?&')
-   else
-"    call Decho("executing: !".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_machine."/".escape(b:netrw_fname,' ?&'))
-    exe g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_machine."/".escape(b:netrw_fname,' ?&')
-   endif
-
-   let result		= s:NetGetFile(readcmd,tmpfile, b:netrw_method)
-   let b:netrw_lastfile = choice
-
-  ".........................................
-  " sftp: NetRead Method #9
-  elseif     b:netrw_method  == 9	" read with sftp
-"   call Decho("read via sftp (method #4)")
-   if g:netrw_cygwin == 1
-    let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-"    call Decho("!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
-"    call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
-    exe "!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
-   else
-"    call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
-    exe g:netrw_silentxfer."!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
-   endif
-   let result		= s:NetGetFile(readcmd, tmpfile, b:netrw_method)
-   let b:netrw_lastfile = choice
-
-  ".........................................
-  else " Complain
-   echo "***warning*** unable to comply with your request<" . choice . ">"
-  endif
- endwhile
-
- " cleanup
-" call Decho("cleanup")
- if exists("b:netrw_method")
-  unlet b:netrw_method
-  unlet g:netrw_machine
-  unlet b:netrw_fname
- endif
- call s:NetOptionRestore()
-
-" call Dret("NetRead")
-endfun
-" end of NetRead
-
-" ------------------------------------------------------------------------
-" NetGetFile: Function to read file "fname" with command "readcmd". {{{1
-fun! s:NetGetFile(readcmd, fname, method)
-""  call Dfunc("NetGetFile(readcmd<".a:readcmd.">,fname<".a:fname."> method<".a:method.">)")
-
- if exists("*NetReadFixup")
-  " for the use of NetReadFixup (not otherwise used internally)
-  let line2= line("$")
- endif
-
- " transform paths from / to \ for Windows, unless the shell is bash
- if &term == "win32"
-  if &shell == "bash"
-   let fname=a:fname
-""  call Decho("(win32 && bash) fname<".fname.">")
-  else
-   let fname=substitute(a:fname,'/','\\\\','ge')
-""  call Decho("(win32 && !bash) fname<".fname.">")
-  endif
- else
-  let fname= a:fname
-""  call Decho("(copied) fname<".fname.">")
- endif
-
- " get the file, but disable undo when reading a new buffer
- if a:readcmd[0] == '0'
-  let use_e_cmd = 0		" 1 when using ':edit'
-  let delline   = 0		" 1 when have to delete empty last line
-  if line("$") == 1 && getline(1) == ""
-   " Now being asked to 0r a file into an empty file.
-   " Safe to :e it instead, unless there is another window on the same buffer.
-   let curbufnr  = bufnr("%")
-   let use_e_cmd = 1
-   let delline   = 1
-   " Loop over all windows,
-   " reset use_e_cmd when another one is editing the current buffer.
-   let i = 1
-   while 1
-     if i != winnr() && winbufnr(i) == curbufnr
-       let use_e_cmd = 0
-       break
-     endif
-     let i = i + 1
-     if winbufnr(i) < 0
-       break
-     endif
-   endwhile
-  endif
-
-  if use_e_cmd > 0
-   " ':edit' the temp file, wipe out the old buffer and rename the buffer
-   let curfilename = expand("%")
-
-   let binlocal = &l:bin
-   let binglobal = &g:bin
-   if binlocal
-     setglobal bin		" Need to set 'bin' globally for ":e" command.
-   endif
-   silent exe "e! ".v:cmdarg." ".fname
-   if binlocal && !binglobal
-     setglobal nobin
-     setlocal bin
-   endif
-
-   exe curbufnr . "bwipe!"
-   exe "f ".curfilename
-   " the ":f newname" apparently leaves the temporary file as the alternate
-   " file in the buffer list (see :ls!).  The following command wipes it out.
-   exe bufnr("#")."bwipe!"
-  else
-   let oldul= &ul
-   set ul=-1
-   exe a:readcmd." ".v:cmdarg." ".fname
-   if delline > 0
-    " wipe out last line, which should be a blank line anyway
-    $del
-   endif
-   let &ul= oldul
-  endif
- else
-  exe a:readcmd." ".v:cmdarg." ".fname
- endif
-
- " User-provided (ie. optional) fix-it-up command
- if exists("*NetReadFixup")
-  let line1= line(".")
-  if a:readcmd == "r"
-   let line2= line("$") - line2 + line1
-  else
-   let line2= line("$") - line2
-  endif
-""  call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")")
-  call NetReadFixup(a:method, line1, line2)
- endif
-"" call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> fname<".a:fname."> readable=".filereadable(a:fname))
-
-" insure that we have the right filetype and that its being displayed
- filetype detect
- redraw!
-"" call Dret("NetGetFile")
-endfun
-
-" ------------------------------------------------------------------------
-" NetWrite: responsible for writing a file over the net {{{1
-fun! s:NetWrite(...) range
-"" call Dfunc("NetWrite(a:0=".a:0.")")
-
- " option handling
- let mod= 0
- call s:NetOptionSave()
-
- " Get Temporary Filename
- let tmpfile= tempname()
-
- if a:0 == 0
-  let ichoice = 0
- else
-  let ichoice = 1
- endif
-
- " write (selected portion of) file to temporary
- silent exe a:firstline."," . a:lastline . "w! ".v:cmdarg." ".tmpfile
-
- while ichoice <= a:0
-
-  " attempt to repeat with previous host-file-etc
-  if exists("b:netrw_lastfile") && a:0 == 0
-""   call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
-   let choice = b:netrw_lastfile
-   let ichoice= ichoice + 1
-  else
-   exe "let choice= a:" . ichoice
-
-   " Reconstruct Choice if choice starts with '"'
-   if match(choice,"?") == 0
-    echo 'NetWrite Usage:"'
-    echo ':Nwrite machine:path                        uses rcp'
-    echo ':Nwrite "machine path"                      uses ftp with <.netrc>'
-    echo ':Nwrite "machine id password path"          uses ftp'
-    echo ':Nwrite dav://[user@]machine/path           uses cadaver'
-    echo ':Nwrite fetch://[user@]machine/path         uses fetch'
-    echo ':Nwrite ftp://machine[#port]/path           uses ftp  (autodetects <.netrc>)'
-    echo ':Nwrite rcp://machine/path                  uses rcp'
-    echo ':Nwrite rsync://[user@]machine/path         uses rsync'
-    echo ':Nwrite scp://[user@]machine[[:#]port]/path uses scp'
-    echo ':Nwrite sftp://[user@]machine/path          uses sftp'
-    break
-
-   elseif match(choice,"^\"") != -1
-    if match(choice,"\"$") != -1
-      " case "..."
-     let choice=strpart(choice,1,strlen(choice)-2)
+ 
+    if g:netrw_cygwin == 1
+     let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
+     put ='put '.cygtmpfile.' '.netrw_fname
     else
-     "  case "... ... ..."
-     let choice      = strpart(choice,1,strlen(choice)-1)
-     let wholechoice = ""
-
-     while match(choice,"\"$") == -1
-      let wholechoice= wholechoice . " " . choice
-      let ichoice    = ichoice + 1
-      if choice > a:0
-       echoerr "Unbalanced string in filename '". wholechoice ."'"
-""       call Dret("NetWrite")
-       return
-      endif
-      let choice= a:{ichoice}
-     endwhile
-     let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
+     put ='put '.tmpfile.' '.netrw_fname
     endif
-   endif
-  endif
-""  call Decho("choice<" . choice . ">")
-  let ichoice= ichoice + 1
-
-  " fix up windows urls
-  if has("win32")
-   let choice= substitute(choice,'\\','/','ge')
-   "ER: see NetRead()
-   exe 'lcd ' . fnamemodify(tmpfile,':h')
-   let tmpfile = fnamemodify(tmpfile,':t')
-  endif
-
-  " Determine method of read (ftp, rcp, etc)
-  call s:NetMethod(choice)
-
-  " =============
-  " Perform Write
-  " =============
-
-  ".........................................
-  " rcp: NetWrite Method #1
-  if  b:netrw_method == 1	" write with rcp
-""	Decho "write via rcp (method #1)"
-   if s:netrw_has_nt_rcp == 1
-    if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
-     let uid_machine = g:netrw_machine .'.'. g:netrw_uid
+ 
+    " perform cadaver operation:
+    norm 1Gdd
+"    call Decho("executing: %!".g:netrw_dav_cmd)
+    exe g:netrw_silentxfer."%!".g:netrw_dav_cmd
+    bd!
+    let b:netrw_lastfile = choice
+ 
+   ".........................................
+   " rsync: NetWrite Method #7
+   elseif     b:netrw_method == 7	" write with rsync
+    if g:netrw_cygwin == 1
+     let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
+"     call Decho("executing: !".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
+     exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
     else
-     let uid_machine = g:netrw_machine .'.'. $USERNAME
+"     call Decho("executing: !".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
+     exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
     endif
-   else
+    let b:netrw_lastfile = choice
+ 
+   ".........................................
+   " scp: NetWrite Method #9
+   elseif     b:netrw_method == 9	" write with sftp
+    let netrw_fname= b:netrw_fname
     if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
      let uid_machine = g:netrw_uid .'@'. g:netrw_machine
     else
      let uid_machine = g:netrw_machine
     endif
-   endif
-""   call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".escape(b:netrw_fname,' ?&'))
-   exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".escape(b:netrw_fname,' ?&')
-   let b:netrw_lastfile = choice
-
-  ".........................................
-  " ftp + <.netrc>: NetWrite Method #2
-  elseif b:netrw_method == 2	" write with ftp + <.netrc>
-   let netrw_fname = b:netrw_fname
-   new
-   set ff=unix
-   exe "put ='".g:netrw_ftpmode."'"
-""   call Decho(" NetWrite: put ='".g:netrw_ftpmode."'")
-   exe "put ='put ".tmpfile." ".netrw_fname."'"
-""   call Decho("put ='put ".tmpfile." ".netrw_fname."'")
-   if exists("g:netrw_port") && g:netrw_port != ""
-""    call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
-    exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
-   else
-""    call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
-    exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine
-   endif
-   " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
-   if getline(1) !~ "^$"
-    echoerr getline(1)
-    let mod=1
-   endif
-   bd!
-   let b:netrw_lastfile = choice
-
-  ".........................................
-  " ftp + machine, id, passwd, filename: NetWrite Method #3
-  elseif b:netrw_method == 3	" write with ftp + machine, id, passwd, and fname
-   let netrw_fname= b:netrw_fname
-   new
-   set ff=unix
-   if exists("g:netrw_port") && g:netrw_port != ""
-    put ='open '.g:netrw_machine.' '.g:netrw_port
-   else
-    put ='open '.g:netrw_machine
-   endif
-   if exists("g:netrw_ftp") && g:netrw_ftp == 1
-    put =g:netrw_uid
-    put =g:netrw_passwd
-   else
-    put ='user '.g:netrw_uid.' '.g:netrw_passwd
-   endif
-   put ='put '.tmpfile.' '.netrw_fname
-   " save choice/id/password for future use
-   let b:netrw_lastfile = choice
-
-   " perform ftp:
-   " -i       : turns off interactive prompting from ftp
-   " -n  unix : DON'T use <.netrc>, even though it exists
-   " -n  win32: quit being obnoxious about password
-""   call Decho('performing ftp -i -n')
-   norm 1Gdd
-""   call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
-   exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
-   " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
-   if getline(1) !~ "^$"
-    echoerr getline(1)
-    let mod=1
-   endif
-   bd!
-
-  ".........................................
-  " scp: NetWrite Method #4
-  elseif     b:netrw_method == 4	" write with scp
-   if exists("g:netrw_port") && g:netrw_port != ""
-    let useport= " -P ".g:netrw_port
-   else
-    let useport= ""
-   endif
-   if g:netrw_cygwin == 1
-    let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-""    call Decho("executing: !".g:netrw_scp_cmd.useport." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
-    exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
-   else
-""    call Decho("executing: !".g:netrw_scp_cmd.useport." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
-    exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
+    new
+    set ff=unix
+    put ='put '.tmpfile.' '.netrw_fname
+    norm 1Gdd
+"    call Decho("executing: %!".g:netrw_sftp_cmd.' '.uid_machine)
+    exe g:netrw_silentxfer."%!".g:netrw_sftp_cmd.' '.uid_machine
+    bd!
+    let b:netrw_lastfile= choice
+ 
+   ".........................................
+   else " Complain
+    echo "***warning*** unable to comply with your request<" . choice . ">"
    endif
-   let b:netrw_lastfile = choice
-
-  ".........................................
-  " http: NetWrite Method #5
-  elseif     b:netrw_method == 5
-   echoerr "***warning*** currently <netrw.vim> does not support writing using http:"
-
-  ".........................................
-  " dav: NetWrite Method #6
-  elseif     b:netrw_method == 6	" write with cadaver
-""   call Decho("write via cadaver (method #6)")
-
-   " Construct execution string (four lines) which will be passed through filter
-   let netrw_fname= b:netrw_fname
-   new
-   set ff=unix
-   if exists("g:netrw_port") && g:netrw_port != ""
-    put ='open '.g:netrw_machine.' '.g:netrw_port
-   else
-    put ='open '.g:netrw_machine
-   endif
-   put ='user '.g:netrw_uid.' '.g:netrw_passwd
-
-   if g:netrw_cygwin == 1
-    let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-    put ='put '.cygtmpfile.' '.netrw_fname
-   else
-    put ='put '.tmpfile.' '.netrw_fname
-   endif
-
-   " perform cadaver operation:
-   norm 1Gdd
-""   call Decho("executing: %!".g:netrw_dav_cmd)
-   exe g:netrw_silentxfer."%!".g:netrw_dav_cmd
-   bd!
-   let b:netrw_lastfile = choice
-
-  ".........................................
-  " rsync: NetWrite Method #7
-  elseif     b:netrw_method == 7	" write with rsync
-   if g:netrw_cygwin == 1
-    let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-""    call Decho("executing: !".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
-    exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
-   else
-""    call Decho("executing: !".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
-    exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
-   endif
-   let b:netrw_lastfile = choice
-
-  ".........................................
-  " scp: NetWrite Method #9
-  elseif     b:netrw_method == 9	" write with sftp
-   let netrw_fname= b:netrw_fname
-   if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
-    let uid_machine = g:netrw_uid .'@'. g:netrw_machine
-   else
-    let uid_machine = g:netrw_machine
-   endif
-   new
-   set ff=unix
-   put ='put '.tmpfile.' '.netrw_fname
-   norm 1Gdd
-""   call Decho("executing: %!".g:netrw_sftp_cmd.' '.uid_machine)
-   exe g:netrw_silentxfer."%!".g:netrw_sftp_cmd.' '.uid_machine
-   bd!
-   let b:netrw_lastfile= choice
-
-  ".........................................
-  else " Complain
-   echo "***warning*** unable to comply with your request<" . choice . ">"
+  endwhile
+ 
+  " cleanup
+"  call Decho("cleanup")
+  let result=delete(tmpfile)
+  call s:NetOptionRestore()
+ 
+  if a:firstline == 1 && a:lastline == line("$")
+   let &mod= mod	" usually equivalent to set nomod
   endif
- endwhile
-
- " cleanup
-"" call Decho("cleanup")
- let result=delete(tmpfile)
- call s:NetOptionRestore()
-
- if a:firstline == 1 && a:lastline == line("$")
-  let &mod= mod	" usually equivalent to set nomod
- endif
-
-"" call Dret("NetWrite")
+ 
+"  call Dret("NetWrite")
 endfun
 " end of NetWrite
 
@@ -892,133 +899,150 @@ endfun
 "  g:netrw_list_cmd has a string, HOSTNAME, that needs to be substituted
 "  with the requested remote hostname first.
 fun! <SID>NetList(dirname)
-""  call Dfunc("NetList(dirname<".a:dirname.">)")
+"  call Dfunc("NetList(dirname<".a:dirname.">)")
+
+  " make this buffer modifiable
+  setlocal ma
 
-  " sanity maintenance
-  let dirname= a:dirname
-  if dirname !~ '/$' && (!exists("g:netrw_machine") || !exists("b:netlist_method") || !exists("b:netlist_path"))
-   let dirname= dirname."/"
+  " analyze a:dirname and g:netrw_list_cmd
+  let dirpat  = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$'
+  if a:dirname !~ dirpat
+   echoerr "NetList: I don't understand your dirname<".a:dirname.">"
+"   call Dret("NetList 0 : badly formatted dirname")
+   return 0
   endif
-  set ma
+  let method  = substitute(a:dirname,dirpat,'\1','')
+  let user    = substitute(a:dirname,dirpat,'\2','')
+  let machine = substitute(a:dirname,dirpat,'\3','')
+  let path    = substitute(a:dirname,dirpat,'\4','')
+  let fname   = substitute(a:dirname,'^.*/\ze.','','')
+"  call Decho("set up method <".method .">")
+"  call Decho("set up user   <".user   .">")
+"  call Decho("set up machine<".machine.">")
+"  call Decho("set up path   <".path   .">")
+"  call Decho("set up fname  <".fname  .">")
 
-  if dirname !~ '/$' && dirname !~ '^"'
+  let listcmd = substitute(g:netrw_list_cmd,'\<HOSTNAME\>',user.machine,'')
+"  call Decho("set up listcmd<".listcmd.">")
+
+  if fname =~ '@$' && fname !~ '^"'
+"   call Decho("attempt transfer of symlink as file")
+   call s:NetList(substitute(a:dirname,'@$','','e'))
+   redraw!
+"   call Dret("NetList 0 : symlink")
+   return 0
+
+  elseif fname !~ '/$' && fname !~ '^"'
    " looks like a regular file, attempt transfer
-""   call Decho("attempt transfer with regular file<".dirname.">")
-""   call Decho("netlist method<".b:netlist_method."> cmd<".b:netlist_cmd."> path<".b:netlist_path.">")
-   %d
+"   call Decho("attempt transfer as regular file<".a:dirname.">")
 
    " remove any filetype indicator from end of dirname, except for the
-   " "this is a directory" indicator (/)
-   let dirname= substitute(dirname,"[*=@|]$","","e")
-""   call Decho("modified dirname<".dirname.">")
+   " "this is a directory" indicator (/).  There shouldn't be one of those,
+   " anyway.
+   let path= substitute(path,'[*=@|]$','','e')
+"   call Decho("new path<".path.">")
 
    " remote-read the requested file into current buffer
-   let machine= g:netrw_machine
-   let method = b:netlist_method
-   let path   = b:netlist_path
    enew!
-   exe "file ".method."://".machine."/".path.dirname
-   exe "doau BufReadPre ".dirname
-   silent call s:NetRead(method."://".machine."/".path.dirname)
-   exe "doau BufReadPost ".dirname
+   exe "file ".method."://".machine."/".path
+   exe "silent doau BufReadPre ".fname
+   silent call s:NetRead(method."://".machine."/".path)
+   exe "silent doau BufReadPost ".fname
    1d
-   set nomod noma
+   set nomod
+
+"   call Dret("NetList 0 : file<".fname.">")
+   return 0
+  endif
+
+  " ---------------------------------------------------------------------
+  "  Perform Directory Listing:
+"  call Decho("Perform directory listing...")
+  " set up new buffer and map
+  let bufname   = method.'://'.user.machine.'/'.path
+  let bufnamenr = bufnr(bufname)
+"  call Decho("bufname<".bufname."> bufnamenr=".bufnamenr)
+  if bufnamenr != -1
+   " buffer already exists, switch to it!
+   exe "b ".bufnamenr
+   if line("$") >= 5
+"    call Dret("NetList 1")
+    return 1
+   endif
+  else
+   enew!
+  endif
+  setlocal bt=nofile bh=wipe nobl
+  exe 'file '.bufname
+  set bt=nowrite bh=hide nobl
+  nnoremap <buffer> <cr>	:exe "norm! 0"<bar>call <SID>NetList(<SID>NetListChgDir(expand("%")))<cr>
+  setlocal ma
 
-   silent! unlet b:netlist_method
-   silent! unlet b:netlist_cmd
-   silent! unlet b:netlist_path
-""   call Dret("NetList")
-   return
+"  call Decho("executing: r! ".listcmd." '".path."'")
+  keepjumps put ='\" =============================='
+  keepjumps put ='\" Netrw Remote Directory Listing'
+  keepjumps put ='\"   '.bufname
+  keepjumps put ='\" =============================='
+  exe "silent r! ".listcmd." '".path."'"
+  keepjumps 1d
+  set ft=netrwlist
+  if line("$") >= 5
+   keepjumps silent 5,$s/^\(.*\)\([/@]\)$/ \2\1/e
+   keepjumps silent 5,$call s:NetSort()
+   keepjumps silent 5,$s/^ \(.\)\(.*\)$/\2\1/e
+   keepjumps 5
+  endif
+  let prvbuf= bufnr(bufname)
+  if prvbuf != -1
+   exe "silent! b ".prvbuf
+  endif
+
+  setlocal noma nomod
 
-  elseif dirname == './'
+"  call Dret("NetList 1")
+  return 1
+endfun
+
+" ---------------------------------------------------------------------
+" NetListCombine:
+fun! <SID>NetListChgDir(dirname)
+  let newdir= expand("<cWORD>")
+"  call Dfunc("NetListChgDir(dirname<".a:dirname.">) newdir<".newdir.">")
+
+  let dirname= a:dirname
+
+  if newdir !~ '/$'
+   " handling a file
+   let dirname= dirname.newdir
+"   call Decho("handling a file: dirname<".dirname.">")
+
+  elseif newdir == './'
    " refresh the directory list
-""   call Decho("refresh directory listing")
-""   call Decho("netlist method<".b:netlist_method."> cmd<".b:netlist_cmd."> path<".b:netlist_path.">")
+"   call Decho("refresh directory listing")
    %d
 
-  elseif dirname == '../'
+  elseif newdir == '../'
    " go up one directory
-
-   if b:netlist_path !~ '/' && strlen(b:netlist_path) > 0
-    " go to top (rltv) directory
-""    call Decho("go up one directory : 1 path<".b:netlist_path.">")
-    let b:netlist_path= ""
+   let trailer= substitute(a:dirname,'^\(\w\+://\%(\w\+@\)\=\w\+/\)\(.*\)$','\2','')
 
-   elseif b:netlist_path !~ '^[./]\+$' && strlen(b:netlist_path) > 0
-    " remove a directory from the netlist_path
-""    call Decho("go up one directory : 2 path<".b:netlist_path.">")
-    if b:netlist_path =~ '^[^/]*/$'
-     let b:netlist_path= ""
-    else
-     let b:netlist_path= substitute(b:netlist_path,'^\(.*/\)[^/]*/$','\1','')
-    endif
+   if trailer =~ '^\%(\.\./\)*$'
+    " tack on a ../"
+    let dirname= dirname.'../'
 
    else
-    " append ../
-""    call Decho("go up one directory : 3 path<".b:netlist_path.">")
-    let b:netlist_path= b:netlist_path.'../'
+    " strip off a directory name from dirname
+    let dirname= substitute(dirname,'^\(.*/\)[^/]\+/','\1','')
    endif
-""   call Decho("netlist method<".b:netlist_method."> cmd<".b:netlist_cmd."> path<".b:netlist_path.">")
-   %d
-
-  elseif dirname !~ '^\w\+:' && dirname =~ '/$'
-   " go down one directory
-""   call Decho("go down one directory<".dirname.">")
-   let b:netlist_path=b:netlist_path.dirname
-""   call Decho("netlist method<".b:netlist_method."> cmd<".b:netlist_cmd."> path<".b:netlist_path.">")
-   %d
+"   call Decho("go up one dir: dirname<".dirname."> trailer<".trailer.">")
 
   else
-   " normal initial directory listing
-""   call Decho("normal initial directory listing")
-
-   let listcmd = substitute(g:netrw_list_cmd,'\<HOSTNAME\>',g:netrw_machine,'')
-   let method  = substitute(dirname,'^\(\w\+\):.*$','\1','')
-   let fname   = b:netrw_fname
-""   call Decho("set up listcmd<".listcmd.">")
-""   call Decho("set up method <".method.">")
-""   call Decho("set up fname  <".fname.">")
-
-   " set up window
-   if &mod == 1
-    wincmd s
-   endif
-   enew!
-   if v:version >= 602
-    setlocal bh=wipe
-   endif
-   
-   " set up buffer-local variables
-   let b:netlist_method = method
-   let b:netlist_cmd    = listcmd
-   let b:netlist_path   = fname
-
-   " set up buffer-local map
-   nnoremap <buffer> <cr>	:call <SID>NetList(expand("<cWORD>"))<cr>
-
-""   call Decho("netlist method<".b:netlist_method."> cmd<".b:netlist_cmd."> path<".b:netlist_path.">")
+   " go down one directory
+   let dirname= dirname.newdir
+"   call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">")
   endif
 
-""  call Decho("executing: r! ".b:netlist_cmd." '".b:netlist_path."'")
-  put ='\" =============================='
-  put ='\" Netrw Remote Directory Listing'
-  put ='\"   '.g:netrw_machine.':'.b:netlist_path
-  put ='\" =============================='
-  exe "silent r! ".b:netlist_cmd." '".b:netlist_path."'"
-  1d
-  set ft=netrwlist
-  silent 5,$s/^\(.*\)\/$/ \1/e
-  silent 5,$call s:NetSort()
-  silent 5,$s/^ \(.*\)$/\1\//e
-  5
-  exe 'file ['.g:netrw_machine.':'.b:netlist_path.']'
-  if v:version >= 602
-   setlocal nomod bh=wipe bt=nofile nobl noma
-  else
-   setlocal nomod
-  endif
-
-""  call Dret("NetList")
+"  call Dret("NetListChgDir <".dirname.">")
+  return dirname
 endfun
 
 " ------------------------------------------------------------------------
@@ -1033,183 +1057,183 @@ endfun
 "	     8: fetch
 "	     9: sftp
 fun! s:NetMethod(choice)  " globals: method machine id passwd fname
-"" call Dfunc("NetMethod(a:choice<".a:choice.">)")
-
- " initialization
- let b:netrw_method  = 0
- let g:netrw_machine = ""
- let b:netrw_fname   = ""
- let g:netrw_port    = ""
-
- " Patterns:
- " mipf     : a:machine a:id password filename	    Use ftp
- " mf	    : a:machine filename		    Use ftp + <.netrc> or g:netrw_uid g:netrw_passwd
- " ftpurm   : ftp://[user@]host[[#:]port]/filename  Use ftp + <.netrc> or g:netrw_uid g:netrw_passwd
- " rcpurm   : rcp://[user@]host/filename	    Use rcp
- " rcphf    : [user@]host:filename		    Use rcp
- " scpurm   : scp://[user@]host[[#:]port]/filename  Use scp
- " httpurm  : http://[user@]host/filename	    Use wget
- " davurm   : dav://host[:port]/path                Use cadaver
- " rsyncurm : rsync://host[:port]/path              Use rsync
- " fetchurm : fetch://[user@]host[:http]/filename   Use fetch (defaults to ftp, override for http)
- " sftpurm  : sftp://[user@]host/filename  Use scp
- let mipf     = '^\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)$'
- let mf       = '^\(\S\+\)\s\+\(\S\+\)$'
- let ftpurm   = '^ftp://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\([#:]\d\+\)\=/\(.*\)$'
- let rcpurm   = '^rcp://\(\([^/@]\{-}\)@\)\=\([^/]\{-}\)/\(.*\)$'
- let rcphf    = '^\(\(\h\w*\)@\)\=\(\h\w*\):\([^@]\+\)$'
- let scpurm   = '^scp://\([^/]\{-}\)\([#:]\d\+\)\=/\(.*\)$'
- let httpurm  = '^http://\([^/]\{-}\)\(/.*\)\=$'
- let davurm   = '^dav://\([^/]\{-}\)/\(.*\)\=$'
- let rsyncurm = '^rsync://\([^/]\{-}\)/\(.*\)\=$'
- let fetchurm = '^fetch://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\(:http\)\=/\(.*\)$'
- let sftpurm  = '^sftp://\([^/]\{-}\)/\(.*\)\=$'
-
-"" call Decho("determine method:")
- " Determine Method
- " rcp://user@hostname/...path-to-file
- if match(a:choice,rcpurm) == 0
-""  call Decho("rcp://...")
-  let b:netrw_method = 1
-  let userid	     = substitute(a:choice,rcpurm,'\2',"")
-  let g:netrw_machine= substitute(a:choice,rcpurm,'\3',"")
-  let b:netrw_fname  = substitute(a:choice,rcpurm,'\4',"")
-  if userid != ""
-   let g:netrw_uid= userid
-  endif
-
- " scp://user@hostname/...path-to-file
- elseif match(a:choice,scpurm) == 0
-""  call Decho("scp://...")
-  let b:netrw_method = 4
-  let g:netrw_machine= substitute(a:choice,scpurm,'\1',"")
-  let b:netrw_port   = substitute(a:choice,scpurm,'\2',"")
-  let b:netrw_fname  = substitute(a:choice,scpurm,'\3',"")
-
- " http://user@hostname/...path-to-file
- elseif match(a:choice,httpurm) == 0
-""  call Decho("http://...")
-  let b:netrw_method = 5
-  let g:netrw_machine= substitute(a:choice,httpurm,'\1',"")
-  let b:netrw_fname  = substitute(a:choice,httpurm,'\2',"")
-
- " dav://hostname[:port]/..path-to-file..
- elseif match(a:choice,davurm) == 0
-""  call Decho("dav://...")
-  let b:netrw_method= 6
-  let g:netrw_machine= substitute(a:choice,davurm,'\1',"")
-  let b:netrw_fname  = substitute(a:choice,davurm,'\2',"")
-
- " rsync://user@hostname/...path-to-file
- elseif match(a:choice,rsyncurm) == 0
-""  call Decho("rsync://...")
-  let b:netrw_method = 7
-  let g:netrw_machine= substitute(a:choice,rsyncurm,'\1',"")
-  let b:netrw_fname  = substitute(a:choice,rsyncurm,'\2',"")
-
- " ftp://[user@]hostname[[:#]port]/...path-to-file
- elseif match(a:choice,ftpurm) == 0
-""  call Decho("ftp://...")
-  let userid	     = substitute(a:choice,ftpurm,'\2',"")
-  let g:netrw_machine= substitute(a:choice,ftpurm,'\3',"")
-  let g:netrw_port   = substitute(a:choice,ftpurm,'\4',"")
-  let b:netrw_fname  = substitute(a:choice,ftpurm,'\5',"")
-  if g:netrw_port != ""
-    let g:netrw_port = substitute(g:netrw_port,"[#:]","","")
-  endif
-  if userid != ""
-   let g:netrw_uid= userid
+"   call Dfunc("NetMethod(a:choice<".a:choice.">)")
+ 
+  " initialization
+  let b:netrw_method  = 0
+  let g:netrw_machine = ""
+  let b:netrw_fname   = ""
+  let g:netrw_port    = ""
+ 
+  " Patterns:
+  " mipf     : a:machine a:id password filename	    Use ftp
+  " mf	    : a:machine filename		    Use ftp + <.netrc> or g:netrw_uid g:netrw_passwd
+  " ftpurm   : ftp://[user@]host[[#:]port]/filename  Use ftp + <.netrc> or g:netrw_uid g:netrw_passwd
+  " rcpurm   : rcp://[user@]host/filename	    Use rcp
+  " rcphf    : [user@]host:filename		    Use rcp
+  " scpurm   : scp://[user@]host[[#:]port]/filename  Use scp
+  " httpurm  : http://[user@]host/filename	    Use wget
+  " davurm   : dav://host[:port]/path                Use cadaver
+  " rsyncurm : rsync://host[:port]/path              Use rsync
+  " fetchurm : fetch://[user@]host[:http]/filename   Use fetch (defaults to ftp, override for http)
+  " sftpurm  : sftp://[user@]host/filename  Use scp
+  let mipf     = '^\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)$'
+  let mf       = '^\(\S\+\)\s\+\(\S\+\)$'
+  let ftpurm   = '^ftp://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\([#:]\d\+\)\=/\(.*\)$'
+  let rcpurm   = '^rcp://\(\([^/@]\{-}\)@\)\=\([^/]\{-}\)/\(.*\)$'
+  let rcphf    = '^\(\(\h\w*\)@\)\=\(\h\w*\):\([^@]\+\)$'
+  let scpurm   = '^scp://\([^/]\{-}\)\([#:]\d\+\)\=/\(.*\)$'
+  let httpurm  = '^http://\([^/]\{-}\)\(/.*\)\=$'
+  let davurm   = '^dav://\([^/]\{-}\)/\(.*\)\=$'
+  let rsyncurm = '^rsync://\([^/]\{-}\)/\(.*\)\=$'
+  let fetchurm = '^fetch://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\(:http\)\=/\(.*\)$'
+  let sftpurm  = '^sftp://\([^/]\{-}\)/\(.*\)\=$'
+ 
+"  call Decho("determine method:")
+  " Determine Method
+  " rcp://user@hostname/...path-to-file
+  if match(a:choice,rcpurm) == 0
+"   call Decho("rcp://...")
+   let b:netrw_method = 1
+   let userid	     = substitute(a:choice,rcpurm,'\2',"")
+   let g:netrw_machine= substitute(a:choice,rcpurm,'\3',"")
+   let b:netrw_fname  = substitute(a:choice,rcpurm,'\4',"")
+   if userid != ""
+    let g:netrw_uid= userid
+   endif
+ 
+  " scp://user@hostname/...path-to-file
+  elseif match(a:choice,scpurm) == 0
+"   call Decho("scp://...")
+   let b:netrw_method = 4
+   let g:netrw_machine= substitute(a:choice,scpurm,'\1',"")
+   let b:netrw_port   = substitute(a:choice,scpurm,'\2',"")
+   let b:netrw_fname  = substitute(a:choice,scpurm,'\3',"")
+ 
+  " http://user@hostname/...path-to-file
+  elseif match(a:choice,httpurm) == 0
+"   call Decho("http://...")
+   let b:netrw_method = 5
+   let g:netrw_machine= substitute(a:choice,httpurm,'\1',"")
+   let b:netrw_fname  = substitute(a:choice,httpurm,'\2',"")
+ 
+  " dav://hostname[:port]/..path-to-file..
+  elseif match(a:choice,davurm) == 0
+"   call Decho("dav://...")
+   let b:netrw_method= 6
+   let g:netrw_machine= substitute(a:choice,davurm,'\1',"")
+   let b:netrw_fname  = substitute(a:choice,davurm,'\2',"")
+ 
+  " rsync://user@hostname/...path-to-file
+  elseif match(a:choice,rsyncurm) == 0
+"   call Decho("rsync://...")
+   let b:netrw_method = 7
+   let g:netrw_machine= substitute(a:choice,rsyncurm,'\1',"")
+   let b:netrw_fname  = substitute(a:choice,rsyncurm,'\2',"")
+ 
+  " ftp://[user@]hostname[[:#]port]/...path-to-file
+  elseif match(a:choice,ftpurm) == 0
+"   call Decho("ftp://...")
+   let userid	     = substitute(a:choice,ftpurm,'\2',"")
+   let g:netrw_machine= substitute(a:choice,ftpurm,'\3',"")
+   let g:netrw_port   = substitute(a:choice,ftpurm,'\4',"")
+   let b:netrw_fname  = substitute(a:choice,ftpurm,'\5',"")
+   if g:netrw_port != ""
+     let g:netrw_port = substitute(g:netrw_port,"[#:]","","")
+   endif
+   if userid != ""
+    let g:netrw_uid= userid
+   endif
+   if exists("g:netrw_uid") && exists("g:netrw_passwd")
+    let b:netrw_method = 3
+   else
+    if filereadable(expand("$HOME/.netrc")) && !exists("g:netrw_ignorenetrc")
+     let b:netrw_method= 2
+    else
+     if !exists("g:netrw_uid") || g:netrw_uid == ""
+      call NetUserPass()
+     elseif !exists("g:netrw_passwd") || g:netrw_passwd == ""
+      call NetUserPass(g:netrw_uid)
+    " else just use current g:netrw_uid and g:netrw_passwd
+     endif
+     let b:netrw_method= 3
+    endif
+   endif
+ 
+  elseif match(a:choice,fetchurm) == 0
+"   call Decho("fetch://...")
+   let b:netrw_method = 8
+   let g:netrw_userid = substitute(a:choice,fetchurm,'\2',"")
+   let g:netrw_machine= substitute(a:choice,fetchurm,'\3',"")
+   let b:netrw_option = substitute(a:choice,fetchurm,'\4',"")
+   let b:netrw_fname  = substitute(a:choice,fetchurm,'\5',"")
+ 
+  " Issue an ftp : "machine id password [path/]filename"
+  elseif match(a:choice,mipf) == 0
+"   call Decho("(ftp) host id pass file")
+   let b:netrw_method  = 3
+   let g:netrw_machine = substitute(a:choice,mipf,'\1',"")
+   let g:netrw_uid     = substitute(a:choice,mipf,'\2',"")
+   let g:netrw_passwd  = substitute(a:choice,mipf,'\3',"")
+   let b:netrw_fname   = substitute(a:choice,mipf,'\4',"")
+ 
+  " Issue an ftp: "hostname [path/]filename"
+  elseif match(a:choice,mf) == 0
+"   call Decho("(ftp) host file")
+   if exists("g:netrw_uid") && exists("g:netrw_passwd")
+    let b:netrw_method  = 3
+    let g:netrw_machine = substitute(a:choice,mf,'\1',"")
+    let b:netrw_fname   = substitute(a:choice,mf,'\2',"")
+ 
+   elseif filereadable(expand("$HOME/.netrc"))
+    let b:netrw_method  = 2
+    let g:netrw_machine = substitute(a:choice,mf,'\1',"")
+    let b:netrw_fname   = substitute(a:choice,mf,'\2',"")
+   endif
+ 
+  " sftp://user@hostname/...path-to-file
+  elseif match(a:choice,sftpurm) == 0
+"   call Decho("sftp://...")
+   let b:netrw_method = 9
+   let g:netrw_machine= substitute(a:choice,sftpurm,'\1',"")
+   let b:netrw_fname  = substitute(a:choice,sftpurm,'\2',"")
+ 
+  " Issue an rcp: hostname:filename"  (this one should be last)
+  elseif match(a:choice,rcphf) == 0
+"   call Decho("(rcp) [user@]host:file) rcphf<".rcphf.">")
+   let b:netrw_method = 1
+   let userid	     = substitute(a:choice,rcphf,'\2',"")
+   let g:netrw_machine= substitute(a:choice,rcphf,'\3',"")
+   let b:netrw_fname  = substitute(a:choice,rcphf,'\4',"")
+"   call Decho('\1<'.substitute(a:choice,rcphf,'\1',"").">")
+"   call Decho('\2<'.substitute(a:choice,rcphf,'\2',"").">")
+"   call Decho('\3<'.substitute(a:choice,rcphf,'\3',"").">")
+"   call Decho('\4<'.substitute(a:choice,rcphf,'\4',"").">")
+   if userid != ""
+    let g:netrw_uid= userid
+   endif
+   if has("win32")
+    " don't let PCs try <.netrc>
+    let b:netrw_method = 3
+   endif
+ 
+  else
+   echoerr "***error*** cannot determine method"
+   let b:netrw_method  = -1
   endif
-  if exists("g:netrw_uid") && exists("g:netrw_passwd")
-   let b:netrw_method = 3
-  else
-   if filereadable(expand("$HOME/.netrc")) && !exists("g:netrw_ignorenetrc")
-    let b:netrw_method= 2
-   else
-    if !exists("g:netrw_uid") || g:netrw_uid == ""
-     call NetUserPass()
-    elseif !exists("g:netrw_passwd") || g:netrw_passwd == ""
-     call NetUserPass(g:netrw_uid)
-   " else just use current g:netrw_uid and g:netrw_passwd
-    endif
-    let b:netrw_method= 3
-   endif
-  endif
-
- elseif match(a:choice,fetchurm) == 0
-""  call Decho("fetch://...")
-  let b:netrw_method = 8
-  let g:netrw_userid = substitute(a:choice,fetchurm,'\2',"")
-  let g:netrw_machine= substitute(a:choice,fetchurm,'\3',"")
-  let b:netrw_option = substitute(a:choice,fetchurm,'\4',"")
-  let b:netrw_fname  = substitute(a:choice,fetchurm,'\5',"")
-
- " Issue an ftp : "machine id password [path/]filename"
- elseif match(a:choice,mipf) == 0
-""  call Decho("(ftp) host id pass file")
-  let b:netrw_method  = 3
-  let g:netrw_machine = substitute(a:choice,mipf,'\1',"")
-  let g:netrw_uid     = substitute(a:choice,mipf,'\2',"")
-  let g:netrw_passwd  = substitute(a:choice,mipf,'\3',"")
-  let b:netrw_fname   = substitute(a:choice,mipf,'\4',"")
-
- " Issue an ftp: "hostname [path/]filename"
- elseif match(a:choice,mf) == 0
-""  call Decho("(ftp) host file")
-  if exists("g:netrw_uid") && exists("g:netrw_passwd")
-   let b:netrw_method  = 3
-   let g:netrw_machine = substitute(a:choice,mf,'\1',"")
-   let b:netrw_fname   = substitute(a:choice,mf,'\2',"")
-
-  elseif filereadable(expand("$HOME/.netrc"))
-   let b:netrw_method  = 2
-   let g:netrw_machine = substitute(a:choice,mf,'\1',"")
-   let b:netrw_fname   = substitute(a:choice,mf,'\2',"")
-  endif
-
- " sftp://user@hostname/...path-to-file
- elseif match(a:choice,sftpurm) == 0
-""  call Decho("sftp://...")
-  let b:netrw_method = 9
-  let g:netrw_machine= substitute(a:choice,sftpurm,'\1',"")
-  let b:netrw_fname  = substitute(a:choice,sftpurm,'\2',"")
-
- " Issue an rcp: hostname:filename"  (this one should be last)
- elseif match(a:choice,rcphf) == 0
-""  call Decho("(rcp) [user@]host:file) rcphf<".rcphf.">")
-  let b:netrw_method = 1
-  let userid	     = substitute(a:choice,rcphf,'\2',"")
-  let g:netrw_machine= substitute(a:choice,rcphf,'\3',"")
-  let b:netrw_fname  = substitute(a:choice,rcphf,'\4',"")
-""  call Decho('\1<'.substitute(a:choice,rcphf,'\1',"").">")
-""  call Decho('\2<'.substitute(a:choice,rcphf,'\2',"").">")
-""  call Decho('\3<'.substitute(a:choice,rcphf,'\3',"").">")
-""  call Decho('\4<'.substitute(a:choice,rcphf,'\4',"").">")
-  if userid != ""
-   let g:netrw_uid= userid
-  endif
-  if has("win32")
-   " don't let PCs try <.netrc>
-   let b:netrw_method = 3
-  endif
-
- else
-  echoerr "***error*** cannot determine method"
-  let b:netrw_method  = -1
- endif
-
-"" call Decho("a:choice       <".a:choice.">")
-"" call Decho("b:netrw_method <".b:netrw_method.">")
-"" call Decho("g:netrw_machine<".g:netrw_machine.">")
-"" call Decho("g:netrw_port   <".g:netrw_port.">")
-"" if exists("g:netrw_uid")		"Decho
-""  call Decho("g:netrw_uid    <".g:netrw_uid.">")
-"" endif					"Decho
-"" if exists("g:netrw_passwd")		"Decho
-""  call Decho("g:netrw_passwd <".g:netrw_passwd.">")
-"" endif					"Decho
-"" call Decho("b:netrw_fname  <".b:netrw_fname.">")
-"" call Dret("NetMethod")
+ 
+"  call Decho("a:choice       <".a:choice.">")
+"  call Decho("b:netrw_method <".b:netrw_method.">")
+"  call Decho("g:netrw_machine<".g:netrw_machine.">")
+"  call Decho("g:netrw_port   <".g:netrw_port.">")
+"  if exists("g:netrw_uid")		"Decho
+"   call Decho("g:netrw_uid    <".g:netrw_uid.">")
+"  endif					"Decho
+"  if exists("g:netrw_passwd")		"Decho
+"   call Decho("g:netrw_passwd <".g:netrw_passwd.">")
+"  endif					"Decho
+"  call Decho("b:netrw_fname  <".b:netrw_fname.">")
+"  call Dret("NetMethod")
 endfun
 " end of NetMethod
 
@@ -1222,83 +1246,83 @@ fun! NetUserPass(...)
 
  " get/set userid
  if a:0 == 0
-""  call Dfunc("NetUserPass(a:0<".a:0.">)")
+"  call Dfunc("NetUserPass(a:0<".a:0.">)")
   if !exists("g:netrw_uid") || g:netrw_uid == ""
    " via prompt
    let g:netrw_uid= input('Enter username: ')
   endif
  else	" from command line
-""  call Dfunc("NetUserPass(a:1<".a:1.">) {")
+"  call Dfunc("NetUserPass(a:1<".a:1.">) {")
   let g:netrw_uid= a:1
  endif
 
  " get password
  if a:0 <= 1 " via prompt
-""  call Decho("a:0=".a:0." case <=1:")
+"  call Decho("a:0=".a:0." case <=1:")
   let g:netrw_passwd= inputsecret("Enter Password: ")
  else " from command line
-""  call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
+"  call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
   let g:netrw_passwd=a:2
  endif
-""  call Dret("NetUserPass")
+"  call Dret("NetUserPass")
 endfun
 " end NetUserPass
 
 " ------------------------------------------------------------------------
 " NetOptionSave: save options and set to "standard" form {{{1
 fun!s:NetOptionSave()
-"" call Dfunc("NetOptionSave()")
+"  call Dfunc("NetOptionSave()")
 
- " Get Temporary Filename
- let s:aikeep	= &ai
- let s:cinkeep	= &cin
- let s:cinokeep = &cino
- let s:comkeep	= &com
- let s:cpokeep	= &cpo
- let s:dirkeep	= getcwd()
- let s:gdkeep	= &gd
- let s:twkeep	= &tw
- set cino =
- set com  =
- set cpo -=aA
- set nocin noai
- set tw   =0
- if has("win32") && !has("win95")
-  let s:swfkeep= &swf
-  set noswf
-""  call Decho("setting s:swfkeep to <".&swf.">")
- endif
+  " Get Temporary Filename
+  let s:aikeep	= &ai
+  let s:cinkeep	= &cin
+  let s:cinokeep = &cino
+  let s:comkeep	= &com
+  let s:cpokeep	= &cpo
+  let s:dirkeep	= getcwd()
+  let s:gdkeep	= &gd
+  let s:twkeep	= &tw
+  set cino =
+  set com  =
+  set cpo -=aA
+  set nocin noai
+  set tw   =0
+  if has("win32") && !has("win95")
+   let s:swfkeep= &swf
+   set noswf
+"  call Decho("setting s:swfkeep to <".&swf.">")
+  endif
 
-"" call Dret("NetOptionSave")
+"  call Dret("NetOptionSave")
 endfun
 
 " ------------------------------------------------------------------------
 " NetOptionRestore: restore options {{{1
 fun! s:NetOptionRestore()
-"" call Dfunc("NetOptionRestore()")
-
- let &ai	= s:aikeep
- let &cin	= s:cinkeep
- let &cino	= s:cinokeep
- let &com	= s:comkeep
- let &cpo	= s:cpokeep
- exe "lcd ".s:dirkeep
- let &gd	= s:gdkeep
- let &tw	= s:twkeep
- if exists("s:swfkeep")
-  let &swf= s:swfkeep
-  unlet s:swfkeep
- endif
- unlet s:aikeep
- unlet s:cinkeep
- unlet s:cinokeep
- unlet s:comkeep
- unlet s:cpokeep
- unlet s:gdkeep
- unlet s:twkeep
- unlet s:dirkeep
-
-"" call Dret("NetOptionRestore")
+"  call Dfunc("NetOptionRestore()")
+ 
+  let &ai	= s:aikeep
+  let &cin	= s:cinkeep
+  let &cino	= s:cinokeep
+  let &com	= s:comkeep
+  let &cpo	= s:cpokeep
+  exe "lcd ".s:dirkeep
+  let &gd	= s:gdkeep
+  let &tw	= s:twkeep
+  if exists("s:swfkeep")
+   let &swf= s:swfkeep
+   unlet s:swfkeep
+  endif
+  unlet s:aikeep
+  unlet s:cinkeep
+  unlet s:cinokeep
+  unlet s:comkeep
+  unlet s:cpokeep
+  unlet s:gdkeep
+  unlet s:twkeep
+  unlet s:dirkeep
+ 
+"  call Dret("NetOptionRestore")
 endfun
 
 " ------------------------------------------------------------------------
@@ -1310,12 +1334,12 @@ endfun
 "               at the end of the transfer.
 if has("win95") && g:netrw_win95ftp
  fun! NetReadFixup(method, line1, line2)
-""   call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
+"   call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
    if method == 3   " ftp (no <.netrc>)
     let fourblanklines= line2 - 3
     silent fourblanklines.",".line2."g/^\s*/d"
    endif
-""   call Dret("NetReadFixup")
+"   call Dret("NetReadFixup")
  endfun
 endif
 
@@ -1340,8 +1364,8 @@ fun! <SID>NetSort() range
     endwhile
     " do insert
     if lo < i
-      exec i.'d_'
-      call append(lo - 1, i_val)
+      exe 'keepjumps '.i.'d_'
+      keepjumps call append(lo - 1, i_val)
     endif
     let i = i + 1
   endwhile
--- a/runtime/syntax/logtalk.vim
+++ b/runtime/syntax/logtalk.vim
@@ -2,7 +2,7 @@
 "
 " Language:	Logtalk
 " Maintainer:	Paulo Moura <pmoura@logtalk.org>
-" Last Change:	2004 May 16
+" Last Change:	2004 June 1
 
 
 " Quit when a syntax file was already loaded:
@@ -55,9 +55,7 @@ syn region	logtalkOpenEntityDir	matchgro
 
 " Logtalk closing entity directives
 
-syn match	logtalkCloseEntityDir	":- end_object\."
-syn match	logtalkCloseEntityDir	":- end_protocol\."
-syn match	logtalkCloseEntityDir	":- end_category\."
+syn match	logtalkCloseEntityDir	":- end_\(object\|protocol\|category\)\."
 
 
 " Logtalk entity relations
@@ -88,38 +86,24 @@ syn region	logtalkDir		matchgroup=logtal
 
 " Logtalk built-in predicates
 
-syn match	logtalkBuiltIn		"\<current_object\ze("
-syn match	logtalkBuiltIn		"\<current_protocol\ze("
-syn match	logtalkBuiltIn		"\<current_category\ze("
+syn match	logtalkBuiltIn		"\<current_\(object\|protocol\|category\)\ze("
 
-syn match	logtalkBuiltIn		"\<create_object\ze("
-syn match	logtalkBuiltIn		"\<create_protocol\ze("
-syn match	logtalkBuiltIn		"\<create_category\ze("
+syn match	logtalkBuiltIn		"\<create_\(object\|protocol\|category\)\ze("
 
-syn match	logtalkBuiltIn		"\<object_property\ze("
-syn match	logtalkBuiltIn		"\<protocol_property\ze("
-syn match	logtalkBuiltIn		"\<category_property\ze("
+syn match	logtalkBuiltIn		"\<\(object\|protocol\|category\)_property\ze("
 
-syn match	logtalkBuiltIn		"\<abolish_object\ze("
-syn match	logtalkBuiltIn		"\<abolish_protocol\ze("
-syn match	logtalkBuiltIn		"\<abolish_category\ze("
+syn match	logtalkBuiltIn		"\<abolish_\(object\|protocol\|category\)\ze("
 
-syn match	logtalkBuiltIn		"\<extends_object\ze("
-syn match	logtalkBuiltIn		"\<extends_protocol\ze("
-syn match	logtalkBuiltIn		"\<implements_protocol\ze("
-syn match	logtalkBuiltIn		"\<instantiates_class\ze("
-syn match	logtalkBuiltIn		"\<specializes_class\ze("
-syn match	logtalkBuiltIn		"\<imports_category\ze("
+syn match	logtalkBuiltIn		"\<extends_\(object\|protocol\)\ze("
+syn match	logtalkBuiltIn		"\<imp\(orts_category\|lements_protocol\)\ze("
+syn match	logtalkBuiltIn		"\<\(instantiates\|specializes\)_class\ze("
 
-syn match	logtalkBuiltIn		"\<abolish_events\ze("
+syn match	logtalkBuiltIn		"\<\(abolish\|define\)_events\ze("
 syn match	logtalkBuiltIn		"\<current_event\ze("
-syn match	logtalkBuiltIn		"\<define_events\ze("
 
-syn match	logtalkBuiltIn		"\<current_logtalk_flag\ze("
-syn match	logtalkBuiltIn		"\<set_logtalk_flag\ze("
+syn match	logtalkBuiltIn		"\<\(current\|set\)_logtalk_flag\ze("
 
-syn match	logtalkBuiltIn		"\<logtalk_compile\ze("
-syn match	logtalkBuiltIn		"\<logtalk_load\ze("
+syn match	logtalkBuiltIn		"\<logtalk_\(compile\|load\)\ze("
 
 syn match	logtalkBuiltIn		"\<forall\ze("
 syn match	logtalkBuiltIn		"\<retractall\ze("
@@ -128,24 +112,20 @@ syn match	logtalkBuiltIn		"\<retractall\
 " Logtalk built-in methods
 
 syn match	logtalkBuiltInMethod	"\<parameter\ze("
-syn match	logtalkBuiltInMethod	"\<self\ze("
-syn match	logtalkBuiltInMethod	"\<sender\ze("
+syn match	logtalkBuiltInMethod	"\<se\(lf\|nder\)\ze("
 syn match	logtalkBuiltInMethod	"\<this\ze("
 
 syn match	logtalkBuiltInMethod	"\<current_predicate\ze("
 syn match	logtalkBuiltInMethod	"\<predicate_property\ze("
 
 syn match	logtalkBuiltInMethod	"\<abolish\ze("
-syn match	logtalkBuiltInMethod	"\<asserta\ze("
-syn match	logtalkBuiltInMethod	"\<assertz\ze("
+syn match	logtalkBuiltInMethod	"\<assert\(a\|z\)\ze("
 syn match	logtalkBuiltInMethod	"\<clause\ze("
 syn match	logtalkBuiltInMethod	"\<retract\ze("
 syn match	logtalkBuiltInMethod	"\<retractall\ze("
 
-syn match	logtalkBuiltInMethod	"\<bagof\ze("
-syn match	logtalkBuiltInMethod	"\<findall\ze("
-syn match	logtalkBuiltInMethod	"\<forall\ze("
-syn match	logtalkBuiltInMethod	"\<setof\ze("
+syn match	logtalkBuiltInMethod	"\<\(bag\|set\)of\ze("
+syn match	logtalkBuiltInMethod	"\<f\(ind\|or\)all\ze("
 
 syn match	logtalkBuiltInMethod	"\<before\ze("
 syn match	logtalkBuiltInMethod	"\<after\ze("
@@ -163,13 +143,12 @@ syn match	logtalkOperator		"@"
 
 syn match	logtalkKeyword		"\<true\>"
 syn match	logtalkKeyword		"\<fail\>"
-syn match	logtalkKeyword		"\<call\ze("
+syn match	logtalkKeyword		"\<ca\(ll\|tch\)\ze("
 syn match	logtalkOperator		"!"
-syn match	logtalkOperator		","
+" syn match	logtalkOperator		","
 syn match	logtalkOperator		";"
 syn match	logtalkOperator		"-->"
 syn match	logtalkOperator		"->"
-syn match	logtalkKeyword		"\<catch\ze("
 syn match	logtalkKeyword		"\<throw\ze("
 
 
@@ -188,8 +167,7 @@ syn match	logtalkKeyword		"\<integer\ze(
 syn match	logtalkKeyword		"\<float\ze("
 syn match	logtalkKeyword		"\<atomic\ze("
 syn match	logtalkKeyword		"\<compound\ze("
-syn match	logtalkKeyword		"\<nonvar\ze("
-syn match	logtalkKeyword		"\<number\ze("
+syn match	logtalkKeyword		"\<n\(onvar\|umber\)\ze("
 
 
 " Term comparison
@@ -227,10 +205,8 @@ syn match	logtalkOperator		">="
 
 " Stream selection and control
 
-syn match	logtalkKeyword		"\<current_input\ze("
-syn match	logtalkKeyword		"\<current_output\ze("
-syn match	logtalkKeyword		"\<set_input\ze("
-syn match	logtalkKeyword		"\<set_output\ze("
+syn match	logtalkKeyword		"\<current_\(input\|output\)\ze("
+syn match	logtalkKeyword		"\<set_\(input\|output\)\ze("
 syn match	logtalkKeyword		"\<open\ze("
 syn match	logtalkKeyword		"\<close\ze("
 syn match	logtalkKeyword		"\<flush_output\ze("
@@ -241,33 +217,20 @@ syn match	logtalkKeyword		"\<at_end_of_s
 syn match	logtalkKeyword		"\<set_stream_position\ze("
 
 
-" Character input/output
+" Character and byte input/output
 
-syn match	logtalkKeyword		"\<get_char\ze("
-syn match	logtalkKeyword		"\<get_code\ze("
-syn match	logtalkKeyword		"\<peek_char\ze("
-syn match	logtalkKeyword		"\<peek_code\ze("
-syn match	logtalkKeyword		"\<put_char\ze("
-syn match	logtalkKeyword		"\<put_code\ze("
+syn match	logtalkKeyword		"\<\(get\|peek\|put\)_\(char\|code\|byte\)\ze("
 syn match	logtalkKeyword		"\<nl\ze("
 syn match	logtalkKeyword		"\<nl\>"
 
 
-" Byte input/output
-
-syn match	logtalkKeyword		"\<get_byte\ze("
-syn match	logtalkKeyword		"\<peek_byte\ze("
-syn match	logtalkKeyword		"\<put_byte\ze("
-
-
 " Term input/output
 
 syn match	logtalkKeyword		"\<read_term\ze("
 syn match	logtalkKeyword		"\<read\ze("
-syn match	logtalkKeyword		"\<write_term\ze("
 syn match	logtalkKeyword		"\<write\ze("
 syn match	logtalkKeyword		"\<writeq\ze("
-syn match	logtalkKeyword		"\<write_canonical\ze("
+syn match	logtalkKeyword		"\<write_\(canonical\|term\)\ze("
 syn match	logtalkKeyword		"\<op\ze("
 syn match	logtalkKeyword		"\<current_op\ze("
 syn match	logtalkKeyword		"\<char_conversion\ze("
@@ -283,20 +246,15 @@ syn match	logtalkKeyword		"\<repeat\>"
 
 " Atomic term processing
 
-syn match	logtalkKeyword		"\<atom_length\ze("
-syn match	logtalkKeyword		"\<atom_concat\ze("
+syn match	logtalkKeyword		"\<atom_\(length\|concat\|chars\|codes\)\ze("
 syn match	logtalkKeyword		"\<sub_atom\ze("
-syn match	logtalkKeyword		"\<atom_chars\ze("
-syn match	logtalkKeyword		"\<atom_codes\ze("
 syn match	logtalkKeyword		"\<char_code\ze("
-syn match	logtalkKeyword		"\<number_chars\ze("
-syn match	logtalkKeyword		"\<number_codes\ze("
+syn match	logtalkKeyword		"\<number_\(chars\|codes\)\ze("
 
 
 " Implementation defined hooks functions
 
-syn match	logtalkKeyword		"\<set_prolog_flag\ze("
-syn match	logtalkKeyword		"\<current_prolog_flag\ze("
+syn match	logtalkKeyword		"\<\(current\|set\)_prolog_flag\ze("
 syn match	logtalkKeyword		"\<halt\ze("
 syn match	logtalkKeyword		"\<halt\>"
 
@@ -314,8 +272,7 @@ syn match	logtalkKeyword		"\<mod\ze("
 syn match	logtalkKeyword		"\<mod\>"
 syn match	logtalkKeyword		"\<abs\ze("
 syn match	logtalkKeyword		"\<sign\ze("
-syn match	logtalkKeyword		"\<float_integer_part\ze("
-syn match	logtalkKeyword		"\<float_fractional_part\ze("
+syn match	logtalkKeyword		"\<float_\(integer\|fractional\)_part\ze("
 syn match	logtalkKeyword		"\<float\ze("
 syn match	logtalkKeyword		"\<floor\ze("
 syn match	logtalkKeyword		"\<truncate\ze("
@@ -326,12 +283,11 @@ syn match	logtalkKeyword		"\<ceiling\ze(
 " Other arithemtic functors
 
 syn match	logtalkOperator		"\*\*"
-syn match	logtalkKeyword		"\<sin\ze("
+syn match	logtalkKeyword		"\<s\(in\|qrt\)\ze("
 syn match	logtalkKeyword		"\<cos\ze("
 syn match	logtalkKeyword		"\<atan\ze("
 syn match	logtalkKeyword		"\<exp\ze("
 syn match	logtalkKeyword		"\<log\ze("
-syn match	logtalkKeyword		"\<sqrt\ze("
 
 
 " Bitwise functors
--- a/runtime/syntax/texinfo.vim
+++ b/runtime/syntax/texinfo.vim
@@ -2,7 +2,7 @@
 " Language:	Texinfo (macro package for TeX)
 " Maintainer:	Sandor Kopanyi <sandor.kopanyi@mailbox.hu>
 " URL:		<->
-" Last Change:	2003 May 11
+" Last Change:	2004 Jun 23
 "
 " the file follows the Texinfo manual structure; this file is based
 " on manual for Texinfo version 4.0, 28 September 1999
@@ -351,7 +351,7 @@ syn region texinfoPrmAtCmd matchgroup=te
 syn match  texinfoAtCmd "@refill"
 
 
-syn cluster texinfoAll contains=ALLBUT,{texinfoThisAtCmd,texinfoHFSpecialChar}
+syn cluster texinfoAll contains=ALLBUT,texinfoThisAtCmd,texinfoHFSpecialChar
 syn cluster texinfoReducedAll contains=texinfoSpecialChar,texinfoBrcPrmAtCmd
 "==============================================================================
 " highlighting
new file mode 100644
--- /dev/null
+++ b/src/GvimExt/GvimExt.reg
@@ -0,0 +1,20 @@
+REGEDIT4
+
+[HKEY_CLASSES_ROOT\CLSID\{51EEE242-AD87-11d3-9C1E-0090278BBD99}]
+   @="Vim Shell Extension"
+[HKEY_CLASSES_ROOT\CLSID\{51EEE242-AD87-11d3-9C1E-0090278BBD99}\InProcServer32]
+   @="gvimext.dll"
+   "ThreadingModel"="Apartment"
+
+[HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\gvim]
+   @="{51EEE242-AD87-11d3-9C1E-0090278BBD99}"
+
+[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved]
+   "{51EEE242-AD87-11d3-9C1E-0090278BBD99}"="Vim Shell Extension"
+
+[HKEY_LOCAL_MACHINE\Software\Vim\Gvim]
+   "path"="gvim.exe"
+
+[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\Vim 7.0aa]
+   "DisplayName"="Vim 7.0aa: Edit with Vim popup menu entry"
+   "UninstallString"="uninstal.exe"
new file mode 100644
--- /dev/null
+++ b/src/GvimExt/Make_bc5.mak
@@ -0,0 +1,43 @@
+### USEDLL  no for statically linked version of run-time, yes for DLL runtime
+### BOR	    path to root of Borland C install (c:\bc5)
+
+### (requires cc3250.dll be available in %PATH%)
+!if ("$(USEDLL)"=="")
+USEDLL = no
+!endif
+
+### BOR: root of the BC installation
+!if ("$(BOR)"=="")
+BOR = c:\bc5
+!endif
+
+CC	= $(BOR)\bin\Bcc32
+BRC	= $(BOR)\bin\brc32
+LINK	= $(BOR)\BIN\ILink32
+INCLUDE = $(BOR)\include;.
+LIB	= $(BOR)\lib
+
+!if ("$(USEDLL)"=="yes")
+RT_DEF = -D_RTLDLL
+RT_LIB = cw32i.lib
+!else
+RT_DEF =
+RT_LIB = cw32.lib
+!endif
+
+
+all : gvimext.dll
+
+gvimext.obj : gvimext.cpp gvimext.h
+	$(CC) -tWD -I$(INCLUDE) -c -DFEAT_GETTEXT $(RT_DEF) -w- gvimext.cpp
+
+gvimext.res : gvimext.rc
+	$(BRC) -r gvimext.rc
+
+gvimext.dll : gvimext.obj gvimext.res
+	$(LINK) -L$(LIB) -aa gvimext.obj, gvimext.dll, , c0d32.obj $(RT_LIB) import32.lib, gvimext.def, gvimext.res
+
+clean :
+	-@del gvimext.obj
+	-@del gvimext.res
+	-@del gvimext.dll
new file mode 100644
--- /dev/null
+++ b/src/GvimExt/Make_ming.mak
@@ -0,0 +1,63 @@
+# Project: gvimext
+# Generates gvimext.dll with gcc.
+# Can be used for Cygwin and MingW (MingW ignores -mno-cygwin)
+#
+# Originally, the DLL base address was fixed: -Wl,--image-base=0x1C000000
+# Now it is allocated dymanically by the linker by evaluating all DLLs
+# already loaded in memory. The binary image contains as well information
+# for automatic pseudo-rebasing, if needed by the system. ALV 2004-02-29
+
+# If cross-compiling set this to yes, else set it to no
+CROSS = no
+#CROSS = yes
+# For the old MinGW 2.95 (the one you get e.g. with debian woody)
+# set the following variable to yes and check if the executables are
+# really named that way.
+# If you have a newer MinGW or you are using cygwin set it to no and
+# check also the executables
+MINGWOLD = no
+
+ifeq ($(CROSS),yes)
+ifeq ($(MINGWOLD),yes)
+CXX = i586-mingw32msvc-g++
+CXXFLAGS := -O2 -mno-cygwin -fvtable-thunks
+WINDRES = i586-mingw32msvc-windres
+else
+CXX = i386-mingw32msvc-g++
+CXXFLAGS := -O2 -mno-cygwin
+WINDRES = i386-mingw32msvc-windres
+endif
+else
+CXX := g++.exe
+WINDRES := windres.exe
+CXXFLAGS := -O2 -mno-cygwin
+endif
+LIBS :=  -luuid
+RES  := gvimext.res
+DEFFILE = gvimext_ming.def
+OBJ  := gvimext.o
+
+DLL  := gvimext.dll
+
+.PHONY: all all-before all-after clean clean-custom
+
+all: all-before $(DLL) all-after
+
+$(DLL): $(OBJ) $(RES) $(DEFFILE)
+	$(CXX) -shared $(CXXFLAGS) -s -o $@ \
+		-Wl,--enable-auto-image-base \
+		-Wl,--enable-auto-import \
+		-Wl,--whole-archive \
+			$^ \
+		-Wl,--no-whole-archive \
+			$(LIBS)
+
+gvimext.o: gvimext.cpp
+	$(CXX) $(CXXFLAGS) -DFEAT_GETTEXT -c $? -o $@
+
+$(RES): gvimext_ming.rc
+	$(WINDRES) --input-format=rc --output-format=coff -DMING $? -o $@
+
+clean: clean-custom
+	$(RM)  $(OBJ) $(RES) $(DLL)
+
new file mode 100644
--- /dev/null
+++ b/src/GvimExt/Makefile
@@ -0,0 +1,35 @@
+# Makefile for GvimExt, using MSVC
+# Options:
+#   DEBUG=yes		Build debug version (for VC7 and maybe later)
+#
+
+TARGETOS=BOTH
+APPVER=4.0
+
+!if "$(DEBUG)" != "yes"
+NODEBUG = 1
+!endif
+
+!include <win32.mak>
+
+all: gvimext.dll
+
+gvimext.dll:    gvimext.obj	\
+		gvimext.res
+  $(implib) /NOLOGO -machine:$(CPU) -def:gvimext.def $** -out:gvimext.lib
+  $(link) $(dlllflags) -base:0x1C000000 -out:$*.dll $** $(olelibsdll) shell32.lib gvimext.lib comctl32.lib gvimext.exp
+
+gvimext.obj: gvimext.h
+
+.cpp.obj:
+    $(cc) $(cflags) -DFEAT_GETTEXT $(cvarsdll) $*.cpp
+
+gvimext.res: gvimext.rc
+    $(rc) $(rcflags) $(rcvars)  gvimext.rc
+
+clean:
+    - if exist gvimext.dll del gvimext.dll
+    - if exist gvimext.lib del gvimext.lib
+    - if exist gvimext.exp del gvimext.exp
+    - if exist gvimext.obj del gvimext.obj
+    - if exist gvimext.res del gvimext.res
new file mode 100644
--- /dev/null
+++ b/src/GvimExt/README.txt
@@ -0,0 +1,94 @@
+README.txt for the gvimext DLL.
+
+Written by Tianmiao Hu.  Edited by Bram Moolenaar.
+
+
+INSTALLATION
+
+To install the "Edit with Vim" popup menu entry, it is recommended to use the
+"install.exe" program.  It will ask you a few questions and install the needed
+registry entries.
+
+In special situations you might want to make changes by hand.  Check these
+items:
+- The gvimext.dll, gvim.exe and uninstal.exe either need to be in the search
+  path, or you have to set the full path in the registry entries.  You could
+  move the gvimext.dll to the "windows\system" or "windows\system32"
+  directory, where the other DLL files are.
+- You can find the names of the used registry entries in the file
+  "GvimExt.reg".  You can edit this file to add the paths.  To install the
+  registry entries, right-click the gvimext.reg file and choose the "merge"
+  menu option.
+- The registry key [HKEY_LOCAL_MACHINE\Software\Vim\Gvim] is used by the
+  gvimext.dll.  The value "path" specifies the location of "gvim.exe".  If
+  gvim.exe is in the search path, the path can be omitted.  The value "lang"
+  can be used to set the language, for example "de" for German.  If "lang" is
+  omitted, the language set for Windows will be used.
+
+It is the preferred method to keep gvim.exe with the runtime files, so that
+Vim will find them (also the translated menu items are there).
+
+
+UNINSTALLATION
+
+To uninstall the "Edit with Vim" popup menu entry, it is recommended to use
+the "uninstal.exe" program.
+
+In special situations you might want to uninstall by hand:
+- Open the registry by running regedit.exe.
+- Delete all the keys listed in GvimExt.reg, except this one:
+  [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved]
+  For this key, only delete one value:
+  "{51EEE242-AD87-11d3-9C1E-0090278BBD99}"="Vim Shell Extension"
+- Delete the gvimext.dll, if you want.  You might need to reboot the machine
+  in order to remove this file.  A quick way is to log off and re-login.
+
+Another method is by using the uninst.bat script:
+    uninst gvimext.inf
+This batch file will remove all the registry keys from the system.  Then you
+can remove the gvimext.dll file.
+Note: In order for this batch file to work, you must have two system files:
+rundll32.exe and setupapi.dll.  I believe you will have rundll32.exe in your
+system.  I know windows nt 4.0 with the service pack 4 has setupapi.dll.  My
+windows 95 has setupapi.dll.  I find that the internet explorer 4.0 comes with
+the setupapi.dll in file Ie4_5.cab.
+
+If you do encounter problems running this script, then probably you need to
+modify the uninst.bat to suit to your system.  Basically, you must find out
+where are the locations for your rundll32.exe and setupapi.dll files.  In
+windows nt, both files are under c:\winnt\system32 directory. In my windows 95
+system, I got setupapi.dll at c:\windows\system and rundll32.exe at
+c:\windows.  So you might want to try something like:
+    rundll32.exe c:\windows\system\setupapi.dll,InstallHinfSection DefaultUninstall 128 %1
+where %1 can be substitued by gvimext.inf
+
+
+THE SOURCE CODE
+
+I have provided the source code here in hope that gvim users around world can
+further enhance this little dll.  I believe the only thing you need to change
+is gvimext.cpp file.  The important two functions you need to look at are
+QueryContextMenu and InvokeCommand.  You can modify right-click menus in the
+QueryContextMenu function and invoke gvim in the InvokeCommand function.  Note
+the selected files can be accessed from the DragQueryFile function.  I am not
+familiar with the invoking options for gvim.  I believe there are some
+improvements that can be made on that side.
+
+I use MS Visual C++ 6.0's nmake to make the gvimext.dll.  I don't have a
+chance to try earlier versions of MSVC.  The files that are required for build
+are:
+	gvimext.cpp
+	gvimext.h
+	gvimext.def
+	gvimext.rc
+	resource.h
+	Makefile
+
+To compile the DLL from the command line:
+	vcvars32
+	nmake -f Makefile
+
+If you did something interesting to this dll, please let me know
+@ tianmiao@acm.org.
+
+Happy vimming!!!
new file mode 100644
--- /dev/null
+++ b/src/GvimExt/gvimext.cpp
@@ -0,0 +1,979 @@
+/* vi:set ts=8 sts=4 sw=4:
+ *
+ * VIM - Vi IMproved	gvimext by Tianmiao Hu
+ *
+ * Do ":help uganda"  in Vim to read copying and usage conditions.
+ * Do ":help credits" in Vim to see a list of people who contributed.
+ */
+
+/*
+ * gvimext is a DLL which is used for the "Edit with Vim" context menu
+ * extension.  It implements a MS defined interface with the Shell.
+ *
+ * If you have any questions or any suggestions concerning gvimext, please
+ * contact Tianmiao Hu: tianmiao@acm.org.
+ */
+
+#include "gvimext.h"
+
+#ifdef __BORLANDC__
+# include <dir.h>
+# ifndef _strnicmp
+#  define _strnicmp(a, b, c) strnicmp((a), (b), (c))
+# endif
+#else
+static char *searchpath(char *name);
+#endif
+
+// Always get an error while putting the following stuff to the
+// gvimext.h file as class protected variables, give up and
+// declare them as global stuff
+FORMATETC fmte = {CF_HDROP,
+		  (DVTARGETDEVICE FAR *)NULL,
+		  DVASPECT_CONTENT,
+		  -1,
+		  TYMED_HGLOBAL
+		 };
+STGMEDIUM medium;
+HRESULT hres = 0;
+UINT cbFiles = 0;
+
+//
+// Get the name of the Gvim executable to use, with the path.
+// When "runtime" is non-zero, we were called to find the runtime directory.
+// Returns the path in name[MAX_PATH].  It's empty when it fails.
+//
+    static void
+getGvimName(char *name, int runtime)
+{
+    HKEY	keyhandle;
+    DWORD	hlen;
+
+    // Get the location of gvim from the registry.
+    name[0] = 0;
+    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Vim\\Gvim", 0,
+				       KEY_READ, &keyhandle) == ERROR_SUCCESS)
+    {
+	hlen = MAX_PATH;
+	if (RegQueryValueEx(keyhandle, "path", 0, NULL, (BYTE *)name, &hlen)
+							     != ERROR_SUCCESS)
+	    name[0] = 0;
+	else
+	    name[hlen] = 0;
+	RegCloseKey(keyhandle);
+    }
+
+    // Registry didn't work, use the search path.
+    if (name[0] == 0)
+	strcpy(name, searchpath("gvim.exe"));
+
+    if (!runtime)
+    {
+	// Only when looking for the executable, not the runtime dir, we can
+	// search for the batch file or a name without a path.
+	if (name[0] == 0)
+	    strcpy(name, searchpath("gvim.bat"));
+	if (name[0] == 0)
+	    strcpy(name, "gvim");	// finds gvim.bat or gvim.exe
+
+	// avoid that Vim tries to expand wildcards in the file names
+	strcat(name, " --literal");
+    }
+}
+
+//
+// Get the Vim runtime directory into buf[MAX_PATH].
+// The result is empty when it failed.
+// When it works, the path ends in a slash or backslash.
+//
+    static void
+getRuntimeDir(char *buf)
+{
+    int		idx;
+
+    getGvimName(buf, 1);
+    if (buf[0] != 0)
+    {
+	// When no path found, use the search path to expand it.
+	if (strchr(buf, '/') == NULL && strchr(buf, '\\') == NULL)
+	    strcpy(buf, searchpath(buf));
+
+	// remove "gvim.exe" from the end
+	for (idx = strlen(buf) - 1; idx >= 0; idx--)
+	    if (buf[idx] == '\\' || buf[idx] == '/')
+	    {
+		buf[idx + 1] = 0;
+		break;
+	    }
+    }
+}
+
+//
+// GETTEXT: translated messages and menu entries
+//
+#ifndef FEAT_GETTEXT
+# define _(x)  x
+#else
+# define _(x)  (*dyn_libintl_gettext)(x)
+# define VIMPACKAGE "vim"
+# ifndef GETTEXT_DLL
+#  define GETTEXT_DLL "libintl.dll"
+# endif
+
+// Dummy functions
+static char *null_libintl_gettext(const char *);
+static char *null_libintl_textdomain(const char *);
+static char *null_libintl_bindtextdomain(const char *, const char *);
+static int dyn_libintl_init(char *dir);
+static void dyn_libintl_end(void);
+
+static HINSTANCE hLibintlDLL = 0;
+static char *(*dyn_libintl_gettext)(const char *) = null_libintl_gettext;
+static char *(*dyn_libintl_textdomain)(const char *) = null_libintl_textdomain;
+static char *(*dyn_libintl_bindtextdomain)(const char *, const char *)
+						= null_libintl_bindtextdomain;
+
+//
+// Attempt to load libintl.dll.  If it doesn't work, use dummy functions.
+// "dir" is the directory where the libintl.dll might be.
+// Return 1 for success, 0 for failure.
+//
+    static int
+dyn_libintl_init(char *dir)
+{
+    int		i;
+    static struct
+    {
+	char	    *name;
+	FARPROC	    *ptr;
+    } libintl_entry[] =
+    {
+	{"gettext",		(FARPROC*)&dyn_libintl_gettext},
+	{"textdomain",		(FARPROC*)&dyn_libintl_textdomain},
+	{"bindtextdomain",	(FARPROC*)&dyn_libintl_bindtextdomain},
+	{NULL, NULL}
+    };
+
+    // No need to initialize twice.
+    if (hLibintlDLL)
+	return 1;
+
+    // Load gettext library, first try the Vim runtime directory, then search
+    // the path.
+    strcat(dir, GETTEXT_DLL);
+    hLibintlDLL = LoadLibrary(dir);
+    if (!hLibintlDLL)
+    {
+	hLibintlDLL = LoadLibrary(GETTEXT_DLL);
+	if (!hLibintlDLL)
+	    return 0;
+    }
+
+    // Get the addresses of the functions we need.
+    for (i = 0; libintl_entry[i].name != NULL
+					 && libintl_entry[i].ptr != NULL; ++i)
+    {
+	if ((*libintl_entry[i].ptr = GetProcAddress(hLibintlDLL,
+					      libintl_entry[i].name)) == NULL)
+	{
+	    dyn_libintl_end();
+	    return 0;
+	}
+    }
+    return 1;
+}
+
+    static void
+dyn_libintl_end(void)
+{
+    if (hLibintlDLL)
+	FreeLibrary(hLibintlDLL);
+    hLibintlDLL			= NULL;
+    dyn_libintl_gettext		= null_libintl_gettext;
+    dyn_libintl_textdomain	= null_libintl_textdomain;
+    dyn_libintl_bindtextdomain	= null_libintl_bindtextdomain;
+}
+
+    static char *
+null_libintl_gettext(const char *msgid)
+{
+    return (char *)msgid;
+}
+
+    static char *
+null_libintl_bindtextdomain(const char *domainname, const char *dirname)
+{
+    return NULL;
+}
+
+    static char *
+null_libintl_textdomain(const char* domainname)
+{
+    return NULL;
+}
+
+//
+// Setup for translating strings.
+//
+    static void
+dyn_gettext_load(void)
+{
+    char    szBuff[MAX_PATH];
+    char    szLang[MAX_PATH];
+    DWORD   len;
+    HKEY    keyhandle;
+    int	    gotlang = 0;
+
+    strcpy(szLang, "LANG=");
+
+    // First try getting the language from the registry, this can be
+    // used to overrule the system language.
+    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Vim\\Gvim", 0,
+				       KEY_READ, &keyhandle) == ERROR_SUCCESS)
+    {
+	len = MAX_PATH;
+	if (RegQueryValueEx(keyhandle, "lang", 0, NULL, (BYTE*)szBuff, &len)
+							     == ERROR_SUCCESS)
+	{
+	    szBuff[len] = 0;
+	    strcat(szLang, szBuff);
+	    gotlang = 1;
+	}
+	RegCloseKey(keyhandle);
+    }
+
+    if (!gotlang && getenv("LANG") == NULL)
+    {
+	// Get the language from the system.
+	// Could use LOCALE_SISO639LANGNAME, but it's not in Win95.
+	// LOCALE_SABBREVLANGNAME gives us three letters, like "enu", we use
+	// only the first two.
+	len = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SABBREVLANGNAME,
+						    (LPTSTR)szBuff, MAX_PATH);
+	if (len >= 2 && _strnicmp(szBuff, "en", 2) != 0)
+	{
+	    // There are a few exceptions (probably more)
+	    if (_strnicmp(szBuff, "cht", 3) == 0
+					  || _strnicmp(szBuff, "zht", 3) == 0)
+		strcpy(szBuff, "zh_TW");
+	    else if (_strnicmp(szBuff, "chs", 3) == 0
+					  || _strnicmp(szBuff, "zhc", 3) == 0)
+		strcpy(szBuff, "zh_CN");
+	    else if (_strnicmp(szBuff, "jp", 2) == 0)
+		strcpy(szBuff, "ja");
+	    else
+		szBuff[2] = 0;	// truncate to two-letter code
+	    strcat(szLang, szBuff);
+	    gotlang = 1;
+	}
+    }
+    if (gotlang)
+	putenv(szLang);
+
+    // Try to locate the runtime files.  The path is used to find libintl.dll
+    // and the vim.mo files.
+    getRuntimeDir(szBuff);
+    if (szBuff[0] != 0)
+    {
+	len = strlen(szBuff);
+	if (dyn_libintl_init(szBuff))
+	{
+	    strcpy(szBuff + len, "lang");
+
+	    (*dyn_libintl_bindtextdomain)(VIMPACKAGE, szBuff);
+	    (*dyn_libintl_textdomain)(VIMPACKAGE);
+	}
+    }
+}
+
+    static void
+dyn_gettext_free(void)
+{
+    dyn_libintl_end();
+}
+#endif // FEAT_GETTEXT
+
+//
+// Global variables
+//
+UINT      g_cRefThisDll = 0;    // Reference count of this DLL.
+HINSTANCE g_hmodThisDll = NULL;	// Handle to this DLL itself.
+
+
+//---------------------------------------------------------------------------
+// DllMain
+//---------------------------------------------------------------------------
+extern "C" int APIENTRY
+DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
+{
+    switch (dwReason)
+    {
+    case DLL_PROCESS_ATTACH:
+	// Extension DLL one-time initialization
+	g_hmodThisDll = hInstance;
+	break;
+
+    case DLL_PROCESS_DETACH:
+	break;
+    }
+
+    return 1;   // ok
+}
+
+    static void
+inc_cRefThisDLL()
+{
+#ifdef FEAT_GETTEXT
+    if (g_cRefThisDll == 0)
+	dyn_gettext_load();
+#endif
+    InterlockedIncrement((LPLONG)&g_cRefThisDll);
+}
+
+    static void
+dec_cRefThisDLL()
+{
+#ifdef FEAT_GETTEXT
+    if (InterlockedDecrement((LPLONG)&g_cRefThisDll) == 0)
+	dyn_gettext_free();
+#else
+    InterlockedDecrement((LPLONG)&g_cRefThisDll);
+#endif
+}
+
+//---------------------------------------------------------------------------
+// DllCanUnloadNow
+//---------------------------------------------------------------------------
+
+STDAPI DllCanUnloadNow(void)
+{
+    return (g_cRefThisDll == 0 ? S_OK : S_FALSE);
+}
+
+STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppvOut)
+{
+    *ppvOut = NULL;
+
+    if (IsEqualIID(rclsid, CLSID_ShellExtension))
+    {
+	CShellExtClassFactory *pcf = new CShellExtClassFactory;
+
+	return pcf->QueryInterface(riid, ppvOut);
+    }
+
+    return CLASS_E_CLASSNOTAVAILABLE;
+}
+
+CShellExtClassFactory::CShellExtClassFactory()
+{
+    m_cRef = 0L;
+
+    inc_cRefThisDLL();
+}
+
+CShellExtClassFactory::~CShellExtClassFactory()
+{
+    dec_cRefThisDLL();
+}
+
+STDMETHODIMP CShellExtClassFactory::QueryInterface(REFIID riid,
+						   LPVOID FAR *ppv)
+{
+    *ppv = NULL;
+
+    // Any interface on this object is the object pointer
+
+    if (IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IClassFactory))
+    {
+	*ppv = (LPCLASSFACTORY)this;
+
+	AddRef();
+
+	return NOERROR;
+    }
+
+    return E_NOINTERFACE;
+}
+
+STDMETHODIMP_(ULONG) CShellExtClassFactory::AddRef()
+{
+    return InterlockedIncrement((LPLONG)&m_cRef);
+}
+
+STDMETHODIMP_(ULONG) CShellExtClassFactory::Release()
+{
+    if (InterlockedDecrement((LPLONG)&m_cRef))
+	return m_cRef;
+
+    delete this;
+
+    return 0L;
+}
+
+STDMETHODIMP CShellExtClassFactory::CreateInstance(LPUNKNOWN pUnkOuter,
+						      REFIID riid,
+						      LPVOID *ppvObj)
+{
+    *ppvObj = NULL;
+
+    // Shell extensions typically don't support aggregation (inheritance)
+
+    if (pUnkOuter)
+	return CLASS_E_NOAGGREGATION;
+
+    // Create the main shell extension object.  The shell will then call
+    // QueryInterface with IID_IShellExtInit--this is how shell extensions are
+    // initialized.
+
+    LPCSHELLEXT pShellExt = new CShellExt();  //Create the CShellExt object
+
+    if (NULL == pShellExt)
+	return E_OUTOFMEMORY;
+
+    return pShellExt->QueryInterface(riid, ppvObj);
+}
+
+
+STDMETHODIMP CShellExtClassFactory::LockServer(BOOL fLock)
+{
+    return NOERROR;
+}
+
+// *********************** CShellExt *************************
+CShellExt::CShellExt()
+{
+    m_cRef = 0L;
+    m_pDataObj = NULL;
+
+    inc_cRefThisDLL();
+}
+
+CShellExt::~CShellExt()
+{
+    if (m_pDataObj)
+	m_pDataObj->Release();
+
+    dec_cRefThisDLL();
+}
+
+STDMETHODIMP CShellExt::QueryInterface(REFIID riid, LPVOID FAR *ppv)
+{
+    *ppv = NULL;
+
+    if (IsEqualIID(riid, IID_IShellExtInit) || IsEqualIID(riid, IID_IUnknown))
+    {
+	*ppv = (LPSHELLEXTINIT)this;
+    }
+    else if (IsEqualIID(riid, IID_IContextMenu))
+    {
+	*ppv = (LPCONTEXTMENU)this;
+    }
+
+    if (*ppv)
+    {
+	AddRef();
+
+	return NOERROR;
+    }
+
+    return E_NOINTERFACE;
+}
+
+STDMETHODIMP_(ULONG) CShellExt::AddRef()
+{
+    return InterlockedIncrement((LPLONG)&m_cRef);
+}
+
+STDMETHODIMP_(ULONG) CShellExt::Release()
+{
+
+    if (InterlockedDecrement((LPLONG)&m_cRef))
+	return m_cRef;
+
+    delete this;
+
+    return 0L;
+}
+
+
+//
+//  FUNCTION: CShellExt::Initialize(LPCITEMIDLIST, LPDATAOBJECT, HKEY)
+//
+//  PURPOSE: Called by the shell when initializing a context menu or property
+//	     sheet extension.
+//
+//  PARAMETERS:
+//    pIDFolder - Specifies the parent folder
+//    pDataObj  - Spefifies the set of items selected in that folder.
+//    hRegKey   - Specifies the type of the focused item in the selection.
+//
+//  RETURN VALUE:
+//
+//    NOERROR in all cases.
+//
+//  COMMENTS:   Note that at the time this function is called, we don't know
+//		(or care) what type of shell extension is being initialized.
+//		It could be a context menu or a property sheet.
+//
+
+STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST pIDFolder,
+				   LPDATAOBJECT pDataObj,
+				   HKEY hRegKey)
+{
+    // Initialize can be called more than once
+    if (m_pDataObj)
+	m_pDataObj->Release();
+
+    // duplicate the object pointer and registry handle
+
+    if (pDataObj)
+    {
+	m_pDataObj = pDataObj;
+	pDataObj->AddRef();
+    }
+
+    return NOERROR;
+}
+
+
+//
+//  FUNCTION: CShellExt::QueryContextMenu(HMENU, UINT, UINT, UINT, UINT)
+//
+//  PURPOSE: Called by the shell just before the context menu is displayed.
+//	     This is where you add your specific menu items.
+//
+//  PARAMETERS:
+//    hMenu      - Handle to the context menu
+//    indexMenu  - Index of where to begin inserting menu items
+//    idCmdFirst - Lowest value for new menu ID's
+//    idCmtLast  - Highest value for new menu ID's
+//    uFlags     - Specifies the context of the menu event
+//
+//  RETURN VALUE:
+//
+//
+//  COMMENTS:
+//
+
+STDMETHODIMP CShellExt::QueryContextMenu(HMENU hMenu,
+					 UINT indexMenu,
+					 UINT idCmdFirst,
+					 UINT idCmdLast,
+					 UINT uFlags)
+{
+    UINT idCmd = idCmdFirst;
+
+    hres = m_pDataObj->GetData(&fmte, &medium);
+    if (medium.hGlobal)
+	cbFiles = DragQueryFile((HDROP)medium.hGlobal, (UINT)-1, 0, 0);
+
+    // InsertMenu(hMenu, indexMenu++, MF_SEPARATOR|MF_BYPOSITION, 0, NULL);
+
+    // Initialize m_cntOfHWnd to 0
+    m_cntOfHWnd = 0;
+    // Retieve all the vim instances
+    EnumWindows(EnumWindowsProc, (LPARAM)this);
+
+    if (cbFiles > 1)
+    {
+	InsertMenu(hMenu,
+		indexMenu++,
+		MF_STRING|MF_BYPOSITION,
+		idCmd++,
+		_("Edit with &multiple Vims"));
+
+	InsertMenu(hMenu,
+		indexMenu++,
+		MF_STRING|MF_BYPOSITION,
+		idCmd++,
+		_("Edit with single &Vim"));
+
+	if (cbFiles <= 4)
+	{
+	    // Can edit up to 4 files in diff mode
+	    InsertMenu(hMenu,
+		    indexMenu++,
+		    MF_STRING|MF_BYPOSITION,
+		    idCmd++,
+		    _("&Diff with Vim"));
+	    m_edit_existing_off = 3;
+	}
+	else
+	    m_edit_existing_off = 2;
+
+    }
+    else
+    {
+	InsertMenu(hMenu,
+		indexMenu++,
+		MF_STRING|MF_BYPOSITION,
+		idCmd++,
+		_("Edit with &Vim"));
+	m_edit_existing_off = 1;
+    }
+
+    // Now display all the vim instances
+    for (int i = 0; i < m_cntOfHWnd; i++)
+    {
+	char title[MAX_PATH];
+	char temp[MAX_PATH];
+
+	// Obtain window title, continue if can not
+	if (GetWindowText(m_hWnd[i], title, MAX_PATH - 1) == 0)
+	    continue;
+	// Truncate the title before the path, keep the file name
+	char *pos = strchr(title, '(');
+	if (pos != NULL)
+	{
+	    if (pos > title && pos[-1] == ' ')
+		--pos;
+	    *pos = 0;
+	}
+	// Now concatenate
+	strncpy(temp, _("Edit with existing Vim - &"), MAX_PATH - 1);
+	strncat(temp, title, MAX_PATH - 1);
+	InsertMenu(hMenu,
+		indexMenu++,
+		MF_STRING|MF_BYPOSITION,
+		idCmd++,
+		temp);
+    }
+    // InsertMenu(hMenu, indexMenu++, MF_SEPARATOR|MF_BYPOSITION, 0, NULL);
+
+    // Must return number of menu items we added.
+    return ResultFromShort(idCmd-idCmdFirst);
+}
+
+//
+//  FUNCTION: CShellExt::InvokeCommand(LPCMINVOKECOMMANDINFO)
+//
+//  PURPOSE: Called by the shell after the user has selected on of the
+//	     menu items that was added in QueryContextMenu().
+//
+//  PARAMETERS:
+//    lpcmi - Pointer to an CMINVOKECOMMANDINFO structure
+//
+//  RETURN VALUE:
+//
+//
+//  COMMENTS:
+//
+
+STDMETHODIMP CShellExt::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi)
+{
+    HRESULT hr = E_INVALIDARG;
+
+    // If HIWORD(lpcmi->lpVerb) then we have been called programmatically
+    // and lpVerb is a command that should be invoked.  Otherwise, the shell
+    // has called us, and LOWORD(lpcmi->lpVerb) is the menu ID the user has
+    // selected.  Actually, it's (menu ID - idCmdFirst) from QueryContextMenu().
+    if (!HIWORD(lpcmi->lpVerb))
+    {
+	UINT idCmd = LOWORD(lpcmi->lpVerb);
+
+	if (idCmd >= m_edit_existing_off)
+	{
+	    // Existing with vim instance
+	    hr = PushToWindow(lpcmi->hwnd,
+		    lpcmi->lpDirectory,
+		    lpcmi->lpVerb,
+		    lpcmi->lpParameters,
+		    lpcmi->nShow,
+		    idCmd - m_edit_existing_off);
+	}
+	else
+	{
+	    switch (idCmd)
+	    {
+		case 0:
+		    hr = InvokeGvim(lpcmi->hwnd,
+			    lpcmi->lpDirectory,
+			    lpcmi->lpVerb,
+			    lpcmi->lpParameters,
+			    lpcmi->nShow);
+		    break;
+		case 1:
+		    hr = InvokeSingleGvim(lpcmi->hwnd,
+			    lpcmi->lpDirectory,
+			    lpcmi->lpVerb,
+			    lpcmi->lpParameters,
+			    lpcmi->nShow,
+			    0);
+		    break;
+		case 2:
+		    hr = InvokeSingleGvim(lpcmi->hwnd,
+			    lpcmi->lpDirectory,
+			    lpcmi->lpVerb,
+			    lpcmi->lpParameters,
+			    lpcmi->nShow,
+			    1);
+		    break;
+	    }
+	}
+    }
+    return hr;
+}
+
+STDMETHODIMP CShellExt::PushToWindow(HWND hParent,
+				   LPCSTR pszWorkingDir,
+				   LPCSTR pszCmd,
+				   LPCSTR pszParam,
+				   int iShowCmd,
+				   int idHWnd)
+{
+    HWND hWnd = m_hWnd[idHWnd];
+
+    // Show and bring vim instance to foreground
+    if (IsIconic(hWnd) != 0)
+	ShowWindow(hWnd, SW_RESTORE);
+    else
+	ShowWindow(hWnd, SW_SHOW);
+    SetForegroundWindow(hWnd);
+
+    // Post the selected files to the vim instance
+    PostMessage(hWnd, WM_DROPFILES, (WPARAM)medium.hGlobal, 0);
+
+    return NOERROR;
+}
+
+STDMETHODIMP CShellExt::GetCommandString(UINT idCmd,
+					 UINT uFlags,
+					 UINT FAR *reserved,
+					 LPSTR pszName,
+					 UINT cchMax)
+{
+    if (uFlags == GCS_HELPTEXT && cchMax > 35)
+	lstrcpy(pszName, _("Edits the selected file(s) with Vim"));
+
+    return NOERROR;
+}
+
+BOOL CALLBACK CShellExt::EnumWindowsProc(HWND hWnd, LPARAM lParam)
+{
+    char temp[MAX_PATH];
+
+    // First do a bunch of check
+    // No invisible window
+    if (!IsWindowVisible(hWnd)) return TRUE;
+    // No child window ???
+    // if (GetParent(hWnd)) return TRUE;
+    // Class name should be Vim, if failed to get class name, return
+    if (GetClassName(hWnd, temp, sizeof(temp)) == 0)
+	return TRUE;
+    // Compare class name to that of vim, if not, return
+    if (_strnicmp(temp, "vim", sizeof("vim")) != 0)
+	return TRUE;
+    // First check if the number of vim instance exceeds MAX_HWND
+    CShellExt *cs = (CShellExt*) lParam;
+    if (cs->m_cntOfHWnd >= MAX_HWND) return TRUE;
+    // Now we get the vim window, put it into some kind of array
+    cs->m_hWnd[cs->m_cntOfHWnd] = hWnd;
+    cs->m_cntOfHWnd ++;
+
+    return TRUE; // continue enumeration (otherwise this would be false)
+}
+
+#ifdef WIN32
+// This symbol is not defined in older versions of the SDK or Visual C++.
+
+#ifndef VER_PLATFORM_WIN32_WINDOWS
+# define VER_PLATFORM_WIN32_WINDOWS 1
+#endif
+
+static DWORD g_PlatformId;
+
+//
+// Set g_PlatformId to VER_PLATFORM_WIN32_NT (NT) or
+// VER_PLATFORM_WIN32_WINDOWS (Win95).
+//
+    static void
+PlatformId(void)
+{
+    static int done = FALSE;
+
+    if (!done)
+    {
+	OSVERSIONINFO ovi;
+
+	ovi.dwOSVersionInfoSize = sizeof(ovi);
+	GetVersionEx(&ovi);
+
+	g_PlatformId = ovi.dwPlatformId;
+	done = TRUE;
+    }
+}
+
+# ifndef __BORLANDC__
+    static char *
+searchpath(char *name)
+{
+    static char widename[2 * MAX_PATH];
+    static char location[2 * MAX_PATH + 2];
+
+    // There appears to be a bug in FindExecutableA() on Windows NT.
+    // Use FindExecutableW() instead...
+    PlatformId();
+    if (g_PlatformId == VER_PLATFORM_WIN32_NT)
+    {
+	MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)name, -1,
+		(LPWSTR)widename, MAX_PATH);
+	if (FindExecutableW((LPCWSTR)widename, (LPCWSTR)"",
+		    (LPWSTR)location) > (HINSTANCE)32)
+	{
+	    WideCharToMultiByte(CP_ACP, 0, (LPWSTR)location, -1,
+		    (LPSTR)widename, 2 * MAX_PATH, NULL, NULL);
+	    return widename;
+	}
+    }
+    else
+    {
+	if (FindExecutableA((LPCTSTR)name, (LPCTSTR)"",
+		    (LPTSTR)location) > (HINSTANCE)32)
+	    return location;
+    }
+    return "";
+}
+# endif
+#endif
+
+STDMETHODIMP CShellExt::InvokeGvim(HWND hParent,
+				   LPCSTR pszWorkingDir,
+				   LPCSTR pszCmd,
+				   LPCSTR pszParam,
+				   int iShowCmd)
+{
+    char m_szFileUserClickedOn[MAX_PATH];
+    char cmdStr[MAX_PATH];
+    UINT i;
+
+    for (i = 0; i < cbFiles; i++)
+    {
+	DragQueryFile((HDROP)medium.hGlobal,
+		i,
+		m_szFileUserClickedOn,
+		sizeof(m_szFileUserClickedOn));
+
+	getGvimName(cmdStr, 0);
+	strcat(cmdStr, " \"");
+
+	if ((strlen(cmdStr) + strlen(m_szFileUserClickedOn) + 2) < MAX_PATH)
+	{
+	    strcat(cmdStr, m_szFileUserClickedOn);
+	    strcat(cmdStr, "\"");
+
+	    STARTUPINFO si;
+	    PROCESS_INFORMATION pi;
+
+	    ZeroMemory(&si, sizeof(si));
+	    si.cb = sizeof(si);
+
+	    // Start the child process.
+	    if (!CreateProcess(NULL,	// No module name (use command line).
+			cmdStr,		// Command line.
+			NULL,		// Process handle not inheritable.
+			NULL,		// Thread handle not inheritable.
+			FALSE,		// Set handle inheritance to FALSE.
+			0,		// No creation flags.
+			NULL,		// Use parent's environment block.
+			NULL,		// Use parent's starting directory.
+			&si,		// Pointer to STARTUPINFO structure.
+			&pi)		// Pointer to PROCESS_INFORMATION structure.
+	       )
+	    {
+		MessageBox(
+		    hParent,
+		    _("Error creating process: Check if gvim is in your path!"),
+		    _("gvimext.dll error"),
+		    MB_OK);
+	    }
+	    else
+	    {
+		CloseHandle( pi.hProcess );
+		CloseHandle( pi.hThread );
+	    }
+	}
+	else
+	{
+	    MessageBox(
+		hParent,
+		_("Path length too long!"),
+		_("gvimext.dll error"),
+		MB_OK);
+	}
+    }
+
+    return NOERROR;
+}
+
+
+STDMETHODIMP CShellExt::InvokeSingleGvim(HWND hParent,
+				   LPCSTR pszWorkingDir,
+				   LPCSTR pszCmd,
+				   LPCSTR pszParam,
+				   int iShowCmd,
+				   int useDiff)
+{
+    char	m_szFileUserClickedOn[MAX_PATH];
+    char	*cmdStr;
+    size_t	cmdlen;
+    size_t	len;
+    UINT i;
+
+    cmdlen = MAX_PATH;
+    cmdStr = (char *)malloc(cmdlen);
+    getGvimName(cmdStr, 0);
+    if (useDiff)
+	strcat(cmdStr, " -d");
+    for (i = 0; i < cbFiles; i++)
+    {
+	DragQueryFile((HDROP)medium.hGlobal,
+		i,
+		m_szFileUserClickedOn,
+		sizeof(m_szFileUserClickedOn));
+
+	len = strlen(cmdStr) + strlen(m_szFileUserClickedOn) + 4;
+	if (len > cmdlen)
+	{
+	    cmdlen = len + MAX_PATH;
+	    cmdStr = (char *)realloc(cmdStr, cmdlen);
+	}
+	strcat(cmdStr, " \"");
+	strcat(cmdStr, m_szFileUserClickedOn);
+	strcat(cmdStr, "\"");
+    }
+
+    STARTUPINFO si;
+    PROCESS_INFORMATION pi;
+
+    ZeroMemory(&si, sizeof(si));
+    si.cb = sizeof(si);
+
+    // Start the child process.
+    if (!CreateProcess(NULL,	// No module name (use command line).
+		cmdStr,		// Command line.
+		NULL,		// Process handle not inheritable.
+		NULL,		// Thread handle not inheritable.
+		FALSE,		// Set handle inheritance to FALSE.
+		0,		// No creation flags.
+		NULL,		// Use parent's environment block.
+		NULL,		// Use parent's starting directory.
+		&si,		// Pointer to STARTUPINFO structure.
+		&pi)		// Pointer to PROCESS_INFORMATION structure.
+       )
+    {
+	MessageBox(
+	    hParent,
+	    _("Error creating process: Check if gvim is in your path!"),
+	    _("gvimext.dll error"),
+	    MB_OK);
+    }
+    else
+    {
+	CloseHandle(pi.hProcess);
+	CloseHandle(pi.hThread);
+    }
+
+    free(cmdStr);
+
+    return NOERROR;
+}
new file mode 100644
--- /dev/null
+++ b/src/GvimExt/gvimext.def
@@ -0,0 +1,8 @@
+;gvimdef.def : Declares the module parameters for the DLL.
+
+LIBRARY      gvimext
+DESCRIPTION  'Vim Shell Extension'
+
+EXPORTS
+    DllCanUnloadNow private
+    DllGetClassObject private
new file mode 100644
--- /dev/null
+++ b/src/GvimExt/gvimext.h
@@ -0,0 +1,164 @@
+/* vi:set ts=8 sts=4 sw=4:
+ *
+ * VIM - Vi IMproved	gvimext by Tianmiao Hu
+ *
+ * Do ":help uganda"  in Vim to read copying and usage conditions.
+ * Do ":help credits" in Vim to see a list of people who contributed.
+ */
+
+/*
+ * If you have any questions or any suggestions concerning gvimext, please
+ * contact Tianmiao Hu: tianmiao@acm.org.
+ */
+
+#if !defined(AFX_STDAFX_H__3389658B_AD83_11D3_9C1E_0090278BBD99__INCLUDED_)
+#define AFX_STDAFX_H__3389658B_AD83_11D3_9C1E_0090278BBD99__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+// Insert your headers here
+// #define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers
+
+//--------------------------------------------------------------
+// common user interface routines
+//
+//
+//--------------------------------------------------------------
+
+#ifndef STRICT
+#define STRICT
+#endif
+
+#define INC_OLE2	// WIN32, get ole2 from windows.h
+
+#include <windows.h>
+#include <windowsx.h>
+#include <shlobj.h>
+
+#define ResultFromShort(i)  ResultFromScode(MAKE_SCODE(SEVERITY_SUCCESS, 0, (USHORT)(i)))
+
+// Initialize GUIDs (should be done only and at-least once per DLL/EXE)
+//
+#pragma data_seg(".text")
+#define INITGUID
+#include <initguid.h>
+#include <shlguid.h>
+
+//
+// The class ID of this Shell extension class.
+//
+// class id:  {51EEE242-AD87-11d3-9C1E-0090278BBD99}
+//
+//
+// NOTE!!!  If you use this shell extension as a starting point,
+//	    you MUST change the GUID below.  Simply run UUIDGEN.EXE
+//	    to generate a new GUID.
+//
+
+// {51EEE242-AD87-11d3-9C1E-0090278BBD99}
+// static const GUID <<name>> =
+// { 0x51eee242, 0xad87, 0x11d3, { 0x9c, 0x1e, 0x0, 0x90, 0x27, 0x8b, 0xbd, 0x99 } };
+//
+//
+
+// {51EEE242-AD87-11d3-9C1E-0090278BBD99}
+// IMPLEMENT_OLECREATE(<<class>>, <<external_name>>,
+// 0x51eee242, 0xad87, 0x11d3, 0x9c, 0x1e, 0x0, 0x90, 0x27, 0x8b, 0xbd, 0x99);
+//
+
+// {51EEE242-AD87-11d3-9C1E-0090278BBD99}  -- this is the registry format
+DEFINE_GUID(CLSID_ShellExtension, 0x51eee242, 0xad87, 0x11d3, 0x9c, 0x1e, 0x0, 0x90, 0x27, 0x8b, 0xbd, 0x99);
+
+// this class factory object creates context menu handlers for windows 32 shell
+class CShellExtClassFactory : public IClassFactory
+{
+protected:
+	ULONG	m_cRef;
+
+public:
+	CShellExtClassFactory();
+	~CShellExtClassFactory();
+
+	//IUnknown members
+	STDMETHODIMP			QueryInterface(REFIID, LPVOID FAR *);
+	STDMETHODIMP_(ULONG)	AddRef();
+	STDMETHODIMP_(ULONG)	Release();
+
+	//IClassFactory members
+	STDMETHODIMP		CreateInstance(LPUNKNOWN, REFIID, LPVOID FAR *);
+	STDMETHODIMP		LockServer(BOOL);
+
+};
+typedef CShellExtClassFactory *LPCSHELLEXTCLASSFACTORY;
+#define MAX_HWND 100
+
+// this is the actual OLE Shell context menu handler
+class CShellExt : public IContextMenu,
+			 IShellExtInit
+{
+protected:
+    ULONG	 m_cRef;
+    LPDATAOBJECT m_pDataObj;
+    UINT	 m_edit_existing_off;
+
+    // For some reason, this callback must be static
+    static BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam);
+
+    STDMETHODIMP PushToWindow(HWND hParent,
+	    LPCSTR pszWorkingDir,
+	    LPCSTR pszCmd,
+	    LPCSTR pszParam,
+	    int iShowCmd,
+	    int idHWnd);
+
+    STDMETHODIMP InvokeGvim(HWND hParent,
+	    LPCSTR pszWorkingDir,
+	    LPCSTR pszCmd,
+	    LPCSTR pszParam,
+	    int iShowCmd);
+
+    STDMETHODIMP InvokeSingleGvim(HWND hParent,
+	    LPCSTR pszWorkingDir,
+	    LPCSTR pszCmd,
+	    LPCSTR pszParam,
+	    int iShowCmd,
+	    int useDiff);
+
+public:
+    int		 m_cntOfHWnd;
+    HWND	 m_hWnd[MAX_HWND];
+    CShellExt();
+    ~CShellExt();
+
+    //IUnknown members
+    STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
+    STDMETHODIMP_(ULONG) AddRef();
+    STDMETHODIMP_(ULONG) Release();
+
+    //IShell members
+    STDMETHODIMP QueryContextMenu(HMENU hMenu,
+	    UINT indexMenu,
+	    UINT idCmdFirst,
+	    UINT idCmdLast,
+	    UINT uFlags);
+
+    STDMETHODIMP InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi);
+
+    STDMETHODIMP GetCommandString(UINT idCmd,
+	    UINT uFlags,
+	    UINT FAR *reserved,
+	    LPSTR pszName,
+	    UINT cchMax);
+
+    //IShellExtInit methods
+    STDMETHODIMP Initialize(LPCITEMIDLIST pIDFolder,
+	    LPDATAOBJECT pDataObj,
+	    HKEY hKeyID);
+};
+
+typedef CShellExt *LPCSHELLEXT;
+#pragma data_seg()
+
+#endif
new file mode 100644
--- /dev/null
+++ b/src/GvimExt/gvimext.inf
@@ -0,0 +1,22 @@
+[Version]
+Signature="$Windows NT$""
+Provider="Tianmiao"
+
+[Manufacture]
+
+[DefaultInstall]
+AddReg=ThisDll.Add.Reg
+
+[DefaultUninstall]
+DelReg=ThisDLL.Add.Reg
+
+[ThisDll.Add.Reg]
+HKCR,CLSID\{51EEE242-AD87-11d3-9C1E-0090278BBD99}
+HKCR,CLSID\{51EEE242-AD87-11d3-9C1E-0090278BBD99}\InProcServer32
+HKCR,*\shellex\ContextMenuHandlers\gvim
+HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved",{51EEE242-AD87-11d3-9C1E-0090278BBD99}
+HKLM,Software\Vim\Gvim
+HKLM,"Software\Microsoft\Windows\CurrentVersion\Uninstall\Vim 6.0"
+
+[Strings]
+ThisDll="gvimext.dll"
new file mode 100644
--- /dev/null
+++ b/src/GvimExt/gvimext.rc
@@ -0,0 +1,111 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#ifndef __BORLANDC__
+# include "afxres.h"
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifndef _MAC
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 1,0,0,1
+ PRODUCTVERSION 1,0,0,1
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x3L
+#else
+ FILEFLAGS 0x2L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904b0"
+        BEGIN
+            VALUE "Comments", "Developed using COM architecture!\0"
+            VALUE "CompanyName", "Tianmiao Hu's Developer Studio\0"
+            VALUE "FileDescription", "A small project for the context menu of gvim!\0"
+            VALUE "FileVersion", "1, 0, 0, 1\0"
+            VALUE "InternalName", "gvim right-click menu extension\0"
+            VALUE "LegalCopyright", "Copyright © 1999 Tianmiao Hu\0"
+            VALUE "LegalTrademarks", "Tianmiao Hu's Gvim Context Menu Extension\0"
+            VALUE "OriginalFilename", "gvimext.dll\0"
+            VALUE "PrivateBuild", "\0"
+            VALUE "ProductName", "Tianmiao Hu's  gvimext context menu extension\0"
+            VALUE "ProductVersion", "1, 0, 0, 1\0"
+            VALUE "SpecialBuild", "\0"
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
+
+#endif    // !_MAC
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+#endif    // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
new file mode 100644
--- /dev/null
+++ b/src/GvimExt/gvimext_ming.def
@@ -0,0 +1,10 @@
+;gvimdef_ming.def : Declares the module parameters for the DLL.
+;The mingw environment doesn't know anything about private declarations
+;Hence this is the same file as gvimext.def with private removed
+
+LIBRARY      gvimext
+DESCRIPTION  'Vim Shell Extension build with MinGW'
+
+EXPORTS
+    DllCanUnloadNow = DllCanUnloadNow@0
+    DllGetClassObject  = DllGetClassObject@12
new file mode 100644
--- /dev/null
+++ b/src/GvimExt/gvimext_ming.rc
@@ -0,0 +1,45 @@
+#include <windows.h>
+#define xstr(x) str(x)
+#define str(x) #x
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 1,0,0,1
+ PRODUCTVERSION 1,0,0,1
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x3L
+#else
+ FILEFLAGS 0x2L
+#endif
+ FILEOS 0x4L
+ FILETYPE VFT_DLL
+ FILESUBTYPE 0x0L
+{
+    BLOCK "StringFileInfo"
+    {
+        BLOCK "040904b0"
+        {
+            VALUE "Comments", "Developed using COM architecture!\0"
+            VALUE "CompanyName", "Tianmiao Hu's Developer Studio\0"
+            VALUE "FileDescription", "A small project for the context menu of gvim!\0"
+            VALUE "FileVersion", "1, 0, 0, 1\0"
+            VALUE "InternalName", "gvim right-click menu extension\0"
+            VALUE "LegalCopyright", "Copyright © 1999 Tianmiao Hu\0"
+            VALUE "LegalTrademarks", "Tianmiao Hu's Gvim Context Menu Extension\0"
+            VALUE "OriginalFilename", "gvimext.dll\0"
+            VALUE "PrivateBuild", "\0"
+            VALUE "ProductName", "Tianmiao Hu's  gvimext context menu extension\0"
+            VALUE "ProductVersion", "1, 0, 0, 1\0"
+
+#if defined(__GNUC__)
+            VALUE "SpecialBuild", "Build With " "MingW " xstr(__GNUC__) "." xstr(__GNUC_MINOR__) "." xstr(__GNUC_PATCHLEVEL__)  " on " __DATE__ " " __TIME__ "\0"
+#else
+            VALUE "SpecialBuild", "Unknown compiler\0"
+
+#endif
+        }
+    }
+    BLOCK "VarFileInfo"
+    {
+        VALUE "Translation", 0x409, 1200
+    }
+}
new file mode 100644
--- /dev/null
+++ b/src/GvimExt/resource.h
@@ -0,0 +1,15 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by gvimext.rc
+//
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE	101
+#define _APS_NEXT_COMMAND_VALUE		40001
+#define _APS_NEXT_CONTROL_VALUE		1000
+#define _APS_NEXT_SYMED_VALUE		101
+#endif
+#endif
new file mode 100644
--- /dev/null
+++ b/src/GvimExt/uninst.bat
@@ -0,0 +1,1 @@
+rundll32.exe setupapi,InstallHinfSection DefaultUninstall 128 %1
--- a/src/edit.c
+++ b/src/edit.c
@@ -4658,8 +4658,10 @@ stop_insert(end_insert_pos, esc)
 	 * insertion (or moving the cursor), but it's required when appending
 	 * a line and having it end in a space.  But only do it when something
 	 * was actually inserted, otherwise undo won't work. */
-	if (!ins_need_undo)
+	if (!ins_need_undo && has_format_option(FO_AUTO))
 	{
+	    pos_T   tpos = curwin->w_cursor;
+
 	    /* When the cursor is at the end of the line after a space the
 	     * formatting will move it to the following word.  Avoid that by
 	     * moving the cursor onto the space. */
@@ -4669,27 +4671,45 @@ stop_insert(end_insert_pos, esc)
 		dec_cursor();
 		cc = gchar_cursor();
 		if (!vim_iswhite(cc))
-		    inc_cursor();
+		    curwin->w_cursor = tpos;
 	    }
 
 	    auto_format(TRUE, FALSE);
 
-	    if (vim_iswhite(cc) && gchar_cursor() != NUL)
-		inc_cursor();
+	    if (vim_iswhite(cc))
+	    {
+		if (gchar_cursor() != NUL)
+		    inc_cursor();
+#ifdef FEAT_VIRTUALEDIT
+		/* If the cursor is still at the same character, also keep
+		 * the "coladd". */
+		if (gchar_cursor() == NUL
+			&& curwin->w_cursor.lnum == tpos.lnum
+			&& curwin->w_cursor.col == tpos.col)
+		    curwin->w_cursor.coladd = tpos.coladd;
+#endif
+	    }
 	}
 
 	/* If a space was inserted for auto-formatting, remove it now. */
 	check_auto_format(TRUE);
 
 	/* If we just did an auto-indent, remove the white space from the end
-	 * of the line, and put the cursor back.  */
-	if (did_ai && esc)
+	 * of the line, and put the cursor back.
+	 * Do this when ESC was used or moving the cursor up/down. */
+	if (did_ai && (esc || (vim_strchr(p_cpo, CPO_INDENT) == NULL
+			   && curwin->w_cursor.lnum != end_insert_pos->lnum)))
 	{
+	    pos_T	tpos = curwin->w_cursor;
+
+	    curwin->w_cursor = *end_insert_pos;
 	    if (gchar_cursor() == NUL && curwin->w_cursor.col > 0)
 		--curwin->w_cursor.col;
 	    while (cc = gchar_cursor(), vim_iswhite(cc))
 		(void)del_char(TRUE);
-	    if (cc != NUL)
+	    if (curwin->w_cursor.lnum != tpos.lnum)
+		curwin->w_cursor = tpos;
+	    else if (cc != NUL)
 		++curwin->w_cursor.col;	/* put cursor back on the NUL */
 
 #ifdef FEAT_VISUAL
--- a/src/eval.c
+++ b/src/eval.c
@@ -3784,6 +3784,8 @@ f_cursor(argvars, retvar)
     if (has_mbyte)
 	mb_adjust_cursor();
 #endif
+
+    curwin->w_set_curswant = TRUE;
 }
 
 /*
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -375,6 +375,7 @@ dbg_parsearg(arg)
     char_u	*p = arg;
     char_u	*q;
     struct debuggy *bp;
+    int		here = FALSE;
 
     if (ga_grow(&dbg_breakp, 1) == FAIL)
 	return FAIL;
@@ -385,6 +386,16 @@ dbg_parsearg(arg)
 	bp->dbg_type = DBG_FUNC;
     else if (STRNCMP(p, "file", 4) == 0)
 	bp->dbg_type = DBG_FILE;
+    else if (STRNCMP(p, "here", 4) == 0)
+    {
+	if (curbuf->b_ffname == NULL)
+	{
+	    EMSG(_(e_noname));
+	    return FAIL;
+	}
+	bp->dbg_type = DBG_FILE;
+	here = TRUE;
+    }
     else
     {
 	EMSG2(_(e_invarg2), p);
@@ -393,7 +404,9 @@ dbg_parsearg(arg)
     p = skipwhite(p + 4);
 
     /* Find optional line number. */
-    if (VIM_ISDIGIT(*p))
+    if (here)
+	bp->dbg_lnum = curwin->w_cursor.lnum;
+    else if (VIM_ISDIGIT(*p))
     {
 	bp->dbg_lnum = getdigits(&p);
 	p = skipwhite(p);
@@ -402,7 +415,8 @@ dbg_parsearg(arg)
 	bp->dbg_lnum = 0;
 
     /* Find the function or file name.  Don't accept a function name with (). */
-    if (*p == NUL
+    if ((!here && *p == NUL)
+	    || (here && *p != NUL)
 	    || (bp->dbg_type == DBG_FUNC && strstr((char *)p, "()") != NULL))
     {
 	EMSG2(_(e_invarg2), arg);
@@ -411,6 +425,8 @@ dbg_parsearg(arg)
 
     if (bp->dbg_type == DBG_FUNC)
 	bp->dbg_name = vim_strsave(p);
+    else if (here)
+	bp->dbg_name = vim_strsave(curbuf->b_ffname);
     else
     {
 	/* Expand the file name in the same way as do_source().  This means
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -5181,6 +5181,10 @@ ex_window()
 	set_option_value((char_u *)"ft", 0L, (char_u *)"vim", OPT_LOCAL);
     }
 
+    /* Reset 'textwidth' after setting 'filetype' (the Vim filetype plugin
+     * sets 'textwidth' to 78). */
+    curbuf->b_p_tw = 0;
+
     /* Fill the buffer with the history. */
     init_history();
     if (hislen > 0)
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -3965,8 +3965,10 @@ restore_backup:
      * original and the backup file to be lost when halting the system right
      * after writing the file.  That's because only the meta-data is
      * journalled.  Syncing the file slows down the system, but assures it has
-     * been written to disk and we don't lose it. */
-    if (fsync(fd) != 0)
+     * been written to disk and we don't lose it.
+     * For a device do try the fsync() but don't complain if it does not work
+     * (could be a pipe). */
+    if (fsync(fd) != 0 && !device)
     {
 	errmsg = (char_u *)_("E667: Fsync failed");
 	end = 0;
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -100,6 +100,7 @@ static int		KeyNoremap = FALSE; /* remap
 #define RM_YES		0	/* tb_noremap: remap */
 #define RM_NONE		1	/* tb_noremap: don't remap */
 #define RM_SCRIPT	2	/* tb_noremap: remap local script mappings */
+#define RM_ABBR		4	/* tb_noremap: don't remap, do abbrev. */
 
 /* typebuf.tb_buf has three parts: room in front (for result of mappings), the
  * middle for typeahead and room for new characters (which needs to be 3 *
@@ -896,6 +897,8 @@ init_typebuf()
  *
  * If noremap is REMAP_YES, new string can be mapped again.
  * If noremap is REMAP_NONE, new string cannot be mapped again.
+ * If noremap is REMAP_SKIP, fist char of new string cannot be mapped again,
+ * but abbreviations are allowed.
  * If noremap is REMAP_SCRIPT, new string cannot be mapped again, except for
  *			script-local mappings.
  * If noremap is > 0, that many characters of the new string cannot be mapped.
@@ -993,6 +996,8 @@ ins_typebuf(str, noremap, offset, nottyp
     /* If noremap == REMAP_SCRIPT: do remap script-local mappings. */
     if (noremap == REMAP_SCRIPT)
 	val = RM_SCRIPT;
+    else if (noremap == REMAP_SKIP)
+	val = RM_ABBR;
     else
 	val = RM_NONE;
 
@@ -1004,7 +1009,9 @@ ins_typebuf(str, noremap, offset, nottyp
      * If noremap  > 0: "noremap" characters are not remappable, the rest
      *			mappable
      */
-    if (noremap < 0)
+    if (noremap == REMAP_SKIP)
+	nrm = 1;
+    else if (noremap < 0)
 	nrm = addlen;
     else
 	nrm = noremap;
@@ -1856,8 +1863,8 @@ vgetorpeek(advance)
 			    && (no_zero_mapping == 0 || c1 != '0')
 			    && (typebuf.tb_maplen == 0
 				|| (p_remap
-				    && typebuf.tb_noremap[typebuf.tb_off]
-								  != RM_NONE))
+				    && (typebuf.tb_noremap[typebuf.tb_off]
+						    & (RM_NONE|RM_ABBR)) == 0))
 			    && !(p_paste && (State & (INSERT + CMDLINE)))
 			    && !(State == HITRETURN && (c1 == CAR || c1 == ' '))
 			    && State != ASKMORE
@@ -1973,7 +1980,7 @@ vgetorpeek(advance)
 				     * remapped, skip the entry.
 				     */
 				    for (n = mlen; --n >= 0; )
-					if (*s++ == RM_NONE)
+					if (*s++ & (RM_NONE|RM_ABBR))
 					    break;
 				    if (n >= 0)
 					continue;
@@ -2132,7 +2139,8 @@ vgetorpeek(advance)
 							 + typebuf.tb_off, 1);
 				    }
 				    KeyNoremap = (typebuf.tb_noremap[
-						typebuf.tb_off] != REMAP_YES);
+						   typebuf.tb_off]
+						       & (RM_NONE|RM_SCRIPT));
 				    del_typebuf(1, 0);
 				}
 				break;	    /* got character, break for loop */
@@ -2233,7 +2241,8 @@ vgetorpeek(advance)
 			/*
 			 * Insert the 'to' part in the typebuf.tb_buf.
 			 * If 'from' field is the same as the start of the
-			 * 'to' field, don't remap the first character.
+			 * 'to' field, don't remap the first character (but do
+			 * allow abbreviations).
 			 * If m_noremap is set, don't remap the whole 'to'
 			 * part.
 			 */
@@ -2241,8 +2250,8 @@ vgetorpeek(advance)
 				mp->m_noremap != REMAP_YES
 					    ? mp->m_noremap
 					    : STRNCMP(mp->m_str, mp->m_keys,
-							       (size_t)keylen)
-							      ? REMAP_YES : 1,
+							  (size_t)keylen) != 0
+						     ? REMAP_YES : REMAP_SKIP,
 				0, TRUE, cmd_silent || mp->m_silent) == FAIL)
 			{
 			    c = -1;
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -4014,7 +4014,8 @@ fullpathcmp(s1, s2, checkname)
 }
 
 /*
- * get the tail of a path: the file name.
+ * Get the tail of a path: the file name.
+ * Fail safe: never returns NULL.
  */
     char_u *
 gettail(fname)
--- a/src/option.c
+++ b/src/option.c
@@ -3115,7 +3115,7 @@ set_init_3()
      * "-c" and "\"", but not for DJGPP, because it starts the shell without
      * command.com.  And for Win32 we need to set p_sxq instead.
      */
-    if (strstr((char *)p_sh, "sh") != NULL)
+    if (strstr((char *)gettail(p_sh), "sh") != NULL)
     {
 	int	idx3;
 
--- a/src/option.h
+++ b/src/option.h
@@ -129,6 +129,7 @@
 #define CPO_FNAMEW	'F'	/* set file name for ":w file" */
 #define CPO_GOTO1	'g'	/* goto line 1 for ":edit" */
 #define CPO_INTMOD	'i'	/* interrupt a read makes buffer modified */
+#define CPO_INDENT	'I'	/* remove auto-indent more often */
 #define CPO_JOINSP	'j'	/* only use two spaces for join after '.' */
 #define CPO_ENDOFSENT	'J'	/* need two spaces to detect end of sentence */
 #define CPO_KEYCODE	'k'	/* don't recognize raw key code in mappings */
@@ -158,7 +159,7 @@
 #define CPO_STAR	'*'	/* ":*" means ":@" */
 #define CPO_SPECI	'<'	/* don't recognize <> in mappings */
 #define CPO_DEFAULT	"aABceFs"
-#define CPO_ALL		"aAbBcCdDeEfFgijJkKlLmMnoOprRsStuvwWxy$!%*<"
+#define CPO_ALL		"aAbBcCdDeEfFgiIjJkKlLmMnoOprRsStuvwWxy$!%*<"
 
 /* characters for p_ww option: */
 #define WW_ALL		"bshl<>[],~"
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -1521,7 +1521,7 @@ theend:
 
 /*
  * Return TRUE if "name" is in $PATH.
- * TODO: Should also check if it's really executable.
+ * TODO: Should somehow check if it's really executable.
  */
     static int
 executable_exists(char *name)
@@ -2556,7 +2556,43 @@ mch_writable(char_u *name)
     int
 mch_can_exe(char_u *name)
 {
-    return executable_exists((char *)name);
+    char_u	buf[_MAX_PATH];
+    int		len = STRLEN(name);
+    char_u	*p;
+
+    if (len >= _MAX_PATH)	/* safety check */
+	return FALSE;
+
+    /* If there already is an extension try using the name directly.  Also do
+     * this with a Unix-shell like 'shell'. */
+    if (vim_strchr(gettail(name), '.') != NULL
+			       || strstr((char *)gettail(p_sh), "sh") != NULL)
+	if (executable_exists((char *)name))
+	    return TRUE;
+
+    /*
+     * Loop over all extensions in $PATHEXT.
+     */
+    STRNCPY(buf, name, _MAX_PATH);
+    p = mch_getenv("PATHEXT");
+    if (p == NULL)
+	p = (char_u *)".com;.exe;.bat;.cmd";
+    while (*p)
+    {
+	if (p[0] == '.' && (p[1] == NUL || p[1] == ';'))
+	{
+	    /* A single "." means no extension is added. */
+	    buf[len] = NUL;
+	    ++p;
+	    if (*p)
+		++p;
+	}
+	else
+	    copy_option_part(&p, buf + len, _MAX_PATH - len, ";");
+	if (executable_exists((char *)buf))
+	    return TRUE;
+    }
+    return FALSE;
 }
 #endif
 
@@ -4659,14 +4695,14 @@ copy_infostreams(char_u *from, char_u *t
 		    {
 			streamname[len - 6] = 0;
 			copy_substream(sh, &context, tow, streamname,
-						      (long)sid.Size.LowPart);
+						    (long)sid.Size.u.LowPart);
 		    }
 		}
 
 		/* Advance to the next stream.  We might try seeking too far,
 		 * but BackupSeek() doesn't skip over stream borders, thus
 		 * that's OK. */
-		(void)BackupSeek(sh, sid.Size.LowPart, sid.Size.HighPart,
+		(void)BackupSeek(sh, sid.Size.LowPart, sid.Size.u.HighPart,
 							  &lo, &hi, &context);
 	    }
 
--- a/src/po/es.po
+++ b/src/po/es.po
@@ -8,10 +8,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Vim 6.3a.16 (Español)\n"
-"Report-Msgid-Bugs-To: Alejandro López-Valencia <dradul@yahoo.com>\n"
-"POT-Creation-Date: 2004-05-12 18:38-0500\n"
-"PO-Revision-Date: 2004-05-12 20:34-0500\n"
+"Project-Id-Version: Vim 6.3.7 (Español)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2004-06-23 20:35-0500\n"
+"PO-Revision-Date: 2004-06-23 20:46-0500\n"
 "Last-Translator: Alejandro López-Valencia <dradul@yahoo.com>\n"
 "Language-Team: Alejandro López-Valencia <dradul@yahoo.com>\n"
 "MIME-Version: 1.0\n"
@@ -26,172 +26,172 @@ msgstr "E82: No se puede asignar memoria para ningún «buffer», saliendo..."
 msgid "E83: Cannot allocate buffer, using other one..."
 msgstr "E83: No se puede asignar memoria para el «buffer», usando otro..."
 
-#: buffer.c:805
+#: buffer.c:808
 msgid "E515: No buffers were unloaded"
 msgstr "E515: No se descargó ningún «buffer»."
 
-#: buffer.c:807
+#: buffer.c:810
 msgid "E516: No buffers were deleted"
 msgstr "E516: No se borró ningún «buffer»."
 
-#: buffer.c:809
+#: buffer.c:812
 msgid "E517: No buffers were wiped out"
 msgstr "E517: No se eliminó ningún «buffer»."
 
-#: buffer.c:817
+#: buffer.c:820
 msgid "1 buffer unloaded"
 msgstr "Un «buffer» descargado."
 
-#: buffer.c:819
+#: buffer.c:822
 #, c-format
 msgid "%d buffers unloaded"
 msgstr "%d «buffers» descargados."
 
-#: buffer.c:824
+#: buffer.c:827
 msgid "1 buffer deleted"
 msgstr "Un «buffer» suprimido."
 
-#: buffer.c:826
+#: buffer.c:829
 #, c-format
 msgid "%d buffers deleted"
 msgstr "%d «buffers» suprimidos."
 
-#: buffer.c:831
+#: buffer.c:834
 msgid "1 buffer wiped out"
 msgstr "1 «buffer» eliminado."
 
-#: buffer.c:833
+#: buffer.c:836
 #, c-format
 msgid "%d buffers wiped out"
 msgstr "%d «buffers» eliminados."
 
-#: buffer.c:894
+#: buffer.c:897
 msgid "E84: No modified buffer found"
 msgstr "E84: No he encontrado ningún «buffer» modificado."
 
 #. back where we started, didn't find anything.
-#: buffer.c:933
+#: buffer.c:936
 msgid "E85: There is no listed buffer"
 msgstr "E85: No hay «buffers» en la lista."
 
-#: buffer.c:945
+#: buffer.c:948
 #, c-format
 msgid "E86: Buffer %ld does not exist"
 msgstr "E86: El «buffer» %ld no existe."
 
-#: buffer.c:948
+#: buffer.c:951
 msgid "E87: Cannot go beyond last buffer"
 msgstr "E87: No puedo ir más allá del último «buffer»."
 
-#: buffer.c:950
+#: buffer.c:953
 msgid "E88: Cannot go before first buffer"
 msgstr "E88: No puedo ir más atrás del primer buffer."
 
-#: buffer.c:988
+#: buffer.c:991
 #, c-format
 msgid "E89: No write since last change for buffer %ld (add ! to override)"
 msgstr ""
 "E89: No ha guardado el fichero desde el último cambio del «buffer» %ld "
 "(añada ! para forzar)."
 
-#: buffer.c:1005
+#: buffer.c:1008
 msgid "E90: Cannot unload last buffer"
 msgstr "E90: No se puede descargar el último buffer."
 
-#: buffer.c:1538
+#: buffer.c:1544
 msgid "W14: Warning: List of file names overflow"
 msgstr "W14: Advertencia: lista de nombres de ficheros demasiado larga."
 
-#: buffer.c:1709
+#: buffer.c:1716
 #, c-format
 msgid "E92: Buffer %ld not found"
 msgstr "E92: No se ha encontrado el buffer %ld"
 
-#: buffer.c:1940
+#: buffer.c:1947
 #, c-format
 msgid "E93: More than one match for %s"
 msgstr "E93: Más de una coincidencia con %s."
 
-#: buffer.c:1942
+#: buffer.c:1949
 #, c-format
 msgid "E94: No matching buffer for %s"
 msgstr "E94: No hay un buffer que coincida con %s."
 
-#: buffer.c:2337
+#: buffer.c:2344
 #, c-format
 msgid "line %ld"
 msgstr "línea %ld"
 
-#: buffer.c:2420
+#: buffer.c:2429
 msgid "E95: Buffer with this name already exists"
 msgstr "E95: Ya existe un buffer con este nombre."
 
-#: buffer.c:2713
+#: buffer.c:2724
 msgid " [Modified]"
 msgstr " [Modificado]"
 
-#: buffer.c:2718
+#: buffer.c:2729
 msgid "[Not edited]"
 msgstr "[Sin editar]"
 
-#: buffer.c:2723
+#: buffer.c:2734
 msgid "[New file]"
 msgstr "[Fichero nuevo]"
 
-#: buffer.c:2724
+#: buffer.c:2735
 msgid "[Read errors]"
 msgstr "[Errores de lectura]"
 
-#: buffer.c:2726 fileio.c:2112
+#: buffer.c:2737 fileio.c:2124
 msgid "[readonly]"
 msgstr "[Sólo lectura]"
 
-#: buffer.c:2747
+#: buffer.c:2758
 #, c-format
 msgid "1 line --%d%%--"
 msgstr "1 línea --%d%%--"
 
-#: buffer.c:2749
+#: buffer.c:2760
 #, c-format
 msgid "%ld lines --%d%%--"
 msgstr "%ld líneas --%d%%--"
 
-#: buffer.c:2756
+#: buffer.c:2767
 #, c-format
 msgid "line %ld of %ld --%d%%-- col "
 msgstr "línea %ld de %ld --%d%%-- col "
 
-#: buffer.c:2864
+#: buffer.c:2875
 msgid "[No file]"
 msgstr "[Sin fichero]"
 
 #  must be a help buffer
 #. must be a help buffer
-#: buffer.c:2904
+#: buffer.c:2915
 msgid "help"
 msgstr "ayuda"
 
-#: buffer.c:3463 screen.c:5075
+#: buffer.c:3474 screen.c:5079
 msgid "[help]"
 msgstr "[ayuda]"
 
-#: buffer.c:3495 screen.c:5081
+#: buffer.c:3506 screen.c:5085
 msgid "[Preview]"
 msgstr "[Vista previa]"
 
-#: buffer.c:3775
+#: buffer.c:3786
 msgid "All"
 msgstr "Todo"
 
-#: buffer.c:3775
+#: buffer.c:3786
 msgid "Bot"
 msgstr "Final"
 
-#: buffer.c:3777
+#: buffer.c:3788
 msgid "Top"
 msgstr "Comienzo"
 
-#: buffer.c:4523
+#: buffer.c:4536
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -199,15 +199,15 @@ msgstr ""
 "\n"
 "# Lista de «buffers»:\n"
 
-#: buffer.c:4556
+#: buffer.c:4569
 msgid "[Error List]"
 msgstr "[Lista de errores]"
 
-#: buffer.c:4569 memline.c:1520
+#: buffer.c:4582 memline.c:1521
 msgid "[No File]"
 msgstr "[Sin fichero]"
 
-#: buffer.c:4882
+#: buffer.c:4895
 msgid ""
 "\n"
 "--- Signs ---"
@@ -215,12 +215,12 @@ msgstr ""
 "\n"
 "--- Signos ---"
 
-#: buffer.c:4901
+#: buffer.c:4914
 #, c-format
 msgid "Signs for %s:"
 msgstr "Signos para %s"
 
-#: buffer.c:4907
+#: buffer.c:4920
 #, c-format
 msgid "    line=%ld  id=%d  name=%s"
 msgstr "    línea=%ld id=%d nombre=%s"
@@ -234,32 +234,32 @@ msgstr "E96: No puedo usar «diff» con más de %ld «buffers»."
 msgid "E97: Cannot create diffs"
 msgstr "E97: No puedo crear «diffs»."
 
-#: diff.c:818
+#: diff.c:819
 msgid "Patch file"
 msgstr "Fichero de parches."
 
-#: diff.c:1069
+#: diff.c:1072
 msgid "E98: Cannot read diff output"
 msgstr "E98: no puedo leer la salida de «diff»."
 
-#: diff.c:1819
+#: diff.c:1822
 msgid "E99: Current buffer is not in diff mode"
 msgstr "E99: El «buffer» actual no está en modo «diff»."
 
-#: diff.c:1831
+#: diff.c:1834
 msgid "E100: No other buffer in diff mode"
 msgstr "E100: Ningún otro «buffer» está en modo «diff»."
 
-#: diff.c:1839
+#: diff.c:1842
 msgid "E101: More than two buffers in diff mode, don't know which one to use"
 msgstr "E101: Más de dos «buffers» en modo «diff», no se cual usar."
 
-#: diff.c:1862
+#: diff.c:1865
 #, c-format
 msgid "E102: Can't find buffer \"%s\""
 msgstr "E102: No puedo encontrar el «buffer» «%s»."
 
-#: diff.c:1868
+#: diff.c:1871
 #, c-format
 msgid "E103: Buffer \"%s\" is not in diff mode"
 msgstr "E103: El «buffer» «%s» no está en modo «diff»."
@@ -274,7 +274,8 @@ msgstr "E544: No encontré el fichero «keymap»."
 
 #: digraph.c:2411
 msgid "E105: Using :loadkeymap not in a sourced file"
-msgstr "E105: «:loadkeymap» en un fichero que no contiene instrucciones ejecutables."
+msgstr ""
+"E105: «:loadkeymap» en un fichero que no contiene instrucciones ejecutables."
 
 #: edit.c:40
 msgid " Keyword completion (^N^P)"
@@ -481,7 +482,7 @@ msgstr "E120: Usando <SID> en un contexto que no es de «script»: %s."
 #. * this way has the compelling advantage that translations need not to
 #. * be touched at all.  See below what 'ok' and 'ync' are used for.
 #.
-#: eval.c:3687 gui.c:4382 gui_gtk.c:2059
+#: eval.c:3687 gui.c:4385 gui_gtk.c:2059
 msgid "&Ok"
 msgstr "&Ok"
 
@@ -506,124 +507,124 @@ msgstr "He llamado a «inputrestore()» más veces que a «inputsave()»."
 msgid "E655: Too many symbolic links (cycle?)"
 msgstr "E655: Hay demasiados enlaces symbólicos (¿referencia circular?)"
 
-#: eval.c:6609
+#: eval.c:6626
 msgid "E240: No connection to Vim server"
 msgstr "E240: Sin conexión al servidor Vim."
 
-#: eval.c:6706
+#: eval.c:6724
 msgid "E277: Unable to read a server reply"
 msgstr "E277: Incapaz de leer una respuesta del servidor."
 
-#: eval.c:6734
+#: eval.c:6752
 msgid "E258: Unable to send to client"
 msgstr "E258: Incapaz de enviar al cliente."
 
-#: eval.c:6782
+#: eval.c:6800
 #, c-format
 msgid "E241: Unable to send to %s"
 msgstr "E241: Incapaz de enviar a %s."
 
-#: eval.c:6882
+#: eval.c:6900
 msgid "(Invalid)"
 msgstr "(No válido)"
 
-#: eval.c:8060
+#: eval.c:8078
 #, c-format
 msgid "E121: Undefined variable: %s"
 msgstr "E121: Variable sin definir: %s."
 
-#: eval.c:8492
+#: eval.c:8510
 #, c-format
 msgid "E461: Illegal variable name: %s"
 msgstr "E244: ¡Nombre ilegal para una variable! %s"
 
-#: eval.c:8784
+#: eval.c:8802
 #, c-format
 msgid "E122: Function %s already exists, add ! to replace it"
 msgstr "E226: La función %s ya existe, añada «!» para reemplazarla."
 
-#: eval.c:8857
+#: eval.c:8875
 #, c-format
 msgid "E123: Undefined function: %s"
 msgstr "E123: Función sin definir: %s."
 
-#: eval.c:8870
+#: eval.c:8888
 #, c-format
 msgid "E124: Missing '(': %s"
 msgstr "E124: Falta «(»: %s."
 
-#: eval.c:8903
+#: eval.c:8921
 #, c-format
 msgid "E125: Illegal argument: %s"
 msgstr "E125: Argumento ilegal: %s."
 
-#: eval.c:8982
+#: eval.c:9000
 msgid "E126: Missing :endfunction"
 msgstr "E126: Falta «:endfunction»."
 
-#: eval.c:9089
+#: eval.c:9107
 #, c-format
 msgid "E127: Cannot redefine function %s: It is in use"
 msgstr "E127: No se puede redefinir la función %s: está en uso."
 
-#: eval.c:9159
+#: eval.c:9177
 msgid "E129: Function name required"
 msgstr "E129: Se requiere el nombre de la función."
 
-#: eval.c:9210
+#: eval.c:9228
 #, c-format
 msgid "E128: Function name must start with a capital: %s"
 msgstr "E128: El nombre de la función debe empezar con mayúscula: %s."
 
-#: eval.c:9402
+#: eval.c:9420
 #, c-format
 msgid "E130: Undefined function: %s"
 msgstr "E130: Función sin definir: %s."
 
-#: eval.c:9407
+#: eval.c:9425
 #, c-format
 msgid "E131: Cannot delete function %s: It is in use"
 msgstr "E131: No se puede eliminar la función %s: está en uso."
 
-#: eval.c:9455
+#: eval.c:9473
 msgid "E132: Function call depth is higher than 'maxfuncdepth'"
 msgstr ""
 "E132: La profundidad de la llamada a la función es mayor que «maxfuncdepth»."
 
 #  always scroll up, don't overwrite
 #. always scroll up, don't overwrite
-#: eval.c:9508
+#: eval.c:9526
 #, c-format
 msgid "calling %s"
 msgstr "Llamando a %s."
 
-#: eval.c:9570
+#: eval.c:9588
 #, c-format
 msgid "%s aborted"
 msgstr "He abortado a %s."
 
-#: eval.c:9572
+#: eval.c:9590
 #, c-format
 msgid "%s returning #%ld"
 msgstr "%s devuelve #%ld."
 
-#: eval.c:9579
+#: eval.c:9597
 #, c-format
 msgid "%s returning \"%s\""
 msgstr "%s devuelve «%s»."
 
 #  always scroll up, don't overwrite
 #. always scroll up, don't overwrite
-#: eval.c:9595 ex_cmds2.c:2365
+#: eval.c:9613 ex_cmds2.c:2369
 #, c-format
 msgid "continuing in %s"
 msgstr "continuando en %s."
 
-#: eval.c:9621
+#: eval.c:9639
 msgid "E133: :return not inside a function"
 msgstr "E133: «:return» no está dentro de una función."
 
-#: eval.c:9952
+#: eval.c:9970
 msgid ""
 "\n"
 "# global variables:\n"
@@ -736,7 +737,7 @@ msgstr "# Valor de «encoding» cuando se escribió este fichero\n"
 msgid "Illegal starting char"
 msgstr "Carácter de comienzo ilegal"
 
-#: ex_cmds.c:2097 ex_cmds.c:2362 ex_cmds2.c:763
+#: ex_cmds.c:2097 ex_cmds2.c:760
 msgid "Save As"
 msgstr "Guardar como"
 
@@ -766,13 +767,13 @@ msgstr "¿Escribir sobre el fichero existente «%.*s»?"
 msgid "E141: No file name for buffer %ld"
 msgstr "E141: No existe un nombre de fichero para el «buffer» %ld"
 
-#: ex_cmds.c:2405
+#: ex_cmds.c:2406
 msgid "E142: File not written: Writing is disabled by 'write' option"
 msgstr ""
 "E142: No se ha escrito el fichero: escritura desactivada por la opción "
 "«write»."
 
-#: ex_cmds.c:2425
+#: ex_cmds.c:2426
 #, c-format
 msgid ""
 "'readonly' option is set for \"%.*s\".\n"
@@ -781,69 +782,69 @@ msgstr ""
 "Se ha activado la opción «readonly» para «%.*s».\n"
 "¿Quiere escribirlo de todas formas?"
 
-#: ex_cmds.c:2597
+#: ex_cmds.c:2599
 msgid "Edit File"
 msgstr "Editar fichero"
 
-#: ex_cmds.c:3205
+#: ex_cmds.c:3206
 #, c-format
 msgid "E143: Autocommands unexpectedly deleted new buffer %s"
 msgstr ""
 "E143: Los autocomandos han eliminado inesperadamente el nuevo «buffer» %s"
 
-#: ex_cmds.c:3339
+#: ex_cmds.c:3340
 msgid "E144: non-numeric argument to :z"
 msgstr "E144: Argumento no numérico para «:z»."
 
-#: ex_cmds.c:3424
+#: ex_cmds.c:3425
 msgid "E145: Shell commands not allowed in rvim"
 msgstr "E145: Rvim no permite acceso al procesador de comandos."
 
-#: ex_cmds.c:3531
+#: ex_cmds.c:3532
 msgid "E146: Regular expressions can't be delimited by letters"
 msgstr "E146: Las expresiones regulares no se pueden delimitar con letras."
 
-#: ex_cmds.c:3877
+#: ex_cmds.c:3878
 #, c-format
 msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
 msgstr "¿Reemplazar con %s (y/n/a/q/l/^E/^Y)?"
 
-#: ex_cmds.c:4270
+#: ex_cmds.c:4271
 msgid "(Interrupted) "
 msgstr "(Interrumpido)"
 
-#: ex_cmds.c:4274
+#: ex_cmds.c:4275
 msgid "1 substitution"
 msgstr "1 sustitución"
 
-#: ex_cmds.c:4276
+#: ex_cmds.c:4277
 #, c-format
 msgid "%ld substitutions"
 msgstr "%ld sustituciones"
 
-#: ex_cmds.c:4279
+#: ex_cmds.c:4280
 msgid " on 1 line"
 msgstr " en 1 línea"
 
-#: ex_cmds.c:4281
+#: ex_cmds.c:4282
 #, c-format
 msgid " on %ld lines"
 msgstr " en %ld líneas"
 
-#: ex_cmds.c:4332
+#: ex_cmds.c:4333
 msgid "E147: Cannot do :global recursive"
 msgstr "E147: «:global» no puede ser recursivo."
 
-#: ex_cmds.c:4367
+#: ex_cmds.c:4368
 msgid "E148: Regular expression missing from global"
 msgstr "E148: Falta una expresión regular en el comando global."
 
-#: ex_cmds.c:4416
+#: ex_cmds.c:4417
 #, c-format
 msgid "Pattern found in every line: %s"
 msgstr "Patrón encontrado en cada línea: %s"
 
-#: ex_cmds.c:4497
+#: ex_cmds.c:4498
 msgid ""
 "\n"
 "# Last Substitute String:\n"
@@ -853,97 +854,97 @@ msgstr ""
 "# Última cadena de sustitución:\n"
 "$"
 
-#: ex_cmds.c:4598
+#: ex_cmds.c:4599
 msgid "E478: Don't panic!"
 msgstr "E478: ¡No entre en pánico!"
 
-#: ex_cmds.c:4650
+#: ex_cmds.c:4651
 #, c-format
 msgid "E661: Sorry, no '%s' help for %s"
 msgstr "E149: Lo siento, no hay ayuda «%s» para %s."
 
-#: ex_cmds.c:4653
+#: ex_cmds.c:4654
 #, c-format
 msgid "E149: Sorry, no help for %s"
 msgstr "E149: Lo siento, no hay ayuda para %s"
 
-#: ex_cmds.c:4687
+#: ex_cmds.c:4688
 #, c-format
 msgid "Sorry, help file \"%s\" not found"
 msgstr "Lo siento, no encuentro el fichero de ayuda «%s»."
 
-#: ex_cmds.c:5170
+#: ex_cmds.c:5191
 #, c-format
 msgid "E150: Not a directory: %s"
 msgstr "E150: No es un directorio: %s"
 
-#: ex_cmds.c:5309
+#: ex_cmds.c:5332
 #, c-format
 msgid "E152: Cannot open %s for writing"
 msgstr "E152: No se puede abrir %s para escritura."
 
-#: ex_cmds.c:5345
+#: ex_cmds.c:5368
 #, c-format
 msgid "E153: Unable to open %s for reading"
 msgstr "E153: Incapaz de abrir %s para lectura"
 
-#: ex_cmds.c:5367
+#: ex_cmds.c:5404
 #, c-format
 msgid "E670: Mix of help file encodings within a language: %s"
 msgstr ""
 "E670: Mezcla de codificaciones de ficheros de ayuda dentro de un lenguaje: %s"
 
-#: ex_cmds.c:5445
-#, c-format
-msgid "E154: Duplicate tag \"%s\" in file %s"
-msgstr "E154: Tag «%s» duplicada en el fichero %s"
-
-#: ex_cmds.c:5557
+#: ex_cmds.c:5483
+#, c-format
+msgid "E154: Duplicate tag \"%s\" in file %s/%s"
+msgstr "E154: Tag «%s» duplicada en el fichero %s/%s"
+
+#: ex_cmds.c:5599
 #, c-format
 msgid "E160: Unknown sign command: %s"
 msgstr "E160: Comando desconocido de signo: %s"
 
-#: ex_cmds.c:5577
+#: ex_cmds.c:5619
 msgid "E156: Missing sign name"
 msgstr "E156: Falta el nombre del signo."
 
-#: ex_cmds.c:5623
+#: ex_cmds.c:5665
 msgid "E612: Too many signs defined"
 msgstr "E612: Demasiados signos definidos."
 
-#: ex_cmds.c:5691
+#: ex_cmds.c:5733
 #, c-format
 msgid "E239: Invalid sign text: %s"
 msgstr "E239: Texto de signo no válido: %s"
 
-#: ex_cmds.c:5722 ex_cmds.c:5913
+#: ex_cmds.c:5764 ex_cmds.c:5955
 #, c-format
 msgid "E155: Unknown sign: %s"
 msgstr "E155: Signo desconocida: %s"
 
-#: ex_cmds.c:5771
+#: ex_cmds.c:5813
 msgid "E159: Missing sign number"
 msgstr "E159: Falta el número del signo."
 
-#: ex_cmds.c:5853
+#: ex_cmds.c:5895
 #, c-format
 msgid "E158: Invalid buffer name: %s"
 msgstr "E159: El nombre del «buffer» no es válido: %s"
 
-#: ex_cmds.c:5892
+#: ex_cmds.c:5934
 #, c-format
 msgid "E157: Invalid sign ID: %ld"
 msgstr "E157: El id del signo no es válido: %ld"
 
-#: ex_cmds.c:5962
+#: ex_cmds.c:6004
 msgid " (NOT FOUND)"
 msgstr " (NO ENCONTRADO)"
 
-#: ex_cmds.c:5964
+#: ex_cmds.c:6006
 msgid " (not supported)"
 msgstr " (no hay apoyo para la función pedida)"
 
-#: ex_cmds.c:6063
+#: ex_cmds.c:6105
 msgid "[Deleted]"
 msgstr "[Suprimido]"
 
@@ -951,7 +952,7 @@ msgstr "[Suprimido]"
 msgid "Entering Debug mode.  Type \"cont\" to continue."
 msgstr "Entrando al modo de depuración. Oprima \"cont\" para continuar."
 
-#: ex_cmds2.c:96 ex_docmd.c:966
+#: ex_cmds2.c:96 ex_docmd.c:968
 #, c-format
 msgid "line %ld: %s"
 msgstr "línea %ld: %s"
@@ -966,217 +967,219 @@ msgstr "cmd: %s"
 msgid "Breakpoint in \"%s%s\" line %ld"
 msgstr "«Breakpoint» en «%s%s» línea %ld"
 
-#: ex_cmds2.c:540
+#: ex_cmds2.c:539
 #, c-format
 msgid "E161: Breakpoint not found: %s"
 msgstr "E161: No se ha encontrado el «breakpoint»: %s"
 
-#: ex_cmds2.c:566
+#: ex_cmds2.c:565
 msgid "No breakpoints defined"
 msgstr "No hay «breakpoints» definidos."
 
-#: ex_cmds2.c:571
+#: ex_cmds2.c:570
 #, c-format
 msgid "%3d  %s %s  line %ld"
 msgstr "%3d  %s %s  línea %ld"
 
-#: ex_cmds2.c:786
+#: ex_cmds2.c:785
 #, c-format
 msgid "Save changes to \"%.*s\"?"
 msgstr "¿Guardar los cambios en «%.*s»?"
 
-#: ex_cmds2.c:788 ex_docmd.c:9378
+#: ex_cmds2.c:787 ex_docmd.c:9407
 msgid "Untitled"
 msgstr "Sin título"
 
-#: ex_cmds2.c:915
+#: ex_cmds2.c:914
 #, c-format
 msgid "E162: No write since last change for buffer \"%s\""
 msgstr "E162: No se ha grabado nada desde el último cambio en el buffer «%s»"
 
-#: ex_cmds2.c:984
+#: ex_cmds2.c:983
 msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
 msgstr ""
 "Advertencia: se ha entrado en otro «buffer» en forma inesperada (verifique "
 "los autocomandos)."
 
-#: ex_cmds2.c:1387
+#: ex_cmds2.c:1386
 msgid "E163: There is only one file to edit"
 msgstr "E163: Hay sólo un fichero que editar."
 
-#: ex_cmds2.c:1389
+#: ex_cmds2.c:1388
 msgid "E164: Cannot go before first file"
 msgstr "E164: No se puede ir antes del primer fichero."
 
-#: ex_cmds2.c:1391
+#: ex_cmds2.c:1390
 msgid "E165: Cannot go beyond last file"
 msgstr "E165: No se puede ir más allá del último fichero."
 
-#: ex_cmds2.c:1804
+#: ex_cmds2.c:1803
 #, c-format
 msgid "E666: compiler not supported: %s"
 msgstr "E666: El compilador no tiene apoyo en esta versión: %s"
 
-#: ex_cmds2.c:1897
+#: ex_cmds2.c:1900
 #, c-format
 msgid "Searching for \"%s\" in \"%s\""
 msgstr "Buscando «%s» en «%s»."
 
-#: ex_cmds2.c:1919
+#: ex_cmds2.c:1922
 #, c-format
 msgid "Searching for \"%s\""
 msgstr "Buscando «%s»."
 
-#: ex_cmds2.c:1940
+#: ex_cmds2.c:1944
 #, c-format
 msgid "not found in 'runtimepath': \"%s\""
 msgstr "No se ha encontrado en «runtimepath»: «%s»"
 
-#: ex_cmds2.c:1974
+#: ex_cmds2.c:1978
 msgid "Source Vim script"
 msgstr "Ejecute script de Vim."
 
-#: ex_cmds2.c:2164
+#: ex_cmds2.c:2168
 #, c-format
 msgid "Cannot source a directory: \"%s\""
 msgstr "No se puede ejecutar un directorio: «%s»."
 
-#: ex_cmds2.c:2202
+#: ex_cmds2.c:2206
 #, c-format
 msgid "could not source \"%s\""
 msgstr "No se pudo ejecutar «%s»."
 
-#: ex_cmds2.c:2204
+#: ex_cmds2.c:2208
 #, c-format
 msgid "line %ld: could not source \"%s\""
 msgstr "línea %ld: no se pudo ejecutar «%s»."
 
-#: ex_cmds2.c:2218
+#: ex_cmds2.c:2222
 #, c-format
 msgid "sourcing \"%s\""
 msgstr "ejecutando «%s»."
 
-#: ex_cmds2.c:2220
+#: ex_cmds2.c:2224
 #, c-format
 msgid "line %ld: sourcing \"%s\""
 msgstr "línea %ld: ejecutando «%s»."
 
-#: ex_cmds2.c:2363
+#: ex_cmds2.c:2367
 #, c-format
 msgid "finished sourcing %s"
 msgstr "La ejecución de «%s» ha terminado."
 
-#: ex_cmds2.c:2707
+#: ex_cmds2.c:2711
 msgid "W15: Warning: Wrong line separator, ^M may be missing"
 msgstr "W15: Advertencia: separador de línea equivocado, puede que falte ^M"
 
-#: ex_cmds2.c:2756
+#: ex_cmds2.c:2760
 msgid "E167: :scriptencoding used outside of a sourced file"
-msgstr "E167: Ha usado «:scriptencoding» fuera de un fichero de instrucciones ejecutables."
-
-#: ex_cmds2.c:2789
+msgstr ""
+"E167: Ha usado «:scriptencoding» fuera de un fichero de instrucciones "
+"ejecutables."
+
+#: ex_cmds2.c:2793
 msgid "E168: :finish used outside of a sourced file"
-msgstr "E168: Ha usado «:finish» fuera de un fichero de instrucciones ejecutables."
-
-#: ex_cmds2.c:3238
+msgstr ""
+"E168: Ha usado «:finish» fuera de un fichero de instrucciones ejecutables."
+
+#: ex_cmds2.c:3242
 #, c-format
 msgid "Page %d"
 msgstr "Página %d"
 
-#: ex_cmds2.c:3394
+#: ex_cmds2.c:3398
 msgid "No text to be printed"
 msgstr "No hay texto que imprimir."
 
-#: ex_cmds2.c:3472
+#: ex_cmds2.c:3476
 #, c-format
 msgid "Printing page %d (%d%%)"
 msgstr "Imprimiendo la página %d (%d%%)."
 
-#: ex_cmds2.c:3484
+#: ex_cmds2.c:3488
 #, c-format
 msgid " Copy %d of %d"
 msgstr "Copia %d de %d"
 
-#: ex_cmds2.c:3542
+#: ex_cmds2.c:3546
 #, c-format
 msgid "Printed: %s"
 msgstr "Impreso: %s."
 
-#: ex_cmds2.c:3549
+#: ex_cmds2.c:3553
 msgid "Printing aborted"
 msgstr "Impresión abortada."
 
-#: ex_cmds2.c:3914
+#: ex_cmds2.c:3918
 msgid "E455: Error writing to PostScript output file"
 msgstr "E455: Error escribiendo al fichero PostScript de salida."
 
-#: ex_cmds2.c:4189
+#: ex_cmds2.c:4193
 #, c-format
 msgid "E624: Can't open file \"%s\""
 msgstr "E456: No se puede abrir el fichero «%s»."
 
-#: ex_cmds2.c:4199 ex_cmds2.c:4824
+#: ex_cmds2.c:4203 ex_cmds2.c:4828
 #, c-format
 msgid "E457: Can't read PostScript resource file \"%s\""
 msgstr "E457: No se puede leer el fichero de recursos de PostScript «%s»."
 
-#: ex_cmds2.c:4207
+#: ex_cmds2.c:4211
 #, c-format
 msgid "E618: file \"%s\" is not a PostScript resource file"
 msgstr "E618: El fichero \"%s\" no es un fichero de recursos PostScript."
 
-#: ex_cmds2.c:4222 ex_cmds2.c:4242 ex_cmds2.c:4257 ex_cmds2.c:4279
+#: ex_cmds2.c:4226 ex_cmds2.c:4246 ex_cmds2.c:4261 ex_cmds2.c:4283
 #, c-format
 msgid "E619: file \"%s\" is not a supported PostScript resource file"
 msgstr "E619: El fichero «%s» no es un recurso PostScript que pueda usar."
 
-#: ex_cmds2.c:4309
+#: ex_cmds2.c:4313
 #, c-format
 msgid "E621: \"%s\" resource file has wrong version"
 msgstr "E621: El fichero de recursos «%s» tiene la versión equivocada."
 
-#: ex_cmds2.c:4776
+#: ex_cmds2.c:4780
 msgid "E324: Can't open PostScript output file"
 msgstr "E324: No puedo abrir el fichero PostScript de salida."
 
-#: ex_cmds2.c:4809
+#: ex_cmds2.c:4813
 #, c-format
 msgid "E456: Can't open file \"%s\""
 msgstr "E456: No puedo abrir el fichero «%s»."
 
-#: ex_cmds2.c:4928
+#: ex_cmds2.c:4932
 msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr ""
-"E456: No encuentro el fichero de recursos PostScript «prolog.ps»."
-
-#: ex_cmds2.c:4959
+msgstr "E456: No encuentro el fichero de recursos PostScript «prolog.ps»."
+
+#: ex_cmds2.c:4963
 #, c-format
 msgid "E456: Can't find PostScript resource file \"%s.ps\""
 msgstr "E456: No hallo el fichero de recursos PostScript «%s.ps»."
 
-#: ex_cmds2.c:4977
+#: ex_cmds2.c:4981
 #, c-format
 msgid "E620: Unable to convert from multi-byte to \"%s\" encoding"
 msgstr "E620: No puedo convertir de «multi-byte» a la codificación \"%s\"."
 
-#: ex_cmds2.c:5102
+#: ex_cmds2.c:5106
 msgid "Sending to printer..."
 msgstr "Envíando a la impresora..."
 
-#: ex_cmds2.c:5106
+#: ex_cmds2.c:5110
 msgid "E365: Failed to print PostScript file"
 msgstr "E365: No pude imprimir el fichero PostScript."
 
-#: ex_cmds2.c:5108
+#: ex_cmds2.c:5112
 msgid "Print job sent."
 msgstr "Tarea de impresión envíada."
 
-#: ex_cmds2.c:5618
+#: ex_cmds2.c:5622
 #, c-format
 msgid "Current %slanguage: \"%s\""
 msgstr "Idioma actual «%s»: «%s»."
 
-#: ex_cmds2.c:5629
+#: ex_cmds2.c:5633
 #, c-format
 msgid "E197: Cannot set language to \"%s\""
 msgstr "E197: No se puede establecer la opción del idioma a «%s»."
@@ -1191,74 +1194,74 @@ msgstr "Entrando al modo Ex. Escriba «visual» para ir al modo Normal."
 msgid "E501: At end-of-file"
 msgstr "E501: Estoy al final del fichero."
 
-#: ex_docmd.c:669
+#: ex_docmd.c:670
 msgid "E169: Command too recursive"
 msgstr "E169: El comando recurre excesivamente."
 
-#: ex_docmd.c:1229
+#: ex_docmd.c:1232
 #, c-format
 msgid "E605: Exception not caught: %s"
 msgstr "E605: La excepción %s no se atrapó."
 
-#: ex_docmd.c:1317
+#: ex_docmd.c:1320
 msgid "End of sourced file"
 msgstr "Fin del fichero de instrcucciones ejecutables."
 
-#: ex_docmd.c:1318
+#: ex_docmd.c:1321
 msgid "End of function"
 msgstr "Fin de la función."
 
-#: ex_docmd.c:1907
+#: ex_docmd.c:1910
 msgid "E464: Ambiguous use of user-defined command"
 msgstr "E464: Uso ambiguo de un comando definido por el usuario."
 
-#: ex_docmd.c:1921
+#: ex_docmd.c:1924
 msgid "E492: Not an editor command"
 msgstr "E371: No es un comando del editor."
 
-#: ex_docmd.c:2028
+#: ex_docmd.c:2031
 msgid "E493: Backwards range given"
 msgstr "E493: Me ha dado un rango invertido."
 
-#: ex_docmd.c:2037
+#: ex_docmd.c:2040
 msgid "Backwards range given, OK to swap"
 msgstr "Me ha dado un rango invertido, ¿está bien intercambiarlo?"
 
-#: ex_docmd.c:2160
+#: ex_docmd.c:2163
 msgid "E494: Use w or w>>"
 msgstr "E494: Use «w» o «w>>»."
 
-#: ex_docmd.c:3786
+#: ex_docmd.c:3789
 msgid "E319: Sorry, the command is not available in this version"
 msgstr "E319: Lo siento, el comando no está disponible en esta versión."
 
-#: ex_docmd.c:3989
+#: ex_docmd.c:3992
 msgid "E172: Only one file name allowed"
 msgstr "E172: Sólo se permite un nombre de fichero."
 
-#: ex_docmd.c:4569
+#: ex_docmd.c:4572
 msgid "1 more file to edit.  Quit anyway?"
 msgstr "Un fichero más para editar. ¿Termino de todas formas?"
 
-#: ex_docmd.c:4572
+#: ex_docmd.c:4575
 #, c-format
 msgid "%d more files to edit.  Quit anyway?"
 msgstr "Hay %d ficheros más en edición. ¿Termino de todas formas?"
 
-#: ex_docmd.c:4579
+#: ex_docmd.c:4582
 msgid "E173: 1 more file to edit"
 msgstr "E173: Un fichero más para editar."
 
-#: ex_docmd.c:4581
+#: ex_docmd.c:4584
 #, c-format
 msgid "E173: %ld more files to edit"
 msgstr "E173: Hay %ld ficheros en edición."
 
-#: ex_docmd.c:4676
+#: ex_docmd.c:4679
 msgid "E174: Command already exists: add ! to replace it"
 msgstr "E174: El comando ya existe. Añada «!» para reemplazarlo."
 
-#: ex_docmd.c:4787
+#: ex_docmd.c:4790
 msgid ""
 "\n"
 "    Name        Args Range Complete  Definition"
@@ -1266,191 +1269,191 @@ msgstr ""
 "\n"
 "    Nombre      Args Rango Completar  Definición"
 
-#: ex_docmd.c:4876
+#: ex_docmd.c:4879
 msgid "No user-defined commands found"
 msgstr "No se han encontrado comandos definidos por el usuario"
 
-#: ex_docmd.c:4908
+#: ex_docmd.c:4911
 msgid "E175: No attribute specified"
 msgstr "E175: No se ha especificado el atributo."
 
-#: ex_docmd.c:4960
+#: ex_docmd.c:4963
 msgid "E176: Invalid number of arguments"
 msgstr "E176: El número de argumentos no es válido."
 
-#: ex_docmd.c:4975
+#: ex_docmd.c:4978
 msgid "E177: Count cannot be specified twice"
 msgstr "E177: El recuento no se puede especificar dos veces."
 
-#: ex_docmd.c:4985
+#: ex_docmd.c:4988
 msgid "E178: Invalid default value for count"
 msgstr "E178: El valor predeterminado para el recuento no es válido."
 
-#: ex_docmd.c:5016
+#: ex_docmd.c:5019
 msgid "E179: argument required for complete"
 msgstr "E179: se necesita un argumento para completar."
 
-#: ex_docmd.c:5048
+#: ex_docmd.c:5051
 #, c-format
 msgid "E180: Invalid complete value: %s"
 msgstr "E180: El valor para completar no es válido: %s."
 
-#: ex_docmd.c:5057
+#: ex_docmd.c:5060
 msgid "E468: Completion argument only allowed for custom completion"
 msgstr ""
 "E468: El argumento de finalización solo se permite en finalizaciones "
 "definidas por el usuario."
 
-#: ex_docmd.c:5063
+#: ex_docmd.c:5066
 msgid "E467: Custom completion requires a function argument"
 msgstr ""
 "E467: Las finalizatines definidad por el usuario requieren de un argumento "
 "de función."
 
-#: ex_docmd.c:5074
+#: ex_docmd.c:5077
 #, c-format
 msgid "E181: Invalid attribute: %s"
 msgstr "E181: El atributo no es válido: %s"
 
-#: ex_docmd.c:5117
+#: ex_docmd.c:5120
 msgid "E182: Invalid command name"
 msgstr "E182: El nombre de comando no es válido."
 
-#: ex_docmd.c:5132
+#: ex_docmd.c:5135
 msgid "E183: User defined commands must start with an uppercase letter"
 msgstr ""
 "E183: Los comandos definidos por el usuario deben comenzar con una letra "
 "mayúscula."
 
-#: ex_docmd.c:5203
+#: ex_docmd.c:5206
 #, c-format
 msgid "E184: No such user-defined command: %s"
 msgstr "E184: No existe tal comando definido por el usuario: %s"
 
-#: ex_docmd.c:5664
+#: ex_docmd.c:5667
 #, c-format
 msgid "E185: Cannot find color scheme %s"
 msgstr "E185: No se puede encontrar el esquema de colores %s"
 
-#: ex_docmd.c:5672
+#: ex_docmd.c:5675
 msgid "Greetings, Vim user!"
 msgstr "¡Saludos, usuario de Vim!"
 
-#: ex_docmd.c:6389
+#: ex_docmd.c:6396
 msgid "Edit File in new window"
 msgstr "Editar fichero en una ventana nueva"
 
-#: ex_docmd.c:6684
+#: ex_docmd.c:6697
 msgid "No swap file"
 msgstr "No hay fichero de intercambio"
 
-#: ex_docmd.c:6788
+#: ex_docmd.c:6801
 msgid "Append File"
 msgstr "Añadir fichero"
 
-#: ex_docmd.c:6852
+#: ex_docmd.c:6865
 msgid "E186: No previous directory"
 msgstr "E186: No hay directorio previo."
 
-#: ex_docmd.c:6934
+#: ex_docmd.c:6947
 msgid "E187: Unknown"
 msgstr "E187: Desconocido."
 
-#: ex_docmd.c:7019
+#: ex_docmd.c:7032
 msgid "E465: :winsize requires two number arguments"
 msgstr "E465: «:winsize» requiere de dos argumentos numéricos."
 
-#: ex_docmd.c:7075
+#: ex_docmd.c:7088
 #, c-format
 msgid "Window position: X %d, Y %d"
 msgstr "Posición de la ventana: X %d, Y %d"
 
-#: ex_docmd.c:7080
+#: ex_docmd.c:7093
 msgid "E188: Obtaining window position not implemented for this platform"
 msgstr ""
 "E188: La obtención de la posición de la ventana no está implementada en esta "
 "plataforma."
 
-#: ex_docmd.c:7090
+#: ex_docmd.c:7103
 msgid "E466: :winpos requires two number arguments"
 msgstr "E466: «:winpos» require de dos argumentos numéricos."
 
-#: ex_docmd.c:7368
+#: ex_docmd.c:7381
 msgid "Save Redirection"
 msgstr "Guardar redirección."
 
-#: ex_docmd.c:7558
+#: ex_docmd.c:7571
 msgid "Save View"
 msgstr "Guardar vista"
 
-#: ex_docmd.c:7559
+#: ex_docmd.c:7572
 msgid "Save Session"
 msgstr "Guardar sesión"
 
-#: ex_docmd.c:7561
+#: ex_docmd.c:7574
 msgid "Save Setup"
 msgstr "Guardar configuración"
 
-#: ex_docmd.c:7713
+#: ex_docmd.c:7726
 #, c-format
 msgid "E189: \"%s\" exists (add ! to override)"
 msgstr "E189: \"%s\" ya existe (añada ! para sobreescribir.)"
 
-#: ex_docmd.c:7718
+#: ex_docmd.c:7731
 #, c-format
 msgid "E190: Cannot open \"%s\" for writing"
 msgstr "E190: No se puede abrir «%s» para escritura"
 
 #  set mark
 #. set mark
-#: ex_docmd.c:7742
+#: ex_docmd.c:7755
 msgid "E191: Argument must be a letter or forward/backward quote"
 msgstr ""
 "E191: El argumento debe ser una letra o un apóstrofo/apóstrofo invertido"
 
-#: ex_docmd.c:7784
+#: ex_docmd.c:7797
 msgid "E192: Recursive use of :normal too deep"
 msgstr "E192: Uso recursivo demasiado profundo de «:normal»."
 
-#: ex_docmd.c:8302
+#: ex_docmd.c:8315
 msgid "E194: No alternate file name to substitute for '#'"
 msgstr "E194: No hay un nombre de fichero alternativo que sustituya a «#»."
 
-#: ex_docmd.c:8333
+#: ex_docmd.c:8346
 msgid "E495: no autocommand file name to substitute for \"<afile>\""
 msgstr ""
 "E495: No ha dado un nombre de fichero de autocomandos para sustituir a "
 "\"<afile>\""
 
-#: ex_docmd.c:8341
+#: ex_docmd.c:8354
 msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
 msgstr ""
 "E496: No existe un «buffer» de autocomando para sustituir por \"<abuf>\""
 
-#: ex_docmd.c:8352
+#: ex_docmd.c:8365
 msgid "E497: no autocommand match name to substitute for \"<amatch>\""
 msgstr ""
 "E497: Ningún nombre de autocomando concuerda para sustituir «<amatch>»."
 
-#: ex_docmd.c:8362
+#: ex_docmd.c:8375
 msgid "E498: no :source file name to substitute for \"<sfile>\""
 msgstr ""
 "E498: No hay un nombre de fichero «:source» que sustituya a \"<sfile>\"."
 
-#: ex_docmd.c:8403
+#: ex_docmd.c:8416
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
 msgstr "E499: Un nombre de fichero vacio solo funciona con \":p:h\"."
 
-#: ex_docmd.c:8405
+#: ex_docmd.c:8418
 msgid "E500: Evaluates to an empty string"
 msgstr "E500: La expresión evalua a un «string» vacio."
 
-#: ex_docmd.c:9360
+#: ex_docmd.c:9389
 msgid "E195: Cannot open viminfo file for reading"
 msgstr "E195: No se puede abrir el fichero «viminfo» para lectura."
 
-#: ex_docmd.c:9533
+#: ex_docmd.c:9562
 msgid "E196: No digraphs in this version"
 msgstr "E196: No hay dígrafos en esta versión."
 
@@ -1511,7 +1514,7 @@ msgstr "Exepción."
 msgid "Error and interrupt"
 msgstr "Error e interrupción"
 
-#: ex_eval.c:754 gui.c:4381
+#: ex_eval.c:754 gui.c:4384
 msgid "Error"
 msgstr "Error"
 
@@ -1593,19 +1596,19 @@ msgstr "E602: :endtry sin un :try"
 msgid "E193: :endfunction not inside a function"
 msgstr "E193: «:endfunction» no está dentro de una función."
 
-#: ex_getln.c:3296
+#: ex_getln.c:3299
 msgid "tagname"
 msgstr "Nombre del «tag»"
 
-#: ex_getln.c:3299
+#: ex_getln.c:3302
 msgid " kind file\n"
 msgstr " tipo de fichero\n"
 
-#: ex_getln.c:4752
+#: ex_getln.c:4768
 msgid "'history' option is zero"
 msgstr "La opción 'history' es cero."
 
-#: ex_getln.c:5023
+#: ex_getln.c:5039
 #, c-format
 msgid ""
 "\n"
@@ -1614,274 +1617,274 @@ msgstr ""
 "\n"
 "# Historia de «%s» (de lo más nuevo a lo más antiguo):\n"
 
-#: ex_getln.c:5024
+#: ex_getln.c:5040
 msgid "Command Line"
 msgstr "Línea de comandos"
 
-#: ex_getln.c:5025
+#: ex_getln.c:5041
 msgid "Search String"
 msgstr "Cadena de búsqueda"
 
-#: ex_getln.c:5026
+#: ex_getln.c:5042
 msgid "Expression"
 msgstr "Expresión"
 
-#: ex_getln.c:5027
+#: ex_getln.c:5043
 msgid "Input Line"
 msgstr "Línea de entrada"
 
-#: ex_getln.c:5065
+#: ex_getln.c:5081
 msgid "E198: cmd_pchar beyond the command length"
 msgstr "E198: «cmd_pchar» más allá de la longitud del comando."
 
-#: ex_getln.c:5242
+#: ex_getln.c:5258
 msgid "E199: Active window or buffer deleted"
 msgstr "E199: Se ha suprimido la ventana o el buffer activos."
 
-#: fileio.c:377
+#: fileio.c:378
 msgid "Illegal file name"
 msgstr "Nombre de fichero ilegal"
 
-#: fileio.c:401 fileio.c:535 fileio.c:2913 fileio.c:2954
+#: fileio.c:402 fileio.c:540 fileio.c:2925 fileio.c:2966
 msgid "is a directory"
 msgstr "es un directorio"
 
-#: fileio.c:403
+#: fileio.c:404
 msgid "is not a file"
 msgstr "no es un fichero"
 
-#: fileio.c:557 fileio.c:4131
+#: fileio.c:562 fileio.c:4143
 msgid "[New File]"
 msgstr "[Fichero nuevo]"
 
-#: fileio.c:590
+#: fileio.c:595
 msgid "[Permission Denied]"
 msgstr "[Permiso negado]"
 
-#: fileio.c:694
+#: fileio.c:706
 msgid "E200: *ReadPre autocommands made the file unreadable"
 msgstr "E200: Los autocomandos «*ReadPre» hicieron ilegible al fichero."
 
-#: fileio.c:696
+#: fileio.c:708
 msgid "E201: *ReadPre autocommands must not change current buffer"
 msgstr "E201: Los autocomandos «*ReadPre» no deben cambiar el buffer en curso."
 
-#: fileio.c:717
+#: fileio.c:729
 msgid "Vim: Reading from stdin...\n"
 msgstr "Vim: leyendo la entrada estándar...\n"
 
-#: fileio.c:723
+#: fileio.c:735
 msgid "Reading from stdin..."
 msgstr "Leyendo la entrada estándar..."
 
 #  Re-opening the original file failed!
 #. Re-opening the original file failed!
-#: fileio.c:1000
+#: fileio.c:1012
 msgid "E202: Conversion made file unreadable!"
 msgstr "E202: ¡La conversión ha hecho el fichero ilegible!"
 
-#: fileio.c:2090
+#: fileio.c:2102
 msgid "[fifo/socket]"
 msgstr "[fifo/socket]"
 
-#: fileio.c:2097
+#: fileio.c:2109
 msgid "[fifo]"
 msgstr "[fifo]"
 
-#: fileio.c:2104
+#: fileio.c:2116
 msgid "[socket]"
 msgstr "[socket]"
 
-#: fileio.c:2112
+#: fileio.c:2124
 msgid "[RO]"
 msgstr "[RO]"
 
-#: fileio.c:2122
+#: fileio.c:2134
 msgid "[CR missing]"
 msgstr "[Falta un CR]"
 
-#: fileio.c:2127
+#: fileio.c:2139
 msgid "[NL found]"
 msgstr "[Se ha encontrado un NL]"
 
-#: fileio.c:2132
+#: fileio.c:2144
 msgid "[long lines split]"
 msgstr "[he partido las líneas largas]"
 
-#: fileio.c:2138 fileio.c:4115
+#: fileio.c:2150 fileio.c:4127
 msgid "[NOT converted]"
 msgstr "[NO convertido]"
 
-#: fileio.c:2143 fileio.c:4120
+#: fileio.c:2155 fileio.c:4132
 msgid "[converted]"
 msgstr "[convertido]"
 
-#: fileio.c:2150 fileio.c:4145
+#: fileio.c:2162 fileio.c:4157
 msgid "[crypted]"
 msgstr "[encriptado]"
 
-#: fileio.c:2157
+#: fileio.c:2169
 msgid "[CONVERSION ERROR]"
 msgstr "[ERROR DE CONVERSIÓN]"
 
-#: fileio.c:2163
+#: fileio.c:2175
 #, c-format
 msgid "[ILLEGAL BYTE in line %ld]"
 msgstr "[BYTE ILEGAL en la línea %ld]"
 
-#: fileio.c:2170
+#: fileio.c:2182
 msgid "[READ ERRORS]"
 msgstr "[ERRORES DE LECTURA]"
 
-#: fileio.c:2386
+#: fileio.c:2398
 msgid "Can't find temp file for conversion"
 msgstr "No se puede encontrar el fichero temporal para la conversión."
 
-#: fileio.c:2393
+#: fileio.c:2405
 msgid "Conversion with 'charconvert' failed"
 msgstr "La conversión con '«charconvert»' ha fallado."
 
-#: fileio.c:2396
+#: fileio.c:2408
 msgid "can't read output of 'charconvert'"
 msgstr "No puedo leer la salida de «charconvert»."
 
-#: fileio.c:2796
+#: fileio.c:2808
 msgid "E203: Autocommands deleted or unloaded buffer to be written"
 msgstr ""
 "E203: Los autocomandos fueron suprimidos o el «buffer» se descargó para ser "
 "grabado en disco."
 
-#: fileio.c:2819
+#: fileio.c:2831
 msgid "E204: Autocommand changed number of lines in unexpected way"
 msgstr ""
 "E204: El autocomando ha cambiado el número de líneas en forma inesperada."
 
-#: fileio.c:2857
+#: fileio.c:2869
 msgid "NetBeans dissallows writes of unmodified buffers"
 msgstr "NetBeans no permite que se escriba sobre «buffers» sin modificar."
 
-#: fileio.c:2865
+#: fileio.c:2877
 msgid "Partial writes disallowed for NetBeans buffers"
 msgstr "No se permite la escritura parcial de los «buffers» de NetBeans."
 
-#: fileio.c:2919 fileio.c:2937
+#: fileio.c:2931 fileio.c:2949
 msgid "is not a file or writable device"
 msgstr "no es un fichero o dispositivo en el que se pueda escribir."
 
-#: fileio.c:2989
+#: fileio.c:3001
 msgid "is read-only (add ! to override)"
 msgstr "Es de solo lectura (añada ! para obreescribir)."
 
-#: fileio.c:3335
+#: fileio.c:3347
 msgid "E506: Can't write to backup file (add ! to override)"
 msgstr ""
 "E506: No puedo escribir al fichero de respaldo (añada ! para forzar el "
 "comando)."
 
-#: fileio.c:3347
+#: fileio.c:3359
 msgid "E507: Close error for backup file (add ! to override)"
 msgstr ""
 "E507: Error al cerrar el fichero de la copia de respaldo (añada ! para "
 "forzar el comando)."
 
-#: fileio.c:3349
+#: fileio.c:3361
 msgid "E508: Can't read file for backup (add ! to override)"
 msgstr ""
 "E508: No puedo leer el fichero para crear la copia de respaldo (añada ! para "
 "forzar el comando)."
 
-#: fileio.c:3365
+#: fileio.c:3377
 msgid "E509: Cannot create backup file (add ! to override)"
 msgstr ""
 "E509: No puedo crear el fichero para la copia de respaldo (añada ! para "
 "forzar el comando)."
 
-#: fileio.c:3468
+#: fileio.c:3480
 msgid "E510: Can't make backup file (add ! to override)"
 msgstr ""
 "E510: No puedo hacer un fichero de copia de respaldo (añada ! para forzar el "
 "comando)."
 
-#: fileio.c:3530
+#: fileio.c:3542
 msgid "E460: The resource fork would be lost (add ! to override)"
 msgstr ""
 "E460: Se perdería el segmento («fork») de recursos! (añada ! para forzar el "
 "comando)."
 
-#: fileio.c:3640
+#: fileio.c:3652
 msgid "E214: Can't find temp file for writing"
 msgstr "E214: No puedo encontrar el fichero temporal para escribir en él."
 
-#: fileio.c:3658
+#: fileio.c:3670
 msgid "E213: Cannot convert (add ! to write without conversion)"
 msgstr ""
 "E213: No puedo convertirlo (añada ! para escribir el fichero sin conversión)."
 
-#: fileio.c:3693
+#: fileio.c:3705
 msgid "E166: Can't open linked file for writing"
 msgstr "E166: No puedo abrir el fichero enlazado para escribir en él."
 
-#: fileio.c:3697
+#: fileio.c:3709
 msgid "E212: Can't open file for writing"
 msgstr "E212: No puedo abrir el fichero para escribir en él."
 
-#: fileio.c:3959
+#: fileio.c:3971
 msgid "E667: Fsync failed"
 msgstr "E667: falló «fsync»"
 
-#: fileio.c:3966
+#: fileio.c:3978
 msgid "E512: Close failed"
 msgstr "E314: Falló el cierre del fichero."
 
-#: fileio.c:4037
+#: fileio.c:4049
 msgid "E513: write error, conversion failed"
 msgstr "E513: Error de escritura, la conversión falló."
 
-#: fileio.c:4043
+#: fileio.c:4055
 msgid "E514: write error (file system full?)"
 msgstr "E514: Error de escritura (¿Sistema de ficheros lleno?"
 
-#: fileio.c:4110
+#: fileio.c:4122
 msgid " CONVERSION ERROR"
 msgstr "ERROR DE CONVERSIÓN"
 
-#: fileio.c:4126
+#: fileio.c:4138
 msgid "[Device]"
 msgstr "[Dispositivo]"
 
-#: fileio.c:4131
+#: fileio.c:4143
 msgid "[New]"
 msgstr "[Nuevo]"
 
-#: fileio.c:4153
+#: fileio.c:4165
 msgid " [a]"
 msgstr " [a]"
 
-#: fileio.c:4153
+#: fileio.c:4165
 msgid " appended"
 msgstr " añadido"
 
-#: fileio.c:4155
+#: fileio.c:4167
 msgid " [w]"
 msgstr " [w]"
 
-#: fileio.c:4155
+#: fileio.c:4167
 msgid " written"
 msgstr " escritos"
 
-#: fileio.c:4205
+#: fileio.c:4217
 msgid "E205: Patchmode: can't save original file"
 msgstr "E205: Modo «patch»: no se puede guardar el fichero original."
 
-#: fileio.c:4227
+#: fileio.c:4239
 msgid "E206: patchmode: can't touch empty original file"
 msgstr "E206: Modo «patch»: no se puede tocar el fichero original vacío."
 
-#: fileio.c:4242
+#: fileio.c:4254
 msgid "E207: Can't delete backup file"
 msgstr "E207: No se puede borrar el fichero de respaldo."
 
-#: fileio.c:4306
+#: fileio.c:4318
 msgid ""
 "\n"
 "WARNING: Original file may be lost or damaged\n"
@@ -1889,57 +1892,57 @@ msgstr ""
 "\n"
 "AVISO: el fichero original puede haberse perdido o haberse dañado\n"
 
-#: fileio.c:4308
+#: fileio.c:4320
 msgid "don't quit the editor until the file is successfully written!"
 msgstr "¡no salga del editor hasta que el fichero se haya escrito!"
 
-#: fileio.c:4397
+#: fileio.c:4409
 msgid "[dos]"
 msgstr "[DOS]"
 
-#: fileio.c:4397
+#: fileio.c:4409
 msgid "[dos format]"
 msgstr "[formato DOS]"
 
-#: fileio.c:4404
+#: fileio.c:4416
 msgid "[mac]"
 msgstr "[Mac]"
 
-#: fileio.c:4404
+#: fileio.c:4416
 msgid "[mac format]"
 msgstr "[formato Mac]"
 
-#: fileio.c:4411
+#: fileio.c:4423
 msgid "[unix]"
 msgstr "[UNIX]"
 
-#: fileio.c:4411
+#: fileio.c:4423
 msgid "[unix format]"
 msgstr "[formato UNIX]"
 
-#: fileio.c:4438
+#: fileio.c:4450
 msgid "1 line, "
 msgstr "1 línea, "
 
-#: fileio.c:4440
+#: fileio.c:4452
 #, c-format
 msgid "%ld lines, "
 msgstr "%ld líneas, "
 
-#: fileio.c:4443
+#: fileio.c:4455
 msgid "1 character"
 msgstr "1 carácter"
 
-#: fileio.c:4445
+#: fileio.c:4457
 #, c-format
 msgid "%ld characters"
 msgstr "%ld caracteres"
 
-#: fileio.c:4455
+#: fileio.c:4467
 msgid "[noeol]"
 msgstr "[no hay fin de línea]"
 
-#: fileio.c:4455
+#: fileio.c:4467
 msgid "[Incomplete last line]"
 msgstr "[Última línea incompleta]"
 
@@ -1949,39 +1952,39 @@ msgstr "[Última línea incompleta]"
 #. don't overwrite messages here
 #. must give this prompt
 #. don't use emsg() here, don't want to flush the buffers
-#: fileio.c:4474
+#: fileio.c:4486
 msgid "WARNING: The file has been changed since reading it!!!"
 msgstr "ADVERTENCIA: ¡¡¡El fichero ha cambiado desde que se leyó!!!"
 
-#: fileio.c:4476
+#: fileio.c:4488
 msgid "Do you really want to write to it"
 msgstr "¿Quiere realmente escribir a él?"
 
-#: fileio.c:5726
+#: fileio.c:5741
 #, c-format
 msgid "E208: Error writing to \"%s\""
 msgstr "E208: Error al escribir a «%s»."
 
-#: fileio.c:5733
+#: fileio.c:5748
 #, c-format
 msgid "E209: Error closing \"%s\""
 msgstr "E209: Error al cerrar «%s»."
 
-#: fileio.c:5736
+#: fileio.c:5751
 #, c-format
 msgid "E210: Error reading \"%s\""
 msgstr "E210: Error al leer «%s»."
 
-#: fileio.c:5970
+#: fileio.c:5985
 msgid "E246: FileChangedShell autocommand deleted buffer"
 msgstr "E246: el autocomando «FileChangedShell» ha borrado el buffer."
 
-#: fileio.c:5977
+#: fileio.c:5992
 #, c-format
 msgid "E211: Warning: File \"%s\" no longer available"
 msgstr "E211: Advertencia: el fichero «%s» ya no está disponible"
 
-#: fileio.c:5991
+#: fileio.c:6006
 #, c-format
 msgid ""
 "W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
@@ -1990,35 +1993,35 @@ msgstr ""
 "W12: Advertencia: el fichero «%s» ha cambiado y el buffer fue cambiado "
 "también en Vim."
 
-#: fileio.c:5994
+#: fileio.c:6009
 #, c-format
 msgid "W11: Warning: File \"%s\" has changed since editing started"
 msgstr ""
 "W11: Advertencia: el fichero «%s» ha cambiado desde que comenzó la edición."
 
-#: fileio.c:5996
+#: fileio.c:6011
 #, c-format
 msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
 msgstr ""
 "W16: Advertencia: el modo del fichero «%s» ha cambiado desde que comenzó la "
 "edición."
 
-#: fileio.c:6006
+#: fileio.c:6021
 #, c-format
 msgid "W13: Warning: File \"%s\" has been created after editing started"
 msgstr ""
 "W13: Advertencia: el fichero «%s» ha sido creado después de comenzar la "
 "edición."
 
-#: fileio.c:6019
+#: fileio.c:6034
 msgid "See \":help W11\" for more info."
 msgstr "Vea «:help w11» para más información."
 
-#: fileio.c:6033
+#: fileio.c:6048
 msgid "Warning"
 msgstr "Advertencia"
 
-#: fileio.c:6034
+#: fileio.c:6049
 msgid ""
 "&OK\n"
 "&Load File"
@@ -2026,45 +2029,45 @@ msgstr ""
 "&OK\n"
 "&Cargar fichero"
 
-#: fileio.c:6140
+#: fileio.c:6155
 #, c-format
 msgid "E462: Could not prepare for reloading \"%s\""
 msgstr "E462: No pude prepararme para recargar a \"%s\"."
 
-#: fileio.c:6159
+#: fileio.c:6174
 #, c-format
 msgid "E321: Could not reload \"%s\""
 msgstr "E321: No se pudo recargar «%s»."
 
-#: fileio.c:6740
+#: fileio.c:6755
 msgid "--Deleted--"
 msgstr "--Suprimido--"
 
 #  the group doesn't exist
 #. the group doesn't exist
-#: fileio.c:6900
+#: fileio.c:6915
 #, c-format
 msgid "E367: No such group: \"%s\""
 msgstr "E367: No existe el grupo: «%s»."
 
-#: fileio.c:7026
+#: fileio.c:7041
 #, c-format
 msgid "E215: Illegal character after *: %s"
 msgstr "E215: Carácter ilegal después de *: «%s»."
 
-#: fileio.c:7038
+#: fileio.c:7053
 #, c-format
 msgid "E216: No such event: %s"
 msgstr "E216: No existe tal hecho: «%s»"
 
-#: fileio.c:7040
+#: fileio.c:7055
 #, c-format
 msgid "E216: No such group or event: %s"
 msgstr "E216: No existe tal grupo o evento: %s"
 
 #  Highlight title
 #. Highlight title
-#: fileio.c:7198
+#: fileio.c:7213
 msgid ""
 "\n"
 "--- Auto-Commands ---"
@@ -2072,42 +2075,42 @@ msgstr ""
 "\n"
 "--- Auto-comandos ---"
 
-#: fileio.c:7469
+#: fileio.c:7484
 msgid "E217: Can't execute autocommands for ALL events"
 msgstr ""
 "E217: No se pueden ejecutar los autocomandos para TODOS los eventos de "
 "ejecución."
 
-#: fileio.c:7492
+#: fileio.c:7507
 msgid "No matching autocommands"
 msgstr "Ningún autocomando coincide."
 
-#: fileio.c:7813
+#: fileio.c:7828
 msgid "E218: autocommand nesting too deep"
 msgstr "E218: El autocomando se anida en demasiados bucles."
 
-#: fileio.c:8088
+#: fileio.c:8103
 #, c-format
 msgid "%s Auto commands for \"%s\""
 msgstr "%s Auto comandos para «%s»"
 
-#: fileio.c:8096
+#: fileio.c:8111
 #, c-format
 msgid "Executing %s"
 msgstr "Ejecutando %s"
 
 #  always scroll up, don't overwrite
 #. always scroll up, don't overwrite
-#: fileio.c:8164
+#: fileio.c:8179
 #, c-format
 msgid "autocommand %s"
 msgstr "autocomando %s"
 
-#: fileio.c:8731
+#: fileio.c:8746
 msgid "E219: Missing {."
 msgstr "E219: Falta un {."
 
-#: fileio.c:8733
+#: fileio.c:8748
 msgid "E220: Missing }."
 msgstr "E220: Falta un }."
 
@@ -2127,39 +2130,39 @@ msgstr "E351: No puedo borrar el pliegue
 msgid "E222: Add to read buffer"
 msgstr "E222: Añadir al «buffer» de lectura"
 
-#: getchar.c:2198
+#: getchar.c:2208
 msgid "E223: recursive mapping"
 msgstr "E223: asociación recursiva"
 
-#: getchar.c:3077
+#: getchar.c:3087
 #, c-format
 msgid "E224: global abbreviation already exists for %s"
 msgstr "E224: ya existe una abreviatura global para «%s»."
 
-#: getchar.c:3080
+#: getchar.c:3090
 #, c-format
 msgid "E225: global mapping already exists for %s"
 msgstr "E225: ya existe una asociación global para «%s»."
 
-#: getchar.c:3212
+#: getchar.c:3222
 #, c-format
 msgid "E226: abbreviation already exists for %s"
 msgstr "E226: ya existe una abreviatura para «%s»."
 
-#: getchar.c:3215
+#: getchar.c:3225
 #, c-format
 msgid "E227: mapping already exists for %s"
 msgstr "E227: ya existe una asociación para «%s»."
 
-#: getchar.c:3279
+#: getchar.c:3289
 msgid "No abbreviation found"
 msgstr "No encontré ninguna abreviatura."
 
-#: getchar.c:3281
+#: getchar.c:3291
 msgid "No mapping found"
 msgstr "No encontré ninguna asociación."
 
-#: getchar.c:4173
+#: getchar.c:4183
 msgid "E228: makemap: Illegal mode"
 msgstr "E228: «makemap»: modo ilegal."
 
@@ -2186,7 +2189,7 @@ msgstr "E231: El valor de «guifontwide» no es válido."
 msgid "E599: Value of 'imactivatekey' is invalid"
 msgstr "E599: El valor de «imactivatekey» no es válido."
 
-#: gui.c:4061
+#: gui.c:4064
 #, c-format
 msgid "E254: Cannot allocate color %s"
 msgstr "E254: No se puede asignar el color «%s»."
@@ -2229,7 +2232,7 @@ msgstr "Scrollbar Widget: No pude obtener la geometría del «pixmap» miniatura."
 msgid "Vim dialog"
 msgstr "Diálogo de Vim"
 
-#: gui_beval.c:101 gui_w32.c:3945
+#: gui_beval.c:101 gui_w32.c:3978
 msgid "E232: Cannot create BalloonEval with both message and callback"
 msgstr ""
 "E232: No puedo crear un «BalloonEval» que contenga tanto el mensaje como el "
@@ -2239,7 +2242,7 @@ msgstr ""
 msgid "Vim dialog..."
 msgstr "Diálogo de Vim..."
 
-#: gui_gtk.c:2060 message.c:2999
+#: gui_gtk.c:2060 message.c:3005
 msgid ""
 "&Yes\n"
 "&No\n"
@@ -2365,16 +2368,25 @@ msgstr ""
 "\n"
 "Enviando mensaje para terminar los procesos dependientes («hijo»).\n"
 
-#: gui_w32.c:834
+#: gui_w32.c:839
+#, c-format
+msgid "E671: Cannot find window title \"%s\""
+msgstr "E671: No puedo encontrar el título de la ventana «%s»."
+
+#: gui_w32.c:847
 #, c-format
 msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
 msgstr "E243: Argumento no admitido: «-%s»; use la versión OLE."
 
-#: gui_w48.c:2147
+#: gui_w32.c:1100
+msgid "E672: Unable to open window inside MDI application"
+msgstr "E672: No puedo abrir una ventana dentro de la aplicación MDI."
+
+#: gui_w48.c:2163
 msgid "Find string (use '\\\\' to find  a '\\')"
 msgstr "Buscar cadena (use «\\\\» para encontrar un «\\»)"
 
-#: gui_w48.c:2172
+#: gui_w48.c:2188
 msgid "Find & Replace (use '\\\\' to find  a '\\')"
 msgstr "Buscar y reemplazar (use «\\\\» para encontra una «\\»)"
 
@@ -3002,47 +3014,47 @@ msgstr ""
 msgid "Invalid argument for"
 msgstr "Argumento no válido para"
 
-#: main.c:466
+#: main.c:469
 msgid "This Vim was not compiled with the diff feature."
 msgstr "Este Vim no ha sido compilado con la característica «diff»."
 
-#: main.c:932
+#: main.c:935
 msgid "Attempt to open script file again: \""
 msgstr "Intento de abrir de nuevo el fichero «script»: «"
 
-#: main.c:941
+#: main.c:944
 msgid "Cannot open for reading: \""
 msgstr "No puedo abrir para leer: «"
 
-#: main.c:985
+#: main.c:988
 msgid "Cannot open for script output: \""
 msgstr "No puedo abrir para escribir la salida del «script»: «"
 
-#: main.c:1132
+#: main.c:1135
 #, c-format
 msgid "%d files to edit\n"
 msgstr "%d ficheros que editar\n"
 
-#: main.c:1233
+#: main.c:1236
 msgid "Vim: Warning: Output is not to a terminal\n"
 msgstr "Vim: Advertencia: la salida no es a un terminal\n"
 
-#: main.c:1235
+#: main.c:1238
 msgid "Vim: Warning: Input is not from a terminal\n"
 msgstr "Vim: Advertencia: la entrada no es desde un terminal\n"
 
 #  just in case..
 #. just in case..
-#: main.c:1297
+#: main.c:1306
 msgid "pre-vimrc command line"
 msgstr "Línea de comandos anter de «vimrc»"
 
-#: main.c:1338
+#: main.c:1347
 #, c-format
 msgid "E282: Cannot read from \"%s\""
 msgstr "E282: No puedo leer desde «%s»"
 
-#: main.c:2411
+#: main.c:2420
 msgid ""
 "\n"
 "More info with: \"vim -h\"\n"
@@ -3050,23 +3062,23 @@ msgstr ""
 "\n"
 "Más información con: «vim -h»\n"
 
-#: main.c:2444
+#: main.c:2453
 msgid "[file ..]       edit specified file(s)"
 msgstr "[fichero ...]   edita el/los fichero(s) especificado(s)"
 
-#: main.c:2445
+#: main.c:2454
 msgid "-               read text from stdin"
 msgstr "-               lee texto de la entrada estándar"
 
-#: main.c:2446
+#: main.c:2455
 msgid "-t tag          edit file where tag is defined"
 msgstr "-t «tag»        edita el fichero donde está definido «tag»"
 
-#: main.c:2448
+#: main.c:2457
 msgid "-q [errorfile]  edit file with first error"
 msgstr "-q [fich. err.] edita el fichero con el primer error"
 
-#: main.c:2457
+#: main.c:2466
 msgid ""
 "\n"
 "\n"
@@ -3076,11 +3088,11 @@ msgstr ""
 "\n"
 "Uso:"
 
-#: main.c:2460
+#: main.c:2469
 msgid " vim [arguments] "
 msgstr " vim [argumentos]"
 
-#: main.c:2464
+#: main.c:2473
 msgid ""
 "\n"
 "   or:"
@@ -3088,7 +3100,7 @@ msgstr ""
 "\n"
 "  o:"
 
-#: main.c:2467
+#: main.c:2476
 msgid ""
 "\n"
 "\n"
@@ -3098,258 +3110,258 @@ msgstr ""
 "\n"
 "Argumentos:\n"
 
-#: main.c:2468
+#: main.c:2477
 msgid "--\t\t\tOnly file names after this"
 msgstr "--\t\t\tSólo nombres de ficheros después de esto"
 
-#: main.c:2470
+#: main.c:2479
 msgid "--literal\t\tDon't expand wildcards"
 msgstr "--literal\t\tNo expandir comodines"
 
-#: main.c:2473
+#: main.c:2482
 msgid "-register\t\tRegister this gvim for OLE"
 msgstr "-register\t\tRegistrar este «gvim» para «OLE»"
 
-#: main.c:2474
+#: main.c:2483
 msgid "-unregister\t\tUnregister gvim for OLE"
 msgstr "-unregister\t\tSuprimir el registro de gvim para OLE"
 
-#: main.c:2477
+#: main.c:2486
 msgid "-g\t\t\tRun using GUI (like \"gvim\")"
 msgstr "-g\t\t\tEjecutar usando el GUI (como «gvim»)"
 
-#: main.c:2478
+#: main.c:2487
 msgid "-f  or  --nofork\tForeground: Don't fork when starting GUI"
 msgstr ""
 "-f  o  --nofork\tPrimer plano: No separarse («fork») cuando se inicia la "
 "interface gráfica (GUI)."
 
-#: main.c:2480
+#: main.c:2489
 msgid "-v\t\t\tVi mode (like \"vi\")"
 msgstr "-v\t\t\tModo Vi (como «vi»)"
 
-#: main.c:2481
-msgid "-e\t\t\tEx mode (like \"ex\")"
-msgstr "-e\t\t\tModo Ex (como «ex»)"
-
-#: main.c:2482
-msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
-msgstr "-s\t\t\tModo silencioso o «batch» (sólo para «ex»)"
-
-#: main.c:2484
-msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
-msgstr "-d\t\t\tModo «diff» (como «vimdiff»)"
-
-#: main.c:2486
-msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
-msgstr "-y\t\t\tModo fácil (como «evim», sin modo)"
-
-#: main.c:2487
-msgid "-R\t\t\tReadonly mode (like \"view\")"
-msgstr "-R\t\t\tModo de sólo lectura (como «view»)"
-
-#: main.c:2488
-msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
-msgstr "-Z\t\t\tModo restringido (como «rvim»)"
-
-#: main.c:2489
-msgid "-m\t\t\tModifications (writing files) not allowed"
-msgstr "-m\t\t\tModificaciones no permitidas (escritura de ficheros)"
-
 #: main.c:2490
-msgid "-M\t\t\tModifications in text not allowed"
-msgstr "-M\t\t\tModificaciones en el texto no permitidas"
+msgid "-e\t\t\tEx mode (like \"ex\")"
+msgstr "-e\t\t\tModo Ex (como «ex»)"
 
 #: main.c:2491
-msgid "-b\t\t\tBinary mode"
-msgstr "-b\t\t\tModo binario"
+msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
+msgstr "-s\t\t\tModo silencioso o «batch» (sólo para «ex»)"
 
 #: main.c:2493
-msgid "-l\t\t\tLisp mode"
-msgstr "-l\t\t\tModo lisp"
+msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
+msgstr "-d\t\t\tModo «diff» (como «vimdiff»)"
 
 #: main.c:2495
-msgid "-C\t\t\tCompatible with Vi: 'compatible'"
-msgstr "-C\t\t\tCompatible con Vi: 'compatible'"
+msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
+msgstr "-y\t\t\tModo fácil (como «evim», sin modo)"
 
 #: main.c:2496
-msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
-msgstr "-N\t\t\tNo totalmente compatible con Vi: 'nocompatible'"
+msgid "-R\t\t\tReadonly mode (like \"view\")"
+msgstr "-R\t\t\tModo de sólo lectura (como «view»)"
 
 #: main.c:2497
-msgid "-V[N]\t\tVerbose level"
-msgstr "-V[N]\t\tNivel de detalle de la ejecución"
+msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
+msgstr "-Z\t\t\tModo restringido (como «rvim»)"
 
 #: main.c:2498
-msgid "-D\t\t\tDebugging mode"
-msgstr "-D\t\t\tModo de depuración"
+msgid "-m\t\t\tModifications (writing files) not allowed"
+msgstr "-m\t\t\tModificaciones no permitidas (escritura de ficheros)"
 
 #: main.c:2499
+msgid "-M\t\t\tModifications in text not allowed"
+msgstr "-M\t\t\tModificaciones en el texto no permitidas"
+
+#: main.c:2500
+msgid "-b\t\t\tBinary mode"
+msgstr "-b\t\t\tModo binario"
+
+#: main.c:2502
+msgid "-l\t\t\tLisp mode"
+msgstr "-l\t\t\tModo lisp"
+
+#: main.c:2504
+msgid "-C\t\t\tCompatible with Vi: 'compatible'"
+msgstr "-C\t\t\tCompatible con Vi: 'compatible'"
+
+#: main.c:2505
+msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
+msgstr "-N\t\t\tNo totalmente compatible con Vi: 'nocompatible'"
+
+#: main.c:2506
+msgid "-V[N]\t\tVerbose level"
+msgstr "-V[N]\t\tNivel de detalle de la ejecución"
+
+#: main.c:2507
+msgid "-D\t\t\tDebugging mode"
+msgstr "-D\t\t\tModo de depuración"
+
+#: main.c:2508
 msgid "-n\t\t\tNo swap file, use memory only"
 msgstr "-n\t\t\tSin fichero de intercambio, usa sólo la memoria"
 
-#: main.c:2500
+#: main.c:2509
 msgid "-r\t\t\tList swap files and exit"
 msgstr "-r\t\t\tDar una lista de los fichero de intercambio y salir"
 
-#: main.c:2501
+#: main.c:2510
 msgid "-r (with file name)\tRecover crashed session"
 msgstr "-r (con nombre del fichero)\tRecuperar sesión fallida"
 
-#: main.c:2502
+#: main.c:2511
 msgid "-L\t\t\tSame as -r"
 msgstr "-L\t\t\tIgual que -r"
 
-#: main.c:2504
+#: main.c:2513
 msgid "-f\t\t\tDon't use newcli to open window"
 msgstr "-f\t\t\tNo usar «newcli» para abrir la ventana"
 
-#: main.c:2505
+#: main.c:2514
 msgid "-dev <device>\t\tUse <device> for I/O"
 msgstr "-dev <dispositivo>\t\tUse <dispositivo> para E/S"
 
-#: main.c:2508
+#: main.c:2517
 msgid "-A\t\t\tstart in Arabic mode"
 msgstr "-A\t\t\tIniciar en modo árabe"
 
-#: main.c:2511
+#: main.c:2520
 msgid "-H\t\t\tStart in Hebrew mode"
 msgstr "-H\t\t\tIniciar en modo hebreo"
 
-#: main.c:2514
+#: main.c:2523
 msgid "-F\t\t\tStart in Farsi mode"
 msgstr "-F\t\t\tIniciar en modo persa (farsi)"
 
-#: main.c:2516
+#: main.c:2525
 msgid "-T <terminal>\tSet terminal type to <terminal>"
 msgstr "-T <terminal>\tDetermina el tipo de terminal a <<terminal>>"
 
-#: main.c:2517
+#: main.c:2526
 msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"
 msgstr "-u <vimrc>\t\tUsa <vimrc> en lugar de cualquier .vimrc"
 
-#: main.c:2519
+#: main.c:2528
 msgid "-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc"
 msgstr "-U <gvimrc>\t\tUsa <gvimrc> en lugar de cualquier .gvimrc"
 
-#: main.c:2521
+#: main.c:2530
 msgid "--noplugin\t\tDon't load plugin scripts"
 msgstr "--noplugin\t\tNo carga los «plugin scripts»"
 
-#: main.c:2522
+#: main.c:2531
 msgid "-o[N]\t\tOpen N windows (default: one for each file)"
 msgstr "-o[N]\t\tAbre N ventanas (valor predeterminado: una por fichero)"
 
-#: main.c:2523
+#: main.c:2532
 msgid "-O[N]\t\tLike -o but split vertically"
 msgstr "-O[N]\t\tComo «-o» pero divide las ventanas verticalmente."
 
-#: main.c:2524
+#: main.c:2533
 msgid "+\t\t\tStart at end of file"
 msgstr "+\t\t\tComienza al final del fichero"
 
-#: main.c:2525
+#: main.c:2534
 msgid "+<lnum>\t\tStart at line <lnum>"
 msgstr "+<lnum>\t\tComienza en la línea <lnum>"
 
-#: main.c:2527
+#: main.c:2536
 msgid "--cmd <command>\tExecute <command> before loading any vimrc file"
 msgstr "--cmd <comando>\tEjecuta <comando> antes de cargar algún fichero vimrc"
 
-#: main.c:2529
+#: main.c:2538
 msgid "-c <command>\t\tExecute <command> after loading the first file"
 msgstr "-c <comando>\t\tEjecuta <comando> después de cargar el primer fichero"
 
-#: main.c:2530
+#: main.c:2539
 msgid "-S <session>\t\tSource file <session> after loading the first file"
 msgstr ""
 "-S <sesión>\t\tEjecuta los comandos del fichero <sesión> después\n"
 "           \t\tde cargar el primer fichero"
 
-#: main.c:2531
+#: main.c:2540
 msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
 msgstr "-s <scriptin>\tLee los comandos en modo Normal del fichero <scriptin>"
 
-#: main.c:2532
+#: main.c:2541
 msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
 msgstr ""
 "-w <scriptout>\tAñade todos los comandos escritos al fichero <scriptout>"
 
-#: main.c:2533
+#: main.c:2542
 msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>"
 msgstr ""
 "-W <scriptout>\tGraba todos los comandos escritos al fichero <scriptout>"
 
-#: main.c:2535
+#: main.c:2544
 msgid "-x\t\t\tEdit encrypted files"
 msgstr "-x\t\t\tEdita ficheros cifrados"
 
-#: main.c:2539
+#: main.c:2548
 msgid "-display <display>\tConnect vim to this particular X-server"
 msgstr "-display <pantalla>\tConecta vim a este servidor X11 en particular"
 
-#: main.c:2541
+#: main.c:2550
 msgid "-X\t\t\tDo not connect to X server"
 msgstr "-X\t\t\tNo se conecta al servidor X11"
 
-#: main.c:2544
+#: main.c:2553
 msgid "--remote <files>\tEdit <files> in a Vim server if possible"
 msgstr ""
 "--remote <ficheros>\tEdita los <ficheros> en un servidor Vim si es posible."
 
-#: main.c:2545
+#: main.c:2554
 msgid "--remote-silent <files>  Same, don't complain if there is no server"
 msgstr ""
 "--remote-silent <ficheros>  Lo mismo pero no se queja si no existe un "
 "servidor disponible."
 
-#: main.c:2546
+#: main.c:2555
 msgid ""
 "--remote-wait <files>  As --remote but wait for files to have been edited"
 msgstr ""
 "--remote-wait <ficheros>\tComo --remote pero espera a que los ficheros "
 "terminen de editarse"
 
-#: main.c:2547
+#: main.c:2556
 msgid ""
 "--remote-wait-silent <files>  Same, don't complain if there is no server"
 msgstr ""
 "--remote-wait-silent <ficheros>  Lo mismo pero no se queja si no hay un "
 "servidor disponible."
 
-#: main.c:2548
+#: main.c:2557
 msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
 msgstr "--remote-send <teclas>\tEnvía <teclas> a un servidor Vim y sale"
 
-#: main.c:2549
+#: main.c:2558
 msgid "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"
 msgstr ""
 "--remote-expr <expr>\tEvalúa <expr> en servidor Vim e imprime el resultado"
 
-#: main.c:2550
+#: main.c:2559
 msgid "--serverlist\t\tList available Vim server names and exit"
 msgstr ""
 "--serverlist\t\tEmite una lista de los servidores Vim disponibles y sale"
 
-#: main.c:2551
+#: main.c:2560
 msgid "--servername <name>\tSend to/become the Vim server <name>"
 msgstr ""
 "--servername <nombre>\tEnvía a/se convierte en el servidor Vim de nombre "
 "<nombre>"
 
-#: main.c:2554
+#: main.c:2563
 msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
 msgstr "-i <viminfo>\t\tUsa <viminfo> en lugar de .viminfo"
 
-#: main.c:2556
+#: main.c:2565
 msgid "-h  or  --help\tPrint Help (this message) and exit"
 msgstr "-h  or  --help\tImprime la ayuda de comandos (este mensaje) y termina."
 
-#: main.c:2557
+#: main.c:2566
 msgid "--version\t\tPrint version information and exit"
 msgstr "--version\t\tImprime la información de versión y termina."
 
-#: main.c:2561
+#: main.c:2570
 msgid ""
 "\n"
 "Arguments recognised by gvim (Motif version):\n"
@@ -3357,7 +3369,7 @@ msgstr ""
 "\n"
 "Argumentos reconocidos por gvim (versión Motif):\n"
 
-#: main.c:2565
+#: main.c:2574
 msgid ""
 "\n"
 "Arguments recognised by gvim (neXtaw version):\n"
@@ -3365,7 +3377,7 @@ msgstr ""
 "\n"
 "Argumentos reconocidos por gvim (versión neXtaw):\n"
 
-#: main.c:2567
+#: main.c:2576
 msgid ""
 "\n"
 "Arguments recognised by gvim (Athena version):\n"
@@ -3373,76 +3385,76 @@ msgstr ""
 "\n"
 "Argumentos reconocidos por gvim (versión Athena):\n"
 
-#: main.c:2571
+#: main.c:2580
 msgid "-display <display>\tRun vim on <display>"
 msgstr "-display <pantalla>\tEjecuta vim en <pantalla>"
 
-#: main.c:2572
+#: main.c:2581
 msgid "-iconic\t\tStart vim iconified"
 msgstr "-iconic\t\tArranca vim «iconizado»"
 
-#: main.c:2574
+#: main.c:2583
 msgid "-name <name>\t\tUse resource as if vim was <name>"
 msgstr "-name <nombre>\t\tUsa un recurso como si vim fuese <nombre>"
 
-#: main.c:2575
+#: main.c:2584
 msgid "\t\t\t  (Unimplemented)\n"
 msgstr "\t\t\t  (Sin implementar)\n"
 
-#: main.c:2577
+#: main.c:2586
 msgid "-background <color>\tUse <color> for the background (also: -bg)"
 msgstr "-background <color>\tUsa <color> para el fondo (también: -bg)"
 
-#: main.c:2578
+#: main.c:2587
 msgid "-foreground <color>\tUse <color> for normal text (also: -fg)"
 msgstr "-foreground <color>\tUsa <color> para el texto normal (también: -fg)"
 
-#: main.c:2579 main.c:2599
+#: main.c:2588 main.c:2608
 msgid "-font <font>\t\tUse <font> for normal text (also: -fn)"
 msgstr ""
 "-font <tipo>\t\tUsa <fuente de impresión> para el texto normal (también: -fn)"
 
-#: main.c:2580
+#: main.c:2589
 msgid "-boldfont <font>\tUse <font> for bold text"
 msgstr "-boldfont <tipo>\tUsa <fuente de impresión> para texto en negrita"
 
-#: main.c:2581
+#: main.c:2590
 msgid "-italicfont <font>\tUse <font> for italic text"
 msgstr "-italicfont <tipo>\tUsa <fuente de impresión> para texto en cursiva"
 
-#: main.c:2582 main.c:2600
+#: main.c:2591 main.c:2609
 msgid "-geometry <geom>\tUse <geom> for initial geometry (also: -geom)"
 msgstr ""
 "-geometry <geom>\tUsa <geom> para la geometría inicial (también: -geom)"
 
-#: main.c:2583
+#: main.c:2592
 msgid "-borderwidth <width>\tUse a border width of <width> (also: -bw)"
 msgstr "-borderwidth <ancho>\tUsa un ancho de borde de <ancho> (también: -bw)"
 
-#: main.c:2584
+#: main.c:2593
 msgid "-scrollbarwidth <width>  Use a scrollbar width of <width> (also: -sw)"
 msgstr ""
 "-scrollbarwidth <ancho>  Usa una barra de desplazamiento de ancho <ancho> "
 "(también: -sw)"
 
-#: main.c:2586
+#: main.c:2595
 msgid "-menuheight <height>\tUse a menu bar height of <height> (also: -mh)"
 msgstr ""
 "-menuheight <alt>\tUsa una barra de menú de altura <alt> (también: -mh)"
 
-#: main.c:2588 main.c:2601
+#: main.c:2597 main.c:2610
 msgid "-reverse\t\tUse reverse video (also: -rv)"
 msgstr "-reverse\t\tUsar vídeo inverso (también: -rv)"
 
-#: main.c:2589
+#: main.c:2598
 msgid "+reverse\t\tDon't use reverse video (also: +rv)"
 msgstr "+reverse\t\tNo usar vídeo inverso (también: +rv)"
 
-#: main.c:2590
+#: main.c:2599
 msgid "-xrm <resource>\tSet the specified resource"
 msgstr "-xrm <recurso>\tEstablece el recurso especificado"
 
-#: main.c:2593
+#: main.c:2602
 msgid ""
 "\n"
 "Arguments recognised by gvim (RISC OS version):\n"
@@ -3450,15 +3462,15 @@ msgstr ""
 "\n"
 "Argumentos reconocidos por gvim (versión para RISC OS):\n"
 
-#: main.c:2594
+#: main.c:2603
 msgid "--columns <number>\tInitial width of window in columns"
 msgstr "--columns <número>\tAnchura inicial de la ventana, en columnas"
 
-#: main.c:2595
+#: main.c:2604
 msgid "--rows <number>\tInitial height of window in rows"
 msgstr "--rows <número>\tAltura inicial de la ventana, en filas"
 
-#: main.c:2598
+#: main.c:2607
 msgid ""
 "\n"
 "Arguments recognised by gvim (GTK+ version):\n"
@@ -3466,50 +3478,50 @@ msgstr ""
 "\n"
 "Argumentos reconocidos por gvim (versión GTK+):\n"
 
-#: main.c:2602
+#: main.c:2611
 msgid "-display <display>\tRun vim on <display> (also: --display)"
 msgstr "-display <pantalla>\tEjecuta vim en <pantalla> (también: --display)"
 
-#: main.c:2604
+#: main.c:2613
 msgid "--role <role>\tSet a unique role to identify the main window"
 msgstr ""
 "--role <role>\tDefine un rol único para identificar la ventana principal."
 
-#: main.c:2606
+#: main.c:2615
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
 msgstr "--socketid <xid>\tAbre a Vim dentro de otro «widget» GTK."
 
-#: main.c:2609
+#: main.c:2618
 msgid "-P <parent title>\tOpen Vim inside parent application"
 msgstr "-P <título ventana padre>\tAbrir a Vim dentro de la aplicación padre."
 
-#: main.c:2847
+#: main.c:2856
 msgid "No display"
 msgstr "No hay una ventana"
 
 #  Failed to send, abort.
 #. Failed to send, abort.
-#: main.c:2862
+#: main.c:2871
 msgid ": Send failed.\n"
 msgstr ": Falló el envio.\n"
 
 #  Let vim start normally.
 #. Let vim start normally.
-#: main.c:2868
+#: main.c:2877
 msgid ": Send failed. Trying to execute locally\n"
 msgstr ""
 ": Falló el inicio de sesión remota («send»). Intentado una ejecución local.\n"
 
-#: main.c:2906 main.c:2927
+#: main.c:2915 main.c:2936
 #, c-format
 msgid "%d of %d edited"
 msgstr "%d de %d editados"
 
-#: main.c:2949
+#: main.c:2958
 msgid "No display: Send expression failed.\n"
 msgstr "No hay una ventana en el destino: El envio de la expresión falló.\n"
 
-#: main.c:2961
+#: main.c:2970
 msgid ": Send expression failed.\n"
 msgstr ": Falló el envio de la expresión.\n"
 
@@ -3627,23 +3639,23 @@ msgstr "E292: El servidor de método de entrada (IME) no está funcionando"
 msgid "E293: block was not locked"
 msgstr "E293: El bloque no estaba asegurado"
 
-#: memfile.c:1005
+#: memfile.c:1010
 msgid "E294: Seek error in swap file read"
 msgstr "E294: Error de búsqueda al leer el fichero de intercambio"
 
-#: memfile.c:1010
+#: memfile.c:1015
 msgid "E295: Read error in swap file"
 msgstr "E295: Error de lectura en el fichero de intercambio"
 
-#: memfile.c:1062
+#: memfile.c:1067
 msgid "E296: Seek error in swap file write"
 msgstr "E296: Error de búsqueda al escribir en el fichero de intercambio"
 
-#: memfile.c:1080
+#: memfile.c:1085
 msgid "E297: Write error in swap file"
 msgstr "E297: Error de escritura en el fichero de intercambio"
 
-#: memfile.c:1277
+#: memfile.c:1282
 msgid "E300: Swap file already exists (symlink attack?)"
 msgstr "E300: Ya existe un fichero de intercambio (¿ataque de symlink?)"
 
@@ -3661,45 +3673,45 @@ msgstr "E298: ¿No se obtuvo el bloque nº 2?"
 
 #  could not (re)open the swap file, what can we do????
 #. could not (re)open the swap file, what can we do????
-#: memline.c:443
+#: memline.c:444
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: ¡¡¡Eeeh, se ha perdido el fichero de intercambio!!!"
 
-#: memline.c:448
+#: memline.c:449
 msgid "E302: Could not rename swap file"
 msgstr "E302: No se pudo cambiar el nombre del fichero de intercambio"
 
-#: memline.c:518
+#: memline.c:519
 #, c-format
 msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
 msgstr ""
 "E303: Incapaz de abrir el fichero de intercambio para «%s», recuperación "
 "imposible"
 
-#: memline.c:617
+#: memline.c:618
 msgid "E304: ml_timestamp: Didn't get block 0??"
 msgstr "E304: «ml_timestamp»: ¿No se obtuvo el bloque 0?"
 
-#: memline.c:757
+#: memline.c:758
 #, c-format
 msgid "E305: No swap file found for %s"
 msgstr "E305: No se encontró el fichero de intercambio para %s"
 
-#: memline.c:767
+#: memline.c:768
 msgid "Enter number of swap file to use (0 to quit): "
 msgstr ""
 "Introduzca el número del fichero de intercambio a usar (0 para salir): "
 
-#: memline.c:812
+#: memline.c:813
 #, c-format
 msgid "E306: Cannot open %s"
 msgstr "E306: No puedo abrir %s"
 
-#: memline.c:834
+#: memline.c:835
 msgid "Unable to read block 0 from "
 msgstr "Incapaz de leer el bloque 0 de "
 
-#: memline.c:837
+#: memline.c:838
 msgid ""
 "\n"
 "Maybe no changes were made or Vim did not update the swap file."
@@ -3707,28 +3719,28 @@ msgstr ""
 "\n"
 "Tal vez no se han hecho cambios o Vim no actualizó el fichero de intercambio"
 
-#: memline.c:847 memline.c:864
+#: memline.c:848 memline.c:865
 msgid " cannot be used with this version of Vim.\n"
 msgstr " no puede usarse con esta versión de Vim.\n"
 
-#: memline.c:849
+#: memline.c:850
 msgid "Use Vim version 3.0.\n"
 msgstr "Use la versión 3.0 de Vim.\n"
 
-#: memline.c:855
+#: memline.c:856
 #, c-format
 msgid "E307: %s does not look like a Vim swap file"
 msgstr "E307: %s no parece un fichero de intercambio de Vim"
 
-#: memline.c:868
+#: memline.c:869
 msgid " cannot be used on this computer.\n"
 msgstr "no puede usarse en este ordenador.\n"
 
-#: memline.c:870
+#: memline.c:871
 msgid "The file was created on "
 msgstr "El fichero fue creado el "
 
-#: memline.c:874
+#: memline.c:875
 msgid ""
 ",\n"
 "or the file has been damaged."
@@ -3736,83 +3748,83 @@ msgstr ""
 ",\n"
 "o el fichero ha sido dañado."
 
-#: memline.c:903
+#: memline.c:904
 #, c-format
 msgid "Using swap file \"%s\""
 msgstr "Usando el fichero de intercambio «%s»"
 
-#: memline.c:909
+#: memline.c:910
 #, c-format
 msgid "Original file \"%s\""
 msgstr "Fichero original «%s»"
 
-#: memline.c:922
+#: memline.c:923
 msgid "E308: Warning: Original file may have been changed"
 msgstr "E308: Advertencia: el fichero original puede haber sido cambiado"
 
-#: memline.c:975
+#: memline.c:976
 #, c-format
 msgid "E309: Unable to read block 1 from %s"
 msgstr "E309: Incapaz de leer el bloque 1 de %s"
 
-#: memline.c:979
+#: memline.c:980
 msgid "???MANY LINES MISSING"
 msgstr "???FALTAN MUCHAS LÍNEAS"
 
-#: memline.c:995
+#: memline.c:996
 msgid "???LINE COUNT WRONG"
 msgstr "???RECUENTO DE LÍNEAS EQUIVOCADO"
 
-#: memline.c:1002
+#: memline.c:1003
 msgid "???EMPTY BLOCK"
 msgstr "???BLOQUE VACÍO"
 
-#: memline.c:1028
+#: memline.c:1029
 msgid "???LINES MISSING"
 msgstr "???FALTAN LÍNEAS"
 
-#: memline.c:1060
+#: memline.c:1061
 #, c-format
 msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
 msgstr "E310: ID del bloque 1 equivocado (¿no es %s un fichero .swp?)"
 
-#: memline.c:1065
+#: memline.c:1066
 msgid "???BLOCK MISSING"
 msgstr "???FALTA UN BLOQUE"
 
-#: memline.c:1081
+#: memline.c:1082
 msgid "??? from here until ???END lines may be messed up"
 msgstr "??? desde aquí hast ???FIN las líneas pueden estar desordenadas"
 
-#: memline.c:1097
+#: memline.c:1098
 msgid "??? from here until ???END lines may have been inserted/deleted"
 msgstr ""
 "??? desde aquí hasta ???FIN las líneas pueden haber sido insertadas/borradas"
 
-#: memline.c:1117
+#: memline.c:1118
 msgid "???END"
 msgstr "???FIN"
 
-#: memline.c:1143
+#: memline.c:1144
 msgid "E311: Recovery Interrupted"
 msgstr "E311: Recuperación interrumpida"
 
-#: memline.c:1148
+#: memline.c:1149
 msgid ""
 "E312: Errors detected while recovering; look for lines starting with ???"
 msgstr ""
 "E312: Se han detectado errores al recuperar; busque líneas que empiecen "
 "con ???"
 
-#: memline.c:1150
+#: memline.c:1151
 msgid "See \":help E312\" for more information."
 msgstr "Vea «:help E312» para más información."
 
-#: memline.c:1155
+#: memline.c:1156
 msgid "Recovery completed. You should check if everything is OK."
 msgstr "Recuperación completada. Ud. debería comprobar que todo está bien."
 
-#: memline.c:1156
+#: memline.c:1157
 msgid ""
 "\n"
 "(You might want to write out this file under another name\n"
@@ -3820,12 +3832,12 @@ msgstr ""
 "\n"
 "(Podría querer guardar este fichero con otro nombre\n"
 
-#: memline.c:1157
+#: memline.c:1158
 msgid "and run diff with the original file to check for changes)\n"
 msgstr ""
 "y ejecutar «diff» con el fichero original para comprobar los cambios)\n"
 
-#: memline.c:1158
+#: memline.c:1159
 msgid ""
 "Delete the .swp file afterwards.\n"
 "\n"
@@ -3835,51 +3847,51 @@ msgstr ""
 
 #  use msg() to start the scrolling properly
 #. use msg() to start the scrolling properly
-#: memline.c:1214
+#: memline.c:1215
 msgid "Swap files found:"
 msgstr "Se han encontrado ficheros de intercambio:"
 
-#: memline.c:1392
+#: memline.c:1393
 msgid "   In current directory:\n"
 msgstr "   En el directorio actual:\n"
 
-#: memline.c:1394
+#: memline.c:1395
 msgid "   Using specified name:\n"
 msgstr "   Usando el nombre especificado:\n"
 
-#: memline.c:1398
+#: memline.c:1399
 msgid "   In directory "
 msgstr "   En el directorio "
 
-#: memline.c:1416
+#: memline.c:1417
 msgid "      -- none --\n"
 msgstr "      -- ninguno --\n"
 
-#: memline.c:1488
+#: memline.c:1489
 msgid "          owned by: "
 msgstr "          propiedad de: "
 
-#: memline.c:1490
+#: memline.c:1491
 msgid "   dated: "
 msgstr "   de fecha: "
 
-#: memline.c:1494 memline.c:3684
+#: memline.c:1495 memline.c:3685
 msgid "             dated: "
 msgstr "             de fecha: "
 
-#: memline.c:1510
+#: memline.c:1511
 msgid "         [from Vim version 3.0]"
 msgstr "      [desde la versión 3.0 de Vim]"
 
-#: memline.c:1514
+#: memline.c:1515
 msgid "         [does not look like a Vim swap file]"
 msgstr "         [no parece un fichero de intercambio de Vim]"
 
-#: memline.c:1518
+#: memline.c:1519
 msgid "         file name: "
 msgstr "         nombre del fichero: "
 
-#: memline.c:1524
+#: memline.c:1525
 msgid ""
 "\n"
 "          modified: "
@@ -3887,15 +3899,15 @@ msgstr ""
 "\n"
 "         modificado: "
 
-#: memline.c:1525
+#: memline.c:1526
 msgid "YES"
 msgstr "SI"
 
-#: memline.c:1525
+#: memline.c:1526
 msgid "no"
 msgstr "no"
 
-#: memline.c:1529
+#: memline.c:1530
 msgid ""
 "\n"
 "         user name: "
@@ -3903,11 +3915,11 @@ msgstr ""
 "\n"
 " nombre del usuario: "
 
-#: memline.c:1536
+#: memline.c:1537
 msgid "   host name: "
 msgstr "  nombre del «host»: "
 
-#: memline.c:1538
+#: memline.c:1539
 msgid ""
 "\n"
 "         host name: "
@@ -3915,7 +3927,7 @@ msgstr ""
 "\n"
 "       nombre del «host»: "
 
-#: memline.c:1544
+#: memline.c:1545
 msgid ""
 "\n"
 "        process ID: "
@@ -3923,11 +3935,11 @@ msgstr ""
 "\n"
 "      ID del proceso: "
 
-#: memline.c:1550
+#: memline.c:1551
 msgid " (still running)"
 msgstr " (aún en ejecución)"
 
-#: memline.c:1562
+#: memline.c:1563
 msgid ""
 "\n"
 "         [not usable with this version of Vim]"
@@ -3935,7 +3947,7 @@ msgstr ""
 "\n"
 "         [no se peude usar con esta versión de Vim]"
 
-#: memline.c:1565
+#: memline.c:1566
 msgid ""
 "\n"
 "         [not usable on this computer]"
@@ -3943,92 +3955,92 @@ msgstr ""
 "\n"
 "         [no se puede usar en este ordenador]"
 
-#: memline.c:1570
+#: memline.c:1571
 msgid "         [cannot be read]"
 msgstr "         [no se puede leer]"
 
-#: memline.c:1574
+#: memline.c:1575
 msgid "         [cannot be opened]"
 msgstr "         [no se puede abrir]"
 
-#: memline.c:1764
+#: memline.c:1765
 msgid "E313: Cannot preserve, there is no swap file"
 msgstr "E313: No puedo preservarlo, no existe un fichero de intercambio"
 
-#: memline.c:1817
+#: memline.c:1818
 msgid "File preserved"
 msgstr "fichero preservado"
 
-#: memline.c:1819
+#: memline.c:1820
 msgid "E314: Preserve failed"
 msgstr "E314: Falló la preservación del fichero"
 
-#: memline.c:1890
+#: memline.c:1891
 #, c-format
 msgid "E315: ml_get: invalid lnum: %ld"
 msgstr "E315: «ml_get»: número de línea no válido: %ld"
 
-#: memline.c:1916
+#: memline.c:1917
 #, c-format
 msgid "E316: ml_get: cannot find line %ld"
 msgstr "E316: «ml_get»: no puedo encontrar la línea %ld"
 
-#: memline.c:2306
+#: memline.c:2307
 msgid "E317: pointer block id wrong 3"
 msgstr "E317: El id del bloque de punteros está equivocado. 3"
 
-#: memline.c:2386
+#: memline.c:2387
 msgid "stack_idx should be 0"
 msgstr "«stack_idx» debería ser 0"
 
-#: memline.c:2448
+#: memline.c:2449
 msgid "E318: Updated too many blocks?"
 msgstr "E318: ¿Demasiados bloques actualizados?"
 
-#: memline.c:2630
+#: memline.c:2631
 msgid "E317: pointer block id wrong 4"
 msgstr "E317: El id del bloque de punteros está equivocado. 4"
 
-#: memline.c:2657
+#: memline.c:2658
 msgid "deleted block 1?"
 msgstr "¿bloque 1 suprimido?"
 
-#: memline.c:2857
+#: memline.c:2858
 #, c-format
 msgid "E320: Cannot find line %ld"
 msgstr "E320: No puedo encontrar la línea %ld"
 
-#: memline.c:3100
+#: memline.c:3101
 msgid "E317: pointer block id wrong"
 msgstr "E317: El id del bloque de punteros está equivocado."
 
-#: memline.c:3116
+#: memline.c:3117
 msgid "pe_line_count is zero"
 msgstr "«pe_line_count» es cero"
 
-#: memline.c:3145
+#: memline.c:3146
 #, c-format
 msgid "E322: line number out of range: %ld past the end"
 msgstr "E322: número de línea fuera de rango: %ld más allá del final"
 
-#: memline.c:3149
+#: memline.c:3150
 #, c-format
 msgid "E323: line count wrong in block %ld"
 msgstr "E323: recuento de líneas erróneo en el bloque %ld"
 
-#: memline.c:3198
+#: memline.c:3199
 msgid "Stack size increases"
 msgstr "El tamaño de la pila aumenta"
 
-#: memline.c:3244
+#: memline.c:3245
 msgid "E317: pointer block id wrong 2"
 msgstr "E310: El id del bloque de punteros está equivocado. 2"
 
-#: memline.c:3674
+#: memline.c:3675
 msgid "E325: ATTENTION"
 msgstr "E325: ATENCIÓN"
 
-#: memline.c:3675
+#: memline.c:3676
 msgid ""
 "\n"
 "Found a swap file by the name \""
@@ -4036,11 +4048,11 @@ msgstr ""
 "\n"
 "Se ha encontrado un fichero de intercambio con el nombre «"
 
-#: memline.c:3679
+#: memline.c:3680
 msgid "While opening file \""
 msgstr "al abrir el fichero «"
 
-#: memline.c:3688
+#: memline.c:3689
 msgid "      NEWER than swap file!\n"
 msgstr "     MÁS NUEVO que el fichero de intercambio!\n"
 
@@ -4048,7 +4060,7 @@ msgstr "     MÁS NUEVO que el fichero de intercambio!\n"
 #  * other languages.
 #. Some of these messages are long to allow translation to
 #. * other languages.
-#: memline.c:3692
+#: memline.c:3693
 msgid ""
 "\n"
 "(1) Another program may be editing the same file.\n"
@@ -4060,11 +4072,11 @@ msgstr ""
 "    De ser así, tenga cuidado de no acabar con dos\n"
 "    ejemplares diferentes del mismo fichero al hacer cambios.\n"
 
-#: memline.c:3693
+#: memline.c:3694
 msgid "    Quit, or continue with caution.\n"
 msgstr "    Salga del programa o continue con precaución.\n"
 
-#: memline.c:3694
+#: memline.c:3695
 msgid ""
 "\n"
 "(2) An edit session for this file crashed.\n"
@@ -4072,11 +4084,11 @@ msgstr ""
 "\n"
 "(2) Falló una sesión de edición de este fichero.\n"
 
-#: memline.c:3695
+#: memline.c:3696
 msgid "    If this is the case, use \":recover\" or \"vim -r "
 msgstr "    Si es así, use «:recover» o «vim -r "
 
-#: memline.c:3697
+#: memline.c:3698
 msgid ""
 "\"\n"
 "    to recover the changes (see \":help recovery\").\n"
@@ -4084,11 +4096,11 @@ msgstr ""
 "»\n"
 "    para recuperar los cambios (véa «:help recovery»).\n"
 
-#: memline.c:3698
+#: memline.c:3699
 msgid "    If you did this already, delete the swap file \""
 msgstr "    Si Ud. ya ha hecho esto, borre el fichero de intercambio «"
 
-#: memline.c:3700
+#: memline.c:3701
 msgid ""
 "\"\n"
 "    to avoid this message.\n"
@@ -4096,23 +4108,23 @@ msgstr ""
 "»\n"
 "    para evitar este mensaje.\n"
 
-#: memline.c:3714 memline.c:3718
+#: memline.c:3715 memline.c:3719
 msgid "Swap file \""
 msgstr "¡El fichero de intercambio «"
 
-#: memline.c:3715 memline.c:3721
+#: memline.c:3716 memline.c:3722
 msgid "\" already exists!"
 msgstr "» ya existe!"
 
-#: memline.c:3724
+#: memline.c:3725
 msgid "VIM - ATTENTION"
 msgstr "VIM - ATENCIÓN"
 
-#: memline.c:3726
+#: memline.c:3727
 msgid "Swap file already exists!"
 msgstr "¡Ya existe un fichero de intercambio!"
 
-#: memline.c:3730
+#: memline.c:3731
 msgid ""
 "&Open Read-Only\n"
 "&Edit anyway\n"
@@ -4126,7 +4138,7 @@ msgstr ""
 "&Salir\n"
 "&Abortar"
 
-#: memline.c:3732
+#: memline.c:3733
 msgid ""
 "&Open Read-Only\n"
 "&Edit anyway\n"
@@ -4142,7 +4154,7 @@ msgstr ""
 "&Abortar\n"
 "&Borrarlo"
 
-#: memline.c:3789
+#: memline.c:3790
 msgid "E326: Too many swap files found"
 msgstr "E326: Se han encontrado demasiados ficheros de intercambio"
 
@@ -4252,11 +4264,11 @@ msgstr " (RET/BS: línea, ESPACIO/b: página, d/u: media página, q: salir)"
 msgid " (RET: line, SPACE: page, d: half page, q: quit)"
 msgstr " (RET: línea, ESPACIO: página, d: media página, q: salir)"
 
-#: message.c:2982 message.c:2997
+#: message.c:2988 message.c:3003
 msgid "Question"
 msgstr "Pregunta"
 
-#: message.c:2984
+#: message.c:2990
 msgid ""
 "&Yes\n"
 "&No"
@@ -4264,7 +4276,7 @@ msgstr ""
 "&Si\n"
 "&No"
 
-#: message.c:3017
+#: message.c:3023
 msgid ""
 "&Yes\n"
 "&No\n"
@@ -4278,16 +4290,16 @@ msgstr ""
 "&Descartar todo\n"
 "&Cancelar"
 
-#: message.c:3058
+#: message.c:3064
 msgid "Save File dialog"
 msgstr "Diálogo de Guardar Fichero"
 
-#: message.c:3060
+#: message.c:3066
 msgid "Open File dialog"
 msgstr "Diálogo de Abrir Fichero"
 
 #. TODO: non-GUI file selector here
-#: message.c:3131
+#: message.c:3137
 msgid "E338: Sorry, no file browser in console mode"
 msgstr "E338: Lo siento, no hay hojeador de ficheros en modo de consola"
 
@@ -4465,35 +4477,35 @@ msgstr "leido del socket Netbeans"
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658: Se perdió la conexión NetBeans para el  «buffer» %ld."
 
-#: normal.c:2980
+#: normal.c:2983
 msgid "Warning: terminal cannot highlight"
 msgstr "Advertencia: el terminal no puede realzar el texto"
 
-#: normal.c:3276
+#: normal.c:3279
 msgid "E348: No string under cursor"
 msgstr "E348: No hay ninguna cadena bajo el cursor"
 
-#: normal.c:3278
+#: normal.c:3281
 msgid "E349: No identifier under cursor"
 msgstr "E349: No hay ningún identificador bajo el cursor"
 
-#: normal.c:4519
+#: normal.c:4522
 msgid "E352: Cannot erase folds with current 'foldmethod'"
 msgstr "E352: No puedo borar pliegues con el «folmethod» actual."
 
-#: normal.c:6740
+#: normal.c:6743
 msgid "E664: changelist is empty"
 msgstr "E664: La lista de cambios está vacía."
 
-#: normal.c:6742
+#: normal.c:6745
 msgid "E662: At start of changelist"
 msgstr "E662: Al comienzo de la lista de cambios."
 
-#: normal.c:6744
+#: normal.c:6747
 msgid "E663: At end of changelist"
 msgstr "E663: Al final de la lista de cambios."
 
-#: normal.c:8005
+#: normal.c:8009
 msgid "Type  :quit<Enter>  to exit Vim"
 msgstr "Escriba :quit<enter> para terminar la ejecución de Vim."
 
@@ -4533,41 +4545,41 @@ msgstr "%ld líneas sangradas"
 
 # Debe mostrar la línea de comandos.
 #. must display the prompt
-#: ops.c:1675
+#: ops.c:1688
 msgid "cannot yank; delete anyway"
 msgstr "No puedo hacer un «yank»; ¿Lo borro de todas formas?"
 
-#: ops.c:2261
+#: ops.c:2274
 msgid "1 line changed"
 msgstr "1 línea cambiada"
 
-#: ops.c:2263
+#: ops.c:2276
 #, c-format
 msgid "%ld lines changed"
 msgstr "%ld líneas cambiadas"
 
-#: ops.c:2647
+#: ops.c:2660
 #, c-format
 msgid "freeing %ld lines"
 msgstr "liberando %ld líneas"
 
-#: ops.c:2928
+#: ops.c:2941
 msgid "1 line yanked"
 msgstr "1 línea copiada"
 
-#: ops.c:2930
+#: ops.c:2943
 #, c-format
 msgid "%ld lines yanked"
 msgstr "%ld líneas copiadas"
 
-#: ops.c:3215
+#: ops.c:3228
 #, c-format
 msgid "E353: Nothing in register %s"
 msgstr "E353: No hay nada en el registro %s"
 
 #  Highlight title
 #. Highlight title
-#: ops.c:3766
+#: ops.c:3779
 msgid ""
 "\n"
 "--- Registers ---"
@@ -4575,11 +4587,11 @@ msgstr ""
 "\n"
 "--- Registros ---"
 
-#: ops.c:5075
+#: ops.c:5088
 msgid "Illegal register name"
 msgstr "Nombre de registro ilegal"
 
-#: ops.c:5163
+#: ops.c:5176
 msgid ""
 "\n"
 "# Registers:\n"
@@ -4587,34 +4599,34 @@ msgstr ""
 "\n"
 "# Registros:\n"
 
-#: ops.c:5213
+#: ops.c:5226
 #, c-format
 msgid "E574: Unknown register type %d"
 msgstr "E574: Registro desconocido de tipo «%d»."
 
-#: ops.c:5698
+#: ops.c:5711
 #, c-format
 msgid "E354: Invalid register name: '%s'"
 msgstr "E354: Nombre de registro no válido: '%s'"
 
-#: ops.c:6058
+#: ops.c:6071
 #, c-format
 msgid "%ld Cols; "
 msgstr "%ld Cols; "
 
-#: ops.c:6065
+#: ops.c:6078
 #, c-format
 msgid "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"
 msgstr ""
 "Seleccionadas %s%ld de %ld Líneas; %ld de %ld Palabras; %ld de %ld Caracteres"
 
-#: ops.c:6081
+#: ops.c:6094
 #, c-format
 msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
 msgstr ""
 "Col %s de %s; Línea %ld de %ld; Palabra %ld de %ld; Carácter %ld de %ld"
 
-#: ops.c:6092
+#: ops.c:6105
 #, c-format
 msgid "(+%ld for BOM)"
 msgstr "(+%ld para BOM)"
@@ -4740,48 +4752,48 @@ msgstr "E536: Se requiere una coma."
 msgid "E537: 'commentstring' must be empty or contain %s"
 msgstr "E537: «commentstring» debe estar vacio o contener «%s»."
 
-#: option.c:5679
+#: option.c:5682
 msgid "E538: No mouse support"
 msgstr "E538: No hay soporte para el ratón."
 
-#: option.c:5947
+#: option.c:5950
 msgid "E540: Unclosed expression sequence"
 msgstr "E540: SEcuencia de expresión sin cerrar."
 
-#: option.c:5951
+#: option.c:5954
 msgid "E541: too many items"
 msgstr "E541: Demasiados ítems."
 
-#: option.c:5953
+#: option.c:5956
 msgid "E542: unbalanced groups"
 msgstr "E542: Grupos desbalanceados."
 
-#: option.c:6193
+#: option.c:6196
 msgid "E590: A preview window already exists"
 msgstr "E590: Ya existe una ventana de visualización previa."
 
-#: option.c:6450
+#: option.c:6453
 msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
 msgstr ""
 "W17: El uso de árabe requiere la codificación UTF-8, use «:set encoding=utf-"
 "8» primero."
 
-#: option.c:6783
+#: option.c:6786
 #, c-format
 msgid "E593: Need at least %d lines"
 msgstr "E593: Necesita al menos %d líneas."
 
-#: option.c:6793
+#: option.c:6796
 #, c-format
 msgid "E594: Need at least %d columns"
 msgstr "E594: Necesita al menos %d columnas."
 
-#: option.c:7100
+#: option.c:7103
 #, c-format
 msgid "E355: Unknown option: %s"
 msgstr "E355: Opción desconocida: %s"
 
-#: option.c:7220
+#: option.c:7223
 msgid ""
 "\n"
 "--- Terminal codes ---"
@@ -4789,7 +4801,7 @@ msgstr ""
 "\n"
 "--- Códigos de terminal ---"
 
-#: option.c:7222
+#: option.c:7225
 msgid ""
 "\n"
 "--- Global option values ---"
@@ -4797,7 +4809,7 @@ msgstr ""
 "\n"
 "--- Valores de las opciones globales ---"
 
-#: option.c:7224
+#: option.c:7227
 msgid ""
 "\n"
 "--- Local option values ---"
@@ -4805,7 +4817,7 @@ msgstr ""
 "\n"
 "--- Valores de las opciones locales ---"
 
-#: option.c:7226
+#: option.c:7229
 msgid ""
 "\n"
 "--- Options ---"
@@ -4813,16 +4825,16 @@ msgstr ""
 "\n"
 "--- Opciones ---"
 
-#: option.c:7932
+#: option.c:7935
 msgid "E356: get_varp ERROR"
 msgstr "E356: ERROR de «get_varp»"
 
-#: option.c:8903
+#: option.c:8906
 #, c-format
 msgid "E357: 'langmap': Matching character missing for %s"
 msgstr "E357: «langmap»: falta carácter coincidente para %s"
 
-#: option.c:8937
+#: option.c:8940
 #, c-format
 msgid "E358: 'langmap': Extra characters after semicolon: %s"
 msgstr "E358: «langmap»: caracteres extra después del punto y coma: %s"
@@ -4857,84 +4869,84 @@ msgstr "No puedo crear "
 msgid "Vim exiting with %d\n"
 msgstr "Saliendo de Vim con %d\n"
 
-#: os_amiga.c:937
+#: os_amiga.c:941
 msgid "cannot change console mode ?!\n"
 msgstr "¡¿No puedo cambiar el modo de la consola?!\n"
 
-#: os_amiga.c:1003
+#: os_amiga.c:1012
 msgid "mch_get_shellsize: not a console??\n"
 msgstr "«mch_get_shellsize»: ¿No es una consola?\n"
 
 #  if Vim opened a window: Executing a shell may cause crashes
 #. if Vim opened a window: Executing a shell may cause crashes
-#: os_amiga.c:1152
+#: os_amiga.c:1161
 msgid "E360: Cannot execute shell with -f option"
 msgstr "E360: No se puede ejecutar la «shell» con la opción -f"
 
-#: os_amiga.c:1193 os_amiga.c:1283
+#: os_amiga.c:1202 os_amiga.c:1292
 msgid "Cannot execute "
 msgstr "No puedo ejecutarlo "
 
-#: os_amiga.c:1196 os_amiga.c:1293
+#: os_amiga.c:1205 os_amiga.c:1302
 msgid "shell "
 msgstr "«shell» "
 
-#: os_amiga.c:1216 os_amiga.c:1318
+#: os_amiga.c:1225 os_amiga.c:1327
 msgid " returned\n"
 msgstr " devuelto\n"
 
-#: os_amiga.c:1459
+#: os_amiga.c:1468
 msgid "ANCHOR_BUF_SIZE too small."
 msgstr "«ANCHOR_BUF_SIZE» demasiado pequeño"
 
-#: os_amiga.c:1463
+#: os_amiga.c:1472
 msgid "I/O ERROR"
 msgstr "ERROR E/S"
 
-#: os_mswin.c:539
+#: os_mswin.c:548
 msgid "...(truncated)"
 msgstr "...(truncado)"
 
-#: os_mswin.c:641
+#: os_mswin.c:650
 msgid "'columns' is not 80, cannot execute external commands"
 msgstr "'columns' no es 80, no se pueden ejecutar comandos externos"
 
-#: os_mswin.c:1973
+#: os_mswin.c:1982
 msgid "E237: Printer selection failed"
 msgstr "E237: FAlló la selectión de impresora."
 
-#: os_mswin.c:2013
+#: os_mswin.c:2022
 #, c-format
 msgid "to %s on %s"
 msgstr "para %s en %s"
 
-#: os_mswin.c:2028
+#: os_mswin.c:2037
 #, c-format
 msgid "E613: Unknown printer font: %s"
 msgstr "E613: Fuente de impresión desconocida en la impresora: %s"
 
-#: os_mswin.c:2077 os_mswin.c:2087
+#: os_mswin.c:2086 os_mswin.c:2096
 #, c-format
 msgid "E238: Print error: %s"
 msgstr "E238: Error de impresión: %s"
 
-#: os_mswin.c:2088
+#: os_mswin.c:2097
 msgid "Unknown"
 msgstr "Desconocido"
 
-#: os_mswin.c:2115
+#: os_mswin.c:2124
 #, c-format
 msgid "Printing '%s'"
 msgstr "Imprimiendo «%s»"
 
-#: os_mswin.c:3204
+#: os_mswin.c:3213
 #, c-format
 msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
 msgstr ""
 "E244: El nombre del conjunto de caracteres «%s» no es válido en el nombre de "
 "la fuente de impresión «%s»"
 
-#: os_mswin.c:3212
+#: os_mswin.c:3221
 #, c-format
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Carácter «%c» ilegal en el nombre de la fuente de impresión «%s»"
@@ -4969,15 +4981,15 @@ msgstr ""
 "\n"
 "Vim: Hay un error de X11\n"
 
-#: os_unix.c:1334
+#: os_unix.c:1338
 msgid "Testing the X display failed"
 msgstr "Falló la prueba del sistema X11"
 
-#: os_unix.c:1473
+#: os_unix.c:1477
 msgid "Opening the X display timed out"
 msgstr "El «display» de X no abrió a tiempo."
 
-#: os_unix.c:3230 os_unix.c:3910
+#: os_unix.c:3234 os_unix.c:3914
 msgid ""
 "\n"
 "Cannot execute shell "
@@ -4985,7 +4997,7 @@ msgstr ""
 "\n"
 "No puedo ejecutar la «shell» "
 
-#: os_unix.c:3278
+#: os_unix.c:3282
 msgid ""
 "\n"
 "Cannot execute shell sh\n"
@@ -4993,7 +5005,7 @@ msgstr ""
 "\n"
 "No puedo ejecutar la «shell» «sh»\n"
 
-#: os_unix.c:3282 os_unix.c:3916
+#: os_unix.c:3286 os_unix.c:3920
 msgid ""
 "\n"
 "shell returned "
@@ -5001,7 +5013,7 @@ msgstr ""
 "\n"
 "La «shell» ha devuelto "
 
-#: os_unix.c:3417
+#: os_unix.c:3421
 msgid ""
 "\n"
 "Cannot create pipes\n"
@@ -5009,7 +5021,7 @@ msgstr ""
 "\n"
 "No puedo crear «pipes»\n"
 
-#: os_unix.c:3432
+#: os_unix.c:3436
 msgid ""
 "\n"
 "Cannot fork\n"
@@ -5017,7 +5029,7 @@ msgstr ""
 "\n"
 "No puedo usar «fork»\n"
 
-#: os_unix.c:3923
+#: os_unix.c:3927
 msgid ""
 "\n"
 "Command terminated\n"
@@ -5025,27 +5037,27 @@ msgstr ""
 "\n"
 "Comando finalizado\n"
 
-#: os_unix.c:4187 os_unix.c:4312 os_unix.c:5978
+#: os_unix.c:4191 os_unix.c:4316 os_unix.c:5982
 msgid "XSMP lost ICE connection"
 msgstr "XSMP perdió la conexión ICE."
 
-#: os_unix.c:5561
+#: os_unix.c:5565
 msgid "Opening the X display failed"
 msgstr "Falló la apertura de la pantalla X11"
 
-#: os_unix.c:5883
+#: os_unix.c:5887
 msgid "XSMP handling save-yourself request"
 msgstr "XSMP está manejando una solicitud de «guardelo usted mismo»."
 
-#: os_unix.c:6002
+#: os_unix.c:6006
 msgid "XSMP opening connection"
 msgstr "XSMP está abriendo una conexión."
 
-#: os_unix.c:6021
+#: os_unix.c:6025
 msgid "XSMP ICE connection watch failed"
 msgstr "XSMP Falló el monitoreo de la conexión ICE."
 
-#: os_unix.c:6041
+#: os_unix.c:6045
 #, c-format
 msgid "XSMP SmcOpenConnection failed: %s"
 msgstr "XSMP SmcOpenConnection ha fallado: %s."
@@ -5312,75 +5324,75 @@ msgstr "Subcoincidencias externas:\n"
 msgid "+--%3ld lines folded "
 msgstr "+--%3ld líneas plegadas"
 
-#: screen.c:7996
+#: screen.c:8000
 msgid " VREPLACE"
 msgstr " REEMPLAZAMIENTO VIRTUAL"
 
-#: screen.c:8000
+#: screen.c:8004
 msgid " REPLACE"
 msgstr " REEMPLAZAR"
 
-#: screen.c:8005
+#: screen.c:8009
 msgid " REVERSE"
 msgstr " INVERTIR"
 
-#: screen.c:8007
+#: screen.c:8011
 msgid " INSERT"
 msgstr " INSERTAR"
 
-#: screen.c:8010
+#: screen.c:8014
 msgid " (insert)"
 msgstr " (insertar)"
 
-#: screen.c:8012
+#: screen.c:8016
 msgid " (replace)"
 msgstr " (reemplazar)"
 
-#: screen.c:8014
+#: screen.c:8018
 msgid " (vreplace)"
 msgstr " (reemplazamiento virtual)"
 
-#: screen.c:8017
+#: screen.c:8021
 msgid " Hebrew"
 msgstr " Hebreo"
 
-#: screen.c:8028
+#: screen.c:8032
 msgid " Arabic"
 msgstr " árabe"
 
-#: screen.c:8031
+#: screen.c:8035
 msgid " (lang)"
 msgstr " (idioma)"
 
-#: screen.c:8035
+#: screen.c:8039
 msgid " (paste)"
 msgstr " (pegar)"
 
-#: screen.c:8048
+#: screen.c:8052
 msgid " VISUAL"
 msgstr " VISUAL"
 
-#: screen.c:8049
+#: screen.c:8053
 msgid " VISUAL LINE"
 msgstr " LÍNEA VISUAL"
 
-#: screen.c:8050
+#: screen.c:8054
 msgid " VISUAL BLOCK"
 msgstr " BLOQUE VISUAL"
 
-#: screen.c:8051
+#: screen.c:8055
 msgid " SELECT"
 msgstr " SELECCIONAR"
 
-#: screen.c:8052
+#: screen.c:8056
 msgid " SELECT LINE"
 msgstr " SELECCIONAR LÍNEA"
 
-#: screen.c:8053
+#: screen.c:8057
 msgid " SELECT BLOCK"
 msgstr " SELECCIONAR BLOQUE"
 
-#: screen.c:8068 screen.c:8131
+#: screen.c:8072 screen.c:8135
 msgid "recording"
 msgstr "grabando"
 
@@ -5407,58 +5419,58 @@ msgstr "E384: La búsqueda ha llegado al PRINCIPIO sin coincidencias con: %s"
 msgid "E385: search hit BOTTOM without match for: %s"
 msgstr "E385: La búsqueda ha llegado al FINAL sin coincidencias con: %s"
 
-#: search.c:1249
+#: search.c:1250
 msgid "E386: Expected '?' or '/'  after ';'"
 msgstr "E386: Esperaba «?» o «/» después de «;»"
 
-#: search.c:3759
+#: search.c:3769
 msgid " (includes previously listed match)"
 msgstr " (incluye la coincidencia mostrada previamente)."
 
 #  cursor at status line
 #. cursor at status line
-#: search.c:3779
+#: search.c:3789
 msgid "--- Included files "
 msgstr "--- Ficheros incluidos "
 
-#: search.c:3781
+#: search.c:3791
 msgid "not found "
 msgstr "no lo encontré"
 
-#: search.c:3782
+#: search.c:3792
 msgid "in path ---\n"
 msgstr "en la ruta ---\n"
 
-#: search.c:3839
+#: search.c:3849
 msgid "  (Already listed)"
 msgstr "  (Ya lo enumeré)"
 
-#: search.c:3841
+#: search.c:3851
 msgid "  NOT FOUND"
 msgstr "  NO SE ENCONTRÓ"
 
-#: search.c:3893
+#: search.c:3903
 #, c-format
 msgid "Scanning included file: %s"
 msgstr "Explorando el fichero incluido: %s"
 
-#: search.c:4111
+#: search.c:4121
 msgid "E387: Match is on current line"
 msgstr "E387: La coincidencia está en la línea en curso."
 
-#: search.c:4254
+#: search.c:4264
 msgid "All included files were found"
 msgstr "Se han encontrado todos los ficheros incluidos"
 
-#: search.c:4256
+#: search.c:4266
 msgid "No included files"
 msgstr "No hay ficheros incluidos"
 
-#: search.c:4272
+#: search.c:4282
 msgid "E388: Couldn't find definition"
 msgstr "E388: No se pudo encontrar la definición"
 
-#: search.c:4274
+#: search.c:4284
 msgid "E389: Couldn't find pattern"
 msgstr "E389: No se pudo encontrar el patrón"
 
@@ -5898,7 +5910,7 @@ msgstr "E440: falta la línea deshacer."
 
 #  Only MS VC 4.1 and earlier can do Win32s
 #. Only MS VC 4.1 and earlier can do Win32s
-#: version.c:739
+#: version.c:721
 msgid ""
 "\n"
 "MS-Windows 16/32 bit GUI version"
@@ -5906,7 +5918,7 @@ msgstr ""
 "\n"
 "Versión GUI de 16/32 bits para MS-Windows"
 
-#: version.c:741
+#: version.c:723
 msgid ""
 "\n"
 "MS-Windows 32 bit GUI version"
@@ -5914,15 +5926,15 @@ msgstr ""
 "\n"
 "Versión GUI de 32 bits para MS-Windows"
 
-#: version.c:744
+#: version.c:726
 msgid " in Win32s mode"
 msgstr " en modo Win32s"
 
-#: version.c:746
+#: version.c:728
 msgid " with OLE support"
 msgstr " con soporte para OLE"
 
-#: version.c:749
+#: version.c:731
 msgid ""
 "\n"
 "MS-Windows 32 bit console version"
@@ -5930,7 +5942,7 @@ msgstr ""
 "\n"
 "Versión de 32 bits para consola de MS-Windows"
 
-#: version.c:753
+#: version.c:735
 msgid ""
 "\n"
 "MS-Windows 16 bit version"
@@ -5938,7 +5950,7 @@ msgstr ""
 "\n"
 "Versión de 16 bits para MS-Windows"
 
-#: version.c:757
+#: version.c:739
 msgid ""
 "\n"
 "32 bit MS-DOS version"
@@ -5946,7 +5958,7 @@ msgstr ""
 "\n"
 "Versión de 32 bits para MS-DOS"
 
-#: version.c:759
+#: version.c:741
 msgid ""
 "\n"
 "16 bit MS-DOS version"
@@ -5954,7 +5966,7 @@ msgstr ""
 "\n"
 "Versión de 16 bits para MS-DOS"
 
-#: version.c:765
+#: version.c:747
 msgid ""
 "\n"
 "MacOS X (unix) version"
@@ -5962,7 +5974,7 @@ msgstr ""
 "\n"
 "Versión X (unix) para MacOS"
 
-#: version.c:767
+#: version.c:749
 msgid ""
 "\n"
 "MacOS X version"
@@ -5970,7 +5982,7 @@ msgstr ""
 "\n"
 "Versión X para MacOS"
 
-#: version.c:770
+#: version.c:752
 msgid ""
 "\n"
 "MacOS version"
@@ -5978,7 +5990,7 @@ msgstr ""
 "\n"
 "Versión para MacOS"
 
-#: version.c:775
+#: version.c:757
 msgid ""
 "\n"
 "RISC OS version"
@@ -5986,7 +5998,7 @@ msgstr ""
 "\n"
 "Versión para RISC OS"
 
-#: version.c:785
+#: version.c:767
 msgid ""
 "\n"
 "Included patches: "
@@ -5994,11 +6006,11 @@ msgstr ""
 "\n"
 "Parches incluidos: "
 
-#: version.c:811 version.c:1179
+#: version.c:793 version.c:1161
 msgid "Modified by "
 msgstr "Modificado por "
 
-#: version.c:818
+#: version.c:800
 msgid ""
 "\n"
 "Compiled "
@@ -6006,11 +6018,11 @@ msgstr ""
 "\n"
 "Compilado "
 
-#: version.c:821
+#: version.c:803
 msgid "by "
 msgstr "por "
 
-#: version.c:833
+#: version.c:815
 msgid ""
 "\n"
 "Huge version "
@@ -6018,7 +6030,7 @@ msgstr ""
 "\n"
 "Versión «enorme» "
 
-#: version.c:836
+#: version.c:818
 msgid ""
 "\n"
 "Big version "
@@ -6026,7 +6038,7 @@ msgstr ""
 "\n"
 "Versión «grande» "
 
-#: version.c:839
+#: version.c:821
 msgid ""
 "\n"
 "Normal version "
@@ -6034,7 +6046,7 @@ msgstr ""
 "\n"
 "Versión «normal» "
 
-#: version.c:842
+#: version.c:824
 msgid ""
 "\n"
 "Small version "
@@ -6042,7 +6054,7 @@ msgstr ""
 "\n"
 "Versión «pequeña» "
 
-#: version.c:844
+#: version.c:826
 msgid ""
 "\n"
 "Tiny version "
@@ -6050,233 +6062,233 @@ msgstr ""
 "\n"
 "Versión «diminuta» "
 
-#: version.c:850
+#: version.c:832
 msgid "without GUI."
 msgstr "sin GUI."
 
-#: version.c:855
+#: version.c:837
 msgid "with GTK2-GNOME GUI."
 msgstr "con GUI GTK2-GNOME."
 
-#: version.c:857
+#: version.c:839
 msgid "with GTK-GNOME GUI."
 msgstr "con GUI GTK-GNOME."
 
-#: version.c:861
+#: version.c:843
 msgid "with GTK2 GUI."
 msgstr "con GUI GTK2."
 
-#: version.c:863
+#: version.c:845
 msgid "with GTK GUI."
 msgstr "con GUI GTK."
 
-#: version.c:868
+#: version.c:850
 msgid "with X11-Motif GUI."
 msgstr "con GUI X11-Motif."
 
-#: version.c:872
+#: version.c:854
 msgid "with X11-neXtaw GUI."
 msgstr "con GUI X11-neXtaw."
 
-#: version.c:874
+#: version.c:856
 msgid "with X11-Athena GUI."
 msgstr "con GUI X11-Athena."
 
-#: version.c:878
+#: version.c:860
 msgid "with BeOS GUI."
 msgstr "con GUI para BeOS."
 
-#: version.c:881
+#: version.c:863
 msgid "with Photon GUI."
 msgstr "con GUI para Photon."
 
-#: version.c:884
+#: version.c:866
 msgid "with GUI."
 msgstr "con GUI."
 
-#: version.c:887
+#: version.c:869
 msgid "with Carbon GUI."
 msgstr "con Carbon GUI."
 
-#: version.c:890
+#: version.c:872
 msgid "with Cocoa GUI."
 msgstr "con Cocoa GUI."
 
-#: version.c:893
+#: version.c:875
 msgid "with (classic) GUI."
 msgstr "con GUI (clásico)."
 
-#: version.c:904
+#: version.c:886
 msgid "  Features included (+) or not (-):\n"
 msgstr "  Aspectos incluidos (+) o no (-):\n"
 
-#: version.c:916
+#: version.c:898
 msgid "   system vimrc file: \""
 msgstr "     fichero «vimrc» del sistema: \""
 
-#: version.c:921
+#: version.c:903
 msgid "     user vimrc file: \""
 msgstr "     fichero «vimrc» del usuario: \""
 
-#: version.c:926
+#: version.c:908
 msgid " 2nd user vimrc file: \""
 msgstr "  2º fichero «vimrc» del usuario: \""
 
-#: version.c:931
+#: version.c:913
 msgid " 3rd user vimrc file: \""
 msgstr " 3er fichero «vimrc» del usuario: \""
 
-#: version.c:936
+#: version.c:918
 msgid "      user exrc file: \""
 msgstr "      fichero «exrc» del usuario: \""
 
-#: version.c:941
+#: version.c:923
 msgid "  2nd user exrc file: \""
 msgstr "   2º fichero «exrc» del usuario: \""
 
-#: version.c:947
+#: version.c:929
 msgid "  system gvimrc file: \""
 msgstr "    fichero «gvimrc» del sistema: \""
 
-#: version.c:951
+#: version.c:933
 msgid "    user gvimrc file: \""
 msgstr "    fichero «gvimrc» del usuario: \""
 
-#: version.c:955
+#: version.c:937
 msgid "2nd user gvimrc file: \""
 msgstr " 2º fichero «gvimrc» del usuario: \""
 
-#: version.c:960
+#: version.c:942
 msgid "3rd user gvimrc file: \""
 msgstr "3er fichero «gvimrc» del usuario: \""
 
-#: version.c:967
+#: version.c:949
 msgid "    system menu file: \""
 msgstr "     fichero de menú del sistema: \""
 
-#: version.c:975
+#: version.c:957
 msgid "  fall-back for $VIM: \""
 msgstr "            localización de $VIM: \""
 
-#: version.c:981
+#: version.c:963
 msgid " f-b for $VIMRUNTIME: \""
 msgstr "     localización de $VIMRUNTIME: \""
 
-#: version.c:985
+#: version.c:967
 msgid "Compilation: "
 msgstr "Compilación: "
 
-#: version.c:991
+#: version.c:973
 msgid "Compiler: "
 msgstr "Compilador: "
 
-#: version.c:996
+#: version.c:978
 msgid "Linking: "
 msgstr "Enlazado: "
 
-#: version.c:1001
+#: version.c:983
 msgid "  DEBUG BUILD"
 msgstr "  COMPILACIÓN CON SÍMBOLOS DE DEPURACIÓN"
 
-#: version.c:1040
+#: version.c:1022
 msgid "VIM - Vi IMproved"
 msgstr "VIM - VI Mejorado"
 
-#: version.c:1042
+#: version.c:1024
 msgid "version "
 msgstr "versión "
 
-#: version.c:1043
+#: version.c:1025
 msgid "by Bram Moolenaar et al."
 msgstr "por Bram Moolenaar et al."
 
-#: version.c:1047
+#: version.c:1029
 msgid "Vim is open source and freely distributable"
 msgstr "Vim es código abierto y se puede distribuir libremente"
 
-#: version.c:1049
+#: version.c:1031
 msgid "Help poor children in Uganda!"
 msgstr "¡Ayude a los niños pobres de Uganda!"
 
-#: version.c:1050
+#: version.c:1032
 msgid "type  :help iccf<Enter>       for information "
 msgstr "escriba  «:help iccf<Intro>»    para más información  "
 
-#: version.c:1052
+#: version.c:1034
 msgid "type  :q<Enter>               to exit         "
 msgstr "escriba  «:q<Intro>»            para salir             "
 
-#: version.c:1053
+#: version.c:1035
 msgid "type  :help<Enter>  or  <F1>  for on-line help"
 msgstr "escriba  «:help<Intro> o <F1>»  para obtener ayuda     "
 
-#: version.c:1054
+#: version.c:1036
 msgid "type  :help version6<Enter>   for version info"
 msgstr "escriba «:help version6<Intro>» para información de la versión"
 
-#: version.c:1057
+#: version.c:1039
 msgid "Running in Vi compatible mode"
 msgstr "Ejecutando en modo compatible con Vi"
 
+#: version.c:1040
+msgid "type  :set nocp<Enter>        for Vim defaults"
+msgstr "escriba  «:set nocp<Intro>»  para los valores predefinidos de Vim"
+
+#: version.c:1041
+msgid "type  :help cp-default<Enter> for info on this"
+msgstr "escriba «:help cp-default<Intro>»        para más información"
+
+#: version.c:1056
+msgid "menu  Help->Orphans           for information    "
+msgstr "menú  Ayuda->Ayude a los niños huérfanos      para más información "
+
 #: version.c:1058
-msgid "type  :set nocp<Enter>        for Vim defaults"
-msgstr "escriba  «:set nocp<Intro>»  para los valores predefinidos de Vim"
+msgid "Running modeless, typed text is inserted"
+msgstr "Ejecución no modal, el texto escrito se inserta directamente"
 
 #: version.c:1059
-msgid "type  :help cp-default<Enter> for info on this"
-msgstr "escriba «:help cp-default<Intro>»        para más información"
-
-#: version.c:1074
-msgid "menu  Help->Orphans           for information    "
-msgstr "menú  Ayuda->Ayude a los niños huérfanos      para más información "
-
-#: version.c:1076
-msgid "Running modeless, typed text is inserted"
-msgstr "Ejecución no modal, el texto escrito se inserta directamente"
-
-#: version.c:1077
 msgid "menu  Edit->Global Settings->Toggle Insert Mode  "
 msgstr "menu Editar->Opciones globales->Activar/Desactivar modo de inserción"
 
-#: version.c:1078
+#: version.c:1060
 msgid "                              for two modes      "
 msgstr "                                                 para dos modos     "
 
-#: version.c:1082
+#: version.c:1064
 msgid "menu  Edit->Global Settings->Toggle Vi Compatible"
 msgstr ""
 "menu Editar->Opciones globales->Activar/Desactivar compatibilidad con Vi"
 
-#: version.c:1083
+#: version.c:1065
 msgid "                              for Vim defaults   "
 msgstr ""
 "                                 para los valores predeterminados de Vim"
 
-#: version.c:1130
+#: version.c:1112
 msgid "Sponsor Vim development!"
 msgstr "¡Patrocine el desarrollo de Vim!"
 
-#: version.c:1131
+#: version.c:1113
 msgid "Become a registered Vim user!"
 msgstr "¡Conviertase en un usuario registrado de Vim!"
 
-#: version.c:1134
+#: version.c:1116
 msgid "type  :help sponsor<Enter>    for information "
 msgstr "escriba  :help sponsor<Intro>     para más información  "
 
-#: version.c:1135
+#: version.c:1117
 msgid "type  :help register<Enter>   for information "
 msgstr "escriba «:help register<Intro>»    para más información  "
 
-#: version.c:1137
+#: version.c:1119
 msgid "menu  Help->Sponsor/Register  for information    "
 msgstr "menu  Ayuda->Benefactor/Regístrese  para más información."
 
-#: version.c:1147
+#: version.c:1129
 msgid "WARNING: Windows 95/98/ME detected"
 msgstr "AVISO: se ha detectado Windows 95/98/ME"
 
-#: version.c:1150
+#: version.c:1132
 msgid "type  :help windows95<Enter>  for info on this"
 msgstr "escriba: «:help windows95<Intro>» para más información"
 
@@ -6313,7 +6325,7 @@ msgstr "E446: No hay un nombre de ficher
 msgid "E447: Can't find file \"%s\" in path"
 msgstr "E447: No se puede encontrar el fichero «%s» en la ruta"
 
-#: if_perl.xs:326 globals.h:1236
+#: if_perl.xs:326 globals.h:1241
 #, c-format
 msgid "E370: Could not load library %s"
 msgstr "E370: No se pudo cargar la biblioteca dinámica %s."
@@ -6368,7 +6380,7 @@ msgstr "error en gvimext.dll"
 msgid "Path length too long!"
 msgstr "¡La ruta de acceso es demasiado larga!"
 
-#: globals.h:1026
+#: globals.h:1031
 msgid "--No lines in buffer--"
 msgstr "--No hay líneas en el buffer--"
 
@@ -6378,395 +6390,395 @@ msgstr "--No hay líneas en el buffer--"
 #. * The error messages that can be shared are included here.
 #. * Excluded are errors that are only used once and debugging messages.
 #.
-#: globals.h:1189
+#: globals.h:1194
 msgid "E470: Command aborted"
 msgstr "E470: El comando abortó."
 
-#: globals.h:1190
+#: globals.h:1195
 msgid "E471: Argument required"
 msgstr "E471: Se requiere un argumento."
 
-#: globals.h:1191
+#: globals.h:1196
 msgid "E10: \\ should be followed by /, ? or &"
 msgstr "E10: \\ debería ir seguido de /, ? o &."
 
-#: globals.h:1193
+#: globals.h:1198
 msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"
 msgstr ""
 "E11: No es válido en la ventana de la línea de comandos: <CR> ejecuta, CTRL-"
 "C sale."
 
-#: globals.h:1195
+#: globals.h:1200
 msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
 msgstr ""
 "E12: Comando no permitido desde exrc/vimrc en el dir en curso o al buscar "
 "«tags»"
 
-#: globals.h:1197
+#: globals.h:1202
 msgid "E171: Missing :endif"
 msgstr "E171: Falta «:endif»"
 
-#: globals.h:1198
+#: globals.h:1203
 msgid "E600: Missing :endtry"
 msgstr "E600: Falta «:endtry»"
 
-#: globals.h:1199
+#: globals.h:1204
 msgid "E170: Missing :endwhile"
 msgstr "E170: Falta «:endwhile»"
 
-#: globals.h:1200
+#: globals.h:1205
 msgid "E588: :endwhile without :while"
 msgstr "E588: «:endwhile» sin «:while»."
 
-#: globals.h:1202
+#: globals.h:1207
 msgid "E13: File exists (add ! to override)"
 msgstr "E13: El fichero ya existe (use ! para sobreescribir)"
 
-#: globals.h:1203
+#: globals.h:1208
 msgid "E472: Command failed"
 msgstr "E472: Falló el comando"
 
-#: globals.h:1205
+#: globals.h:1210
 #, c-format
 msgid "E234: Unknown fontset: %s"
 msgstr "E234: Conjunto de fuentes de impresión desconocido: %s"
 
-#: globals.h:1209
+#: globals.h:1214
 #, c-format
 msgid "E235: Unknown font: %s"
 msgstr "E235: Fuente de impresión desconocida: %s"
 
-#: globals.h:1212
+#: globals.h:1217
 #, c-format
 msgid "E236: Font \"%s\" is not fixed-width"
 msgstr "E236: La fuente de impresión «%s» no es de ancho fijo"
 
-#: globals.h:1214
+#: globals.h:1219
 msgid "E473: Internal error"
 msgstr "E473: Error interno."
 
-#: globals.h:1215
+#: globals.h:1220
 msgid "Interrupted"
 msgstr "Interrumpido"
 
-#: globals.h:1216
+#: globals.h:1221
 msgid "E14: Invalid address"
 msgstr "E14: Dirección no válida"
 
-#: globals.h:1217
+#: globals.h:1222
 msgid "E474: Invalid argument"
 msgstr "E474: argumento no válido"
 
-#: globals.h:1218
+#: globals.h:1223
 #, c-format
 msgid "E475: Invalid argument: %s"
 msgstr "E475: Argumento no válido: %s."
 
-#: globals.h:1220
+#: globals.h:1225
 #, c-format
 msgid "E15: Invalid expression: %s"
 msgstr "E15: Expresión no válida: %s"
 
-#: globals.h:1222
+#: globals.h:1227
 msgid "E16: Invalid range"
 msgstr "E16: Rango no válido"
 
-#: globals.h:1223
+#: globals.h:1228
 msgid "E476: Invalid command"
 msgstr "E476: Nombre de comando no válido"
 
-#: globals.h:1225
+#: globals.h:1230
 #, c-format
 msgid "E17: \"%s\" is a directory"
 msgstr "E17: «%s» es un directorio"
 
-#: globals.h:1228
+#: globals.h:1233
 msgid "E18: Unexpected characters before '='"
 msgstr "E18: Caracteres inesperados delante de «=»"
 
-#: globals.h:1231
+#: globals.h:1236
 #, c-format
 msgid "E364: Library call failed for \"%s()\""
 msgstr "E364: Falló la llamada a biblioteca para «%s»()"
 
-#: globals.h:1237
+#: globals.h:1242
 #, c-format
 msgid "E448: Could not load library function %s"
 msgstr "E448: Could not load library function %s"
 
-#: globals.h:1239
+#: globals.h:1244
 msgid "E19: Mark has invalid line number"
 msgstr "E19: La marca tiene un número de línea no válido"
 
-#: globals.h:1240
+#: globals.h:1245
 msgid "E20: Mark not set"
 msgstr "E20: Marca sin poner"
 
-#: globals.h:1241
+#: globals.h:1246
 msgid "E21: Cannot make changes, 'modifiable' is off"
 msgstr "E21: No se pueden hacer cambios, «modifiable» está desactivado"
 
-#: globals.h:1242
+#: globals.h:1247
 msgid "E22: Scripts nested too deep"
 msgstr "E22: Demasiados «scripts» anidados"
 
-#: globals.h:1243
+#: globals.h:1248
 msgid "E23: No alternate file"
 msgstr "E23: No hay un fichero alternativo"
 
-#: globals.h:1244
+#: globals.h:1249
 msgid "E24: No such abbreviation"
 msgstr "E24: Tal abreviatura no existe"
 
-#: globals.h:1245
+#: globals.h:1250
 msgid "E477: No ! allowed"
 msgstr "E477: «!» no está permitido."
 
-#: globals.h:1247
+#: globals.h:1252
 msgid "E25: GUI cannot be used: Not enabled at compile time"
 msgstr "E25: No se puede usar el GUI: no se ha activado al compilar."
 
-#: globals.h:1250
+#: globals.h:1255
 msgid "E26: Hebrew cannot be used: Not enabled at compile time\n"
 msgstr "E26: No se puede usar el hebreo: no se ha activado al compilar\n"
 
-#: globals.h:1253
+#: globals.h:1258
 msgid "E27: Farsi cannot be used: Not enabled at compile time\n"
 msgstr ""
 "E27: No se puede usar el persa (farsi): no se ha activado al compilar\n"
 
-#: globals.h:1256
+#: globals.h:1261
 msgid "E800: Arabic cannot be used: Not enabled at compile time\n"
 msgstr "E800: No se puede usar el árabe: no se ha activado al compilar\n"
 
-#: globals.h:1259
+#: globals.h:1264
 #, c-format
 msgid "E28: No such highlight group name: %s"
 msgstr "E28: No existe el grupo de realzado con ese nombre: %s"
 
-#: globals.h:1261
+#: globals.h:1266
 msgid "E29: No inserted text yet"
 msgstr "E29: Aún no ha insertado texto."
 
-#: globals.h:1262
+#: globals.h:1267
 msgid "E30: No previous command line"
 msgstr "E30: No hay una línea de comandos previa"
 
-#: globals.h:1263
+#: globals.h:1268
 msgid "E31: No such mapping"
 msgstr "E31: No existe tal asociación."
 
-#: globals.h:1264
+#: globals.h:1269
 msgid "E479: No match"
 msgstr "E479: No hay coincidencia."
 
-#: globals.h:1265
+#: globals.h:1270
 #, c-format
 msgid "E480: No match: %s"
 msgstr "E480: No coincide: %s"
 
-#: globals.h:1266
+#: globals.h:1271
 msgid "E32: No file name"
 msgstr "E32: No hay un nombre de fichero."
 
-#: globals.h:1267
+#: globals.h:1272
 msgid "E33: No previous substitute regular expression"
 msgstr "E33: No existe una expresión regular de sustitución previa."
 
-#: globals.h:1268
+#: globals.h:1273
 msgid "E34: No previous command"
 msgstr "E34: No existe un comando previo."
 
-#: globals.h:1269
+#: globals.h:1274
 msgid "E35: No previous regular expression"
 msgstr "E35: No existe una expresión regular previa."
 
-#: globals.h:1270
+#: globals.h:1275
 msgid "E481: No range allowed"
 msgstr "E481: El rango no está permitido."
 
-#: globals.h:1272
+#: globals.h:1277
 msgid "E36: Not enough room"
 msgstr "E36: No hay espacio suficiente."
 
-#: globals.h:1275
+#: globals.h:1280
 #, c-format
 msgid "E247: no registered server named \"%s\""
 msgstr "E247: El servidor «%s» no está registrado."
 
-#: globals.h:1277
+#: globals.h:1282
 #, c-format
 msgid "E482: Can't create file %s"
 msgstr "E482: No se puede crear el fichero «%s»"
 
-#: globals.h:1278
+#: globals.h:1283
 msgid "E483: Can't get temp file name"
 msgstr "E483: No puedo obtener el nombre del fichero temporal."
 
-#: globals.h:1279
+#: globals.h:1284
 #, c-format
 msgid "E484: Can't open file %s"
 msgstr "E484: No puedo abrir el fichero «%s»"
 
-#: globals.h:1280
+#: globals.h:1285
 #, c-format
 msgid "E485: Can't read file %s"
 msgstr "E485: No puedo leer el fichero «%s»."
 
-#: globals.h:1281
+#: globals.h:1286
 msgid "E37: No write since last change (add ! to override)"
 msgstr ""
 "E37: No se ha guardado el fichero desde el último cambio (añada ! para "
 "forzar)."
 
-#: globals.h:1282
+#: globals.h:1287
 msgid "E38: Null argument"
 msgstr "E38: Argumento nulo."
 
-#: globals.h:1284
+#: globals.h:1289
 msgid "E39: Number expected"
 msgstr "E39: Esperaba un número."
 
-#: globals.h:1287
+#: globals.h:1292
 #, c-format
 msgid "E40: Can't open errorfile %s"
 msgstr "E40: No puedo abrir el fichero de errores %s."
 
-#: globals.h:1290
+#: globals.h:1295
 msgid "E233: cannot open display"
 msgstr "E233: No se puede abrir la pantalla."
 
-#: globals.h:1292
+#: globals.h:1297
 msgid "E41: Out of memory!"
 msgstr "E41: ¡Memoria agotada!"
 
-#: globals.h:1294
+#: globals.h:1299
 msgid "Pattern not found"
 msgstr "No se encontró el patrón de búsqueda."
 
-#: globals.h:1296
+#: globals.h:1301
 #, c-format
 msgid "E486: Pattern not found: %s"
 msgstr "E486: No se encontró el patrón de búsqueda: %s"
 
-#: globals.h:1297
+#: globals.h:1302
 msgid "E487: Argument must be positive"
 msgstr "E487: El argumento debe ser positivo."
 
-#: globals.h:1299
+#: globals.h:1304
 msgid "E459: Cannot go back to previous directory"
 msgstr "E459: No puedo regresar al directorio previo."
 
-#: globals.h:1303
+#: globals.h:1308
 msgid "E42: No Errors"
 msgstr "E42: No hay errores"
 
-#: globals.h:1305
+#: globals.h:1310
 msgid "E43: Damaged match string"
 msgstr "E43: Cadena de concidencia dañada."
 
-#: globals.h:1306
+#: globals.h:1311
 msgid "E44: Corrupted regexp program"
 msgstr "E44: El programa «regexp» está corrupto."
 
-#: globals.h:1307
+#: globals.h:1312
 msgid "E45: 'readonly' option is set (add ! to override)"
 msgstr "E45: Está activa la opción «readonly» (añada «!» para forzar)."
 
-#: globals.h:1309
+#: globals.h:1314
 #, c-format
 msgid "E46: Cannot set read-only variable \"%s\""
 msgstr "E46: No se puede definir la variable de sólo lectura «%s»."
 
-#: globals.h:1312
+#: globals.h:1317
 msgid "E47: Error while reading errorfile"
 msgstr "E47: Error al leer el fichero de errores."
 
-#: globals.h:1315
+#: globals.h:1320
 msgid "E48: Not allowed in sandbox"
 msgstr "E48: No se permite en el ambiente protegido."
 
-#: globals.h:1317
+#: globals.h:1322
 msgid "E523: Not allowed here"
 msgstr "E523: No se permite aquí."
 
-#: globals.h:1320
+#: globals.h:1325
 msgid "E359: Screen mode setting not supported"
 msgstr "E359: La configuración de la pantalla no es válida."
 
-#: globals.h:1322
+#: globals.h:1327
 msgid "E49: Invalid scroll size"
 msgstr "E49: El tamaño de desplazamiento no válido."
 
-#: globals.h:1323
+#: globals.h:1328
 msgid "E91: 'shell' option is empty"
 msgstr "E91: La opción «shell» está vacía."
 
-#: globals.h:1325
+#: globals.h:1330
 msgid "E255: Couldn't read in sign data!"
 msgstr "E255: ¡No se pudo leer los datos de los signos!"
 
-#: globals.h:1327
+#: globals.h:1332
 msgid "E72: Close error on swap file"
 msgstr "E72: Error de cierre en el fichero de intercambio"
 
-#: globals.h:1328
+#: globals.h:1333
 msgid "E73: tag stack empty"
 msgstr "E73: La pila de «tags» está vacía."
 
-#: globals.h:1329
+#: globals.h:1334
 msgid "E74: Command too complex"
 msgstr "E74: El comando es demasiado complejo."
 
-#: globals.h:1330
+#: globals.h:1335
 msgid "E75: Name too long"
 msgstr "E75: El nombre es demasiado largo."
 
-#: globals.h:1331
+#: globals.h:1336
 msgid "E76: Too many ["
 msgstr "E76: Hay demasiados ["
 
-#: globals.h:1332
+#: globals.h:1337
 msgid "E77: Too many file names"
 msgstr "E77: Hay demasiados nombres de ficheros."
 
-#: globals.h:1333
+#: globals.h:1338
 msgid "E488: Trailing characters"
 msgstr "E488: Caracteres en exceso al final de la línea."
 
-#: globals.h:1334
+#: globals.h:1339
 msgid "E78: Unknown mark"
 msgstr "E78: Marca desconocida."
 
-#: globals.h:1335
+#: globals.h:1340
 msgid "E79: Cannot expand wildcards"
 msgstr "E79: No puedo expandir los comodines."
 
-#: globals.h:1337
+#: globals.h:1342
 msgid "E591: 'winheight' cannot be smaller than 'winminheight'"
 msgstr "E591: «winheight» no puede ser más pequeño que «winminheight»."
 
-#: globals.h:1339
+#: globals.h:1344
 msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'"
 msgstr "E592: «winwidth» no puede ser más pequeño que «winminwidth»."
 
-#: globals.h:1342
+#: globals.h:1347
 msgid "E80: Error while writing"
 msgstr "E80: Error al escribir el fichero."
 
-#: globals.h:1343
+#: globals.h:1348
 msgid "Zero count"
 msgstr "El recuento es cero."
 
-#: globals.h:1345
+#: globals.h:1350
 msgid "E81: Using <SID> not in a script context"
 msgstr "E81: Usando <SID> en un contexto que no es de «script»"
 
-#: globals.h:1348
+#: globals.h:1353
 msgid "E449: Invalid expression received"
 msgstr "E449: Recibí una expresión inválida."
 
-#: globals.h:1351
+#: globals.h:1356
 msgid "E463: Region is guarded, cannot modify"
 msgstr "E463: La región está protegida, no puedo modificarla."
 
--- a/src/vim.h
+++ b/src/vim.h
@@ -726,6 +726,7 @@ extern char* (*dyn_libintl_textdomain)(c
 #define REMAP_YES	0	/* allow remapping */
 #define REMAP_NONE	-1	/* no remapping */
 #define REMAP_SCRIPT	-2	/* remap script-local mappings only */
+#define REMAP_SKIP	-3	/* no remapping for first char */
 
 /* Values for mch_call_shell() second argument */
 #define SHELL_FILTER	1	/* filtering text */