diff --git a/7.2.027 b/7.2.027
new file mode 100644
index 0000000..59d708d
--- /dev/null
+++ b/7.2.027
@@ -0,0 +1,98 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.027
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.027
+Problem:    Can use cscope commands in the sandbox.
+Solution:   Disallow them, they might not be safe.
+Files:	    src/ex_cmds.h
+
+
+*** ../vim-7.2.026/src/ex_cmds.h	Thu Sep 18 12:43:21 2008
+--- src/ex_cmds.h	Thu Sep 18 22:18:14 2008
+***************
+*** 278,284 ****
+  EX(CMD_crewind,		"crewind",	ex_cc,
+  			RANGE|NOTADR|COUNT|TRLBAR|BANG),
+  EX(CMD_cscope,		"cscope",	do_cscope,
+! 			EXTRA|NOTRLCOM|SBOXOK|XFILE),
+  EX(CMD_cstag,		"cstag",	do_cstag,
+  			BANG|TRLBAR|WORD1),
+  EX(CMD_cunmap,		"cunmap",	ex_unmap,
+--- 278,284 ----
+  EX(CMD_crewind,		"crewind",	ex_cc,
+  			RANGE|NOTADR|COUNT|TRLBAR|BANG),
+  EX(CMD_cscope,		"cscope",	do_cscope,
+! 			EXTRA|NOTRLCOM|XFILE),
+  EX(CMD_cstag,		"cstag",	do_cstag,
+  			BANG|TRLBAR|WORD1),
+  EX(CMD_cunmap,		"cunmap",	ex_unmap,
+***************
+*** 506,512 ****
+  EX(CMD_lclose,		"lclose",	ex_cclose,
+  			RANGE|NOTADR|COUNT|TRLBAR),
+  EX(CMD_lcscope,		"lcscope",	do_cscope,
+! 			EXTRA|NOTRLCOM|SBOXOK|XFILE),
+  EX(CMD_left,		"left",		ex_align,
+  			TRLBAR|RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY),
+  EX(CMD_leftabove,	"leftabove",	ex_wrongmodifier,
+--- 506,512 ----
+  EX(CMD_lclose,		"lclose",	ex_cclose,
+  			RANGE|NOTADR|COUNT|TRLBAR),
+  EX(CMD_lcscope,		"lcscope",	do_cscope,
+! 			EXTRA|NOTRLCOM|XFILE),
+  EX(CMD_left,		"left",		ex_align,
+  			TRLBAR|RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY),
+  EX(CMD_leftabove,	"leftabove",	ex_wrongmodifier,
+***************
+*** 653,658 ****
+--- 653,660 ----
+  			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
+  EX(CMD_open,		"open",		ex_open,
+  			RANGE|EXTRA),
++ EX(CMD_oldfiles,	"oldfiles",	ex_oldfiles,
++ 			BANG|TRLBAR|SBOXOK|CMDWIN),
+  EX(CMD_omap,		"omap",		ex_map,
+  			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
+  EX(CMD_omapclear,	"omapclear",	ex_mapclear,
+***************
+*** 804,810 ****
+  EX(CMD_scriptencoding,	"scriptencoding", ex_scriptencoding,
+  			WORD1|TRLBAR|CMDWIN),
+  EX(CMD_scscope,		"scscope",	do_scscope,
+! 			EXTRA|NOTRLCOM|SBOXOK),
+  EX(CMD_set,		"set",		ex_set,
+  			TRLBAR|EXTRA|CMDWIN|SBOXOK),
+  EX(CMD_setfiletype,	"setfiletype",	ex_setfiletype,
+--- 806,812 ----
+  EX(CMD_scriptencoding,	"scriptencoding", ex_scriptencoding,
+  			WORD1|TRLBAR|CMDWIN),
+  EX(CMD_scscope,		"scscope",	do_scscope,
+! 			EXTRA|NOTRLCOM),
+  EX(CMD_set,		"set",		ex_set,
+  			TRLBAR|EXTRA|CMDWIN|SBOXOK),
+  EX(CMD_setfiletype,	"setfiletype",	ex_setfiletype,
+*** ../vim-7.2.026/src/version.c	Sat Nov  1 13:51:57 2008
+--- src/version.c	Thu Nov  6 10:21:21 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     27,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+179. You wonder why your household garbage can doesn't have an
+     "empty recycle bin" button.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.028 b/7.2.028
new file mode 100644
index 0000000..4f148e9
--- /dev/null
+++ b/7.2.028
@@ -0,0 +1,53 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.028
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.028
+Problem:    Confusing error message for missing ().
+Solution:   Change "braces" to "parentheses". (Gary Johnson)
+Files:	    src/eval.c
+
+
+*** ../vim-7.2.027/src/eval.c	Wed Sep 10 15:38:13 2008
+--- src/eval.c	Tue Sep 30 21:43:38 2008
+***************
+*** 3287,3293 ****
+  
+      if (*startarg != '(')
+      {
+! 	EMSG2(_("E107: Missing braces: %s"), eap->arg);
+  	goto end;
+      }
+  
+--- 3293,3299 ----
+  
+      if (*startarg != '(')
+      {
+! 	EMSG2(_("E107: Missing parentheses: %s"), eap->arg);
+  	goto end;
+      }
+  
+*** ../vim-7.2.027/src/version.c	Thu Nov  6 10:23:03 2008
+--- src/version.c	Thu Nov  6 11:02:51 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     28,
+  /**/
+
+-- 
+Wizards had always known that the act of observation changed the thing that
+was observed, and sometimes forgot that it also changed the observer too.
+			Terry Pratchett  -  Interesting times
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.029 b/7.2.029
new file mode 100644
index 0000000..56e847a
--- /dev/null
+++ b/7.2.029
@@ -0,0 +1,44 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.029
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.029
+Problem:    No completion for ":doautoall".
+Solution:   Complete ":doautoall" like ":doautocmd".  (Doug Kearns)
+Files:	    src/ex_docmd.c
+
+
+*** ../vim-7.2.028/src/ex_docmd.c	Thu Sep 18 21:29:07 2008
+--- src/ex_docmd.c	Mon Nov  3 21:21:17 2008
+***************
+*** 3609,3614 ****
+--- 3610,3616 ----
+  	    return set_context_in_autocmd(xp, arg, FALSE);
+  
+  	case CMD_doautocmd:
++ 	case CMD_doautoall:
+  	    return set_context_in_autocmd(xp, arg, TRUE);
+  #endif
+  	case CMD_set:
+*** ../vim-7.2.028/src/version.c	Thu Nov  6 11:04:50 2008
+--- src/version.c	Thu Nov  6 17:14:58 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     29,
+  /**/
+
+-- 
+Press any key to continue, press any other key to quit.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.030 b/7.2.030
new file mode 100644
index 0000000..310207e
--- /dev/null
+++ b/7.2.030
@@ -0,0 +1,51 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.030
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.030 (after 7.2.027)
+Problem:    Can't compile.
+Solution:   Remove prematurely added ex_oldfiles.
+Files:	    src/ex_cmds.h
+
+
+*** ../vim-7.2.029/src/ex_cmds.h	Thu Nov  6 10:23:03 2008
+--- src/ex_cmds.h	Thu Nov  6 20:45:07 2008
+***************
+*** 653,660 ****
+  			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
+  EX(CMD_open,		"open",		ex_open,
+  			RANGE|EXTRA),
+- EX(CMD_oldfiles,	"oldfiles",	ex_oldfiles,
+- 			BANG|TRLBAR|SBOXOK|CMDWIN),
+  EX(CMD_omap,		"omap",		ex_map,
+  			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
+  EX(CMD_omapclear,	"omapclear",	ex_mapclear,
+--- 653,658 ----
+*** ../vim-7.2.029/src/version.c	Thu Nov  6 17:16:06 2008
+--- src/version.c	Thu Nov  6 20:46:11 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     30,
+  /**/
+
+-- 
+% cat /usr/include/sys/errno.h
+#define	EPERM		1		/* Operation not permitted */
+#define	ENOENT		2		/* No such file or directory */
+#define	ESRCH		3		/* No such process */
+[...]
+#define EMACS		666		/* Too many macros */
+%
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.031 b/7.2.031
new file mode 100644
index 0000000..4b2bca7
--- /dev/null
+++ b/7.2.031
@@ -0,0 +1,1281 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.031
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.031
+Problem:    Information in the viminfo file about previously edited files is
+	    not available to the user.  There is no way to get a complete list
+	    of files edited in previous Vim sessions.
+Solution:   Add v:oldfiles and fill it with the list of old file names when
+	    first reading the viminfo file.  Add the ":oldfiles" command,
+	    ":browse oldfiles" and the "#<123" special file name.  Increase
+	    the default value for 'viminfo' from '20 to '100.
+Files:	    runtime/doc/cmdline.txt, runtime/doc/eval.txt,
+	    runtime/doc/starting.txt, runtime/doc/usr_21.txt, src/eval.c,
+	    src/ex_cmds.c, src/ex_cmds.h, src/ex_docmd.c, src/feature.h,
+	    src/fileio.c, src/main.c, src/mark.c, src/misc1.c,
+	    src/proto/eval.pro, src/proto/ex_cmds.pro, src/proto/mark.pro,
+	    src/option.c, src/structs.h, src/vim.h
+
+
+*** ../vim-7.2.030/runtime/doc/cmdline.txt	Sat Aug  9 19:36:46 2008
+--- runtime/doc/cmdline.txt	Thu Sep 18 22:55:27 2008
+***************
+*** 1,4 ****
+! *cmdline.txt*   For Vim version 7.2.  Last change: 2008 Jul 29
+  
+  
+  		  VIM REFERENCE MANUAL    by Bram Moolenaar
+--- 1,4 ----
+! *cmdline.txt*   For Vim version 7.2.  Last change: 2008 Sep 18
+  
+  
+  		  VIM REFERENCE MANUAL    by Bram Moolenaar
+***************
+*** 157,162 ****
+--- 157,167 ----
+  				(doesn't work at the expression prompt; some
+  				things such as changing the buffer or current
+  				window are not allowed to avoid side effects)
++ 				When the result is a |List| the items are used
++ 				as lines.  They can have line breaks inside
++ 				too.
++ 				When the result is a Float it's automatically
++ 				converted to a String.
+  		See |registers| about registers.  {not in Vi}
+  		Implementation detail: When using the |expression| register
+  		and invoking setcmdpos(), this sets the position before
+***************
+*** 730,748 ****
+  In Ex commands, at places where a file name can be used, the following
+  characters have a special meaning.  These can also be used in the expression
+  function expand() |expand()|.
+! 	%	is replaced with the current file name			*:_%*
+! 	#	is replaced with the alternate file name		*:_#*
+  	#n	(where n is a number) is replaced with the file name of
+! 		buffer n.  "#0" is the same as "#"
+! 	##	is replaced with all names in the argument list		*:_##*
+  		concatenated, separated by spaces.  Each space in a name
+  		is preceded with a backslash.
+! Note that these give the file name as it was typed.  If an absolute path is
+! needed (when using the file name from a different directory), you need to add
+! ":p".  See |filename-modifiers|.
+  Note that backslashes are inserted before spaces, so that the command will
+  correctly interpret the file name.  But this doesn't happen for shell
+! commands.  For those you probably have to use quotes: >
+  	:!ls "%"
+  	:r !spell "%"
+  
+--- 735,763 ----
+  In Ex commands, at places where a file name can be used, the following
+  characters have a special meaning.  These can also be used in the expression
+  function expand() |expand()|.
+! 	%	Is replaced with the current file name.		  *:_%* *c_%*
+! 	#	Is replaced with the alternate file name.	  *:_#* *c_#*
+  	#n	(where n is a number) is replaced with the file name of
+! 		buffer n.  "#0" is the same as "#".
+! 	##	Is replaced with all names in the argument list	  *:_##* *c_##*
+  		concatenated, separated by spaces.  Each space in a name
+  		is preceded with a backslash.
+! 	#<n	(where n is a number > 0) is replaced with old	  *:_#<* *c_#<*
+! 		file name n.  See |:oldfiles| or |v:oldfiles| to get the
+! 		number.							*E809*
+! 		{only when compiled with the +eval and +viminfo features}
+! 
+! Note that these, except "#<n", give the file name as it was typed.  If an
+! absolute path is needed (when using the file name from a different directory),
+! you need to add ":p".  See |filename-modifiers|.
+! 
+! The "#<n" item returns an absolute path, but it will start with "~/" for files
+! below your home directory.
+! 
+  Note that backslashes are inserted before spaces, so that the command will
+  correctly interpret the file name.  But this doesn't happen for shell
+! commands.  For those you probably have to use quotes (this fails for files
+! that contain a quote and wildcards): >
+  	:!ls "%"
+  	:r !spell "%"
+  
+*** ../vim-7.2.030/runtime/doc/eval.txt	Sat Aug  9 19:36:47 2008
+--- runtime/doc/eval.txt	Sun Nov  2 14:25:38 2008
+***************
+*** 1,4 ****
+! *eval.txt*	For Vim version 7.2.  Last change: 2008 Aug 09
+  
+  
+  		  VIM REFERENCE MANUAL	  by Bram Moolenaar
+--- 1,4 ----
+! *eval.txt*	For Vim version 7.2.  Last change: 2008 Nov 02
+  
+  
+  		  VIM REFERENCE MANUAL	  by Bram Moolenaar
+***************
+*** 1484,1489 ****
+--- 1484,1500 ----
+  		This is the screen column number, like with |virtcol()|.  The
+  		value is zero when there was no mouse button click.
+  
++ 					*v:oldfiles* *oldfiles-variable*
++ v:oldfiles	List of file names that is loaded from the |viminfo| file on
++ 		startup.  These are the files that Vim remembers marks for.
++ 		The length of the List is limited by the ' argument of the
++ 		'viminfo' option (default is 100).
++ 		Also see |:oldfiles| and |c_#<|.
++ 		The List can be modified, but this has no effect on what is
++ 		stored in the |viminfo| file later.  If you use values other
++ 		than String this will cause trouble.
++ 		{only when compiled with the +viminfo feature}
++ 
+  					*v:operator* *operator-variable*
+  v:operator	The last operator given in Normal mode.  This is a single
+  		character except for commands starting with <g> or <z>,
+*** ../vim-7.2.030/runtime/doc/starting.txt	Sat Aug  9 19:36:52 2008
+--- runtime/doc/starting.txt	Sun Nov  9 12:12:19 2008
+***************
+*** 1,4 ****
+! *starting.txt*  For Vim version 7.2.  Last change: 2008 Jun 21
+  
+  
+  		  VIM REFERENCE MANUAL    by Bram Moolenaar
+--- 1,4 ----
+! *starting.txt*  For Vim version 7.2.  Last change: 2008 Nov 09
+  
+  
+  		  VIM REFERENCE MANUAL    by Bram Moolenaar
+***************
+*** 1337,1344 ****
+  							*viminfo-read*
+  When Vim is started and the 'viminfo' option is non-empty, the contents of
+  the viminfo file are read and the info can be used in the appropriate places.
+! The marks are not read in at startup (but file marks are).  See
+! |initialization| for how to set the 'viminfo' option upon startup.
+  
+  							*viminfo-write*
+  When Vim exits and 'viminfo' is non-empty, the info is stored in the viminfo
+--- 1335,1343 ----
+  							*viminfo-read*
+  When Vim is started and the 'viminfo' option is non-empty, the contents of
+  the viminfo file are read and the info can be used in the appropriate places.
+! The |v:oldfiles| variable is filled.  The marks are not read in at startup
+! (but file marks are).  See |initialization| for how to set the 'viminfo'
+! option upon startup.
+  
+  							*viminfo-write*
+  When Vim exits and 'viminfo' is non-empty, the info is stored in the viminfo
+***************
+*** 1372,1377 ****
+--- 1371,1378 ----
+  that start with any string given with the "r" flag in 'viminfo'.  This can be
+  used to avoid saving marks for files on removable media (for MS-DOS you would
+  use "ra:,rb:", for Amiga "rdf0:,rdf1:,rdf2:").
++ The |v:oldfiles| variable is filled with the file names that the viminfo file
++ has marks for.
+  
+  							*viminfo-file-marks*
+  Uppercase marks ('A to 'Z) are stored when writing the viminfo file.  The
+***************
+*** 1463,1470 ****
+  						   *:rv* *:rviminfo* *E195*
+  :rv[iminfo][!] [file]	Read from viminfo file [file] (default: see above).
+  			If [!] is given, then any information that is
+! 			already set (registers, marks, etc.) will be
+! 			overwritten.  {not in Vi}
+  
+  					*:wv* *:wviminfo* *E137* *E138* *E574*
+  :wv[iminfo][!] [file]	Write to viminfo file [file] (default: see above).
+--- 1464,1471 ----
+  						   *:rv* *:rviminfo* *E195*
+  :rv[iminfo][!] [file]	Read from viminfo file [file] (default: see above).
+  			If [!] is given, then any information that is
+! 			already set (registers, marks, |v:oldfiles|, etc.)
+! 			will be overwritten   {not in Vi}
+  
+  					*:wv* *:wviminfo* *E137* *E138* *E574*
+  :wv[iminfo][!] [file]	Write to viminfo file [file] (default: see above).
+***************
+*** 1479,1482 ****
+--- 1480,1499 ----
+  			the .viminfo file.
+  			{not in Vi}
+  
++ 						*:ol* *:oldfiles*
++ :ol[dfiles]		List the files that have marks stored in the viminfo
++ 			file.  This list is read on startup and only changes
++ 			afterwards with ":rviminfo!".  Also see |v:oldfiles|.
++ 			The number can be used with |c_#<|.
++ 			{not in Vi, only when compiled with the +eval feature}
++ 
++ :bro[wse] ol[dfiles][!]
++ 			List file names as with |:oldfiles|, and then prompt
++ 			for a number.  When the number is valid that file from
++ 			the list is edited.
++ 			If you get the |press-enter| prompt you can press "q"
++ 			and still get the prompt to enter a file number.
++ 			Use ! to abondon a modified buffer. |abandon|
++ 			{not when compiled with tiny or small features}
++ 
+   vim:tw=78:ts=8:ft=help:norl:
+*** ../vim-7.2.030/runtime/doc/usr_21.txt	Sat Aug  9 19:36:53 2008
+--- runtime/doc/usr_21.txt	Sun Nov  9 12:14:10 2008
+***************
+*** 1,4 ****
+! *usr_21.txt*	For Vim version 7.2.  Last change: 2007 May 01
+  
+  		     VIM USER MANUAL - by Bram Moolenaar
+  
+--- 1,4 ----
+! *usr_21.txt*	For Vim version 7.2.  Last change: 2008 Nov 09
+  
+  		     VIM USER MANUAL - by Bram Moolenaar
+  
+***************
+*** 153,159 ****
+  to be lost.  Each item can be remembered only once.
+  
+  
+! GETTING BACK TO WHERE YOU WERE
+  
+  You are halfway editing a file and it's time to leave for holidays.  You exit
+  Vim and go enjoy yourselves, forgetting all about your work.  After a couple
+--- 153,159 ----
+  to be lost.  Each item can be remembered only once.
+  
+  
+! GETTING BACK TO WHERE YOU STOPPED VIM
+  
+  You are halfway editing a file and it's time to leave for holidays.  You exit
+  Vim and go enjoy yourselves, forgetting all about your work.  After a couple
+***************
+*** 168,173 ****
+--- 168,215 ----
+     The |:marks| command is useful to find out where '0 to '9 will take you.
+  
+  
++ GETTING BACK TO SOME FILE
++ 
++ If you want to go back to a file that you edited recently, but not when
++ exiting Vim, there is a slightly more complicated way.  You can see a list of
++ files by typing the command: >
++ 
++ 	:oldfiles
++ <	1: ~/.viminfo ~
++ 	2: ~/text/resume.txt ~
++ 	3: /tmp/draft ~
++ 
++ Now you would like to edit the second file, which is in the list preceded by
++ "2:".  You type: >
++ 
++ 	:e #<2
++ 
++ Instead of ":e" you can use any command that has a file name argument, the
++ "#<2" item works in the same place as "%" (current file name) and "#"
++ (alternate file name).  So you can also split the window to edit the third
++ file: >
++ 
++ 	:split #<3
++ 
++ That #<123 thing is a bit complicated when you just want to edit a file.
++ Fortunately there is a simpler way: >
++ 
++ 	:browse oldfiles
++ <	1: ~/.viminfo ~
++ 	2: ~/text/resume.txt ~
++ 	3: /tmp/draft ~
++ 	-- More --
++ 
++ You get the same list of files as with |:oldfiles|.  If you want to edit
++ "resume.txt" first press "q" to stop the listing.  You will get a prompt:
++ 
++ 	Type number and <Enter> (empty cancels): ~
++ 
++ Type "2" and press <Enter> to edit the second file.
++ 
++ More info at |:oldfiles|, |v:oldfiles| and |c_#<|.
++ 
++ 
+  MOVE INFO FROM ONE VIM TO ANOTHER
+  
+  You can use the ":wviminfo" and ":rviminfo" commands to save and restore the
+*** ../vim-7.2.030/src/eval.c	Thu Nov  6 11:04:50 2008
+--- src/eval.c	Sun Nov  9 11:59:39 2008
+***************
+*** 348,353 ****
+--- 348,354 ----
+      {VV_NAME("mouse_col",	 VAR_NUMBER), 0},
+      {VV_NAME("operator",	 VAR_STRING), VV_RO},
+      {VV_NAME("searchforward",	 VAR_NUMBER), 0},
++     {VV_NAME("oldfiles",	 VAR_LIST), 0},
+  };
+  
+  /* shorthand */
+***************
+*** 355,360 ****
+--- 356,362 ----
+  #define vv_nr		vv_di.di_tv.vval.v_number
+  #define vv_float	vv_di.di_tv.vval.v_float
+  #define vv_str		vv_di.di_tv.vval.v_string
++ #define vv_list		vv_di.di_tv.vval.v_list
+  #define vv_tv		vv_di.di_tv
+  
+  /*
+***************
+*** 426,432 ****
+  static long list_idx_of_item __ARGS((list_T *l, listitem_T *item));
+  static void list_append __ARGS((list_T *l, listitem_T *item));
+  static int list_append_tv __ARGS((list_T *l, typval_T *tv));
+- static int list_append_string __ARGS((list_T *l, char_u *str, int len));
+  static int list_append_number __ARGS((list_T *l, varnumber_T n));
+  static int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
+  static int list_extend __ARGS((list_T	*l1, list_T *l2, listitem_T *bef));
+--- 428,433 ----
+***************
+*** 845,852 ****
+  	p = &vimvars[i];
+  	if (p->vv_di.di_tv.v_type == VAR_STRING)
+  	{
+! 	    vim_free(p->vv_di.di_tv.vval.v_string);
+! 	    p->vv_di.di_tv.vval.v_string = NULL;
+  	}
+      }
+      hash_clear(&vimvarht);
+--- 846,858 ----
+  	p = &vimvars[i];
+  	if (p->vv_di.di_tv.v_type == VAR_STRING)
+  	{
+! 	    vim_free(p->vv_string);
+! 	    p->vv_string = NULL;
+! 	}
+! 	else if (p->vv_di.di_tv.v_type == VAR_LIST)
+! 	{
+! 	    list_unref(p->vv_list);
+! 	    p->vv_list = NULL;
+  	}
+      }
+      hash_clear(&vimvarht);
+***************
+*** 6057,6062 ****
+--- 6063,6087 ----
+  }
+  
+  /*
++  * Get list item "l[idx - 1]" as a string.  Returns NULL for failure.
++  */
++     char_u *
++ list_find_str(l, idx)
++     list_T	*l;
++     long	idx;
++ {
++     listitem_T	*li;
++ 
++     li = list_find(l, idx - 1);
++     if (li == NULL)
++     {
++ 	EMSGN(_(e_listidx), idx);
++ 	return NULL;
++     }
++     return get_tv_string(&li->li_tv);
++ }
++ 
++ /*
+   * Locate "item" list "l" and return its index.
+   * Returns -1 when "item" is not in the list.
+   */
+***************
+*** 6147,6153 ****
+   * When "len" >= 0 use "str[len]".
+   * Returns FAIL when out of memory.
+   */
+!     static int
+  list_append_string(l, str, len)
+      list_T	*l;
+      char_u	*str;
+--- 6172,6178 ----
+   * When "len" >= 0 use "str[len]".
+   * Returns FAIL when out of memory.
+   */
+!     int
+  list_append_string(l, str, len)
+      list_T	*l;
+      char_u	*str;
+***************
+*** 6507,6512 ****
+--- 6532,6540 ----
+  	set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID);
+      }
+  
++     /* v: vars */
++     set_ref_in_ht(&vimvarht, copyID);
++ 
+      /*
+       * 2. Go through the list of dicts and free items without the copyID.
+       */
+***************
+*** 6597,6603 ****
+      {
+  	case VAR_DICT:
+  	    dd = tv->vval.v_dict;
+! 	    if (dd->dv_copyID != copyID)
+  	    {
+  		/* Didn't see this dict yet. */
+  		dd->dv_copyID = copyID;
+--- 6625,6631 ----
+      {
+  	case VAR_DICT:
+  	    dd = tv->vval.v_dict;
+! 	    if (dd != NULL && dd->dv_copyID != copyID)
+  	    {
+  		/* Didn't see this dict yet. */
+  		dd->dv_copyID = copyID;
+***************
+*** 6607,6613 ****
+  
+  	case VAR_LIST:
+  	    ll = tv->vval.v_list;
+! 	    if (ll->lv_copyID != copyID)
+  	    {
+  		/* Didn't see this list yet. */
+  		ll->lv_copyID = copyID;
+--- 6635,6641 ----
+  
+  	case VAR_LIST:
+  	    ll = tv->vval.v_list;
+! 	    if (ll != NULL && ll->lv_copyID != copyID)
+  	    {
+  		/* Didn't see this list yet. */
+  		ll->lv_copyID = copyID;
+***************
+*** 18106,18111 ****
+--- 18134,18150 ----
+  }
+  
+  /*
++  * Get List v: variable value.  Caller must take care of reference count when
++  * needed.
++  */
++     list_T *
++ get_vim_var_list(idx)
++     int		idx;
++ {
++     return vimvars[idx].vv_list;
++ }
++ 
++ /*
+   * Set v:count, v:count1 and v:prevcount.
+   */
+      void
+***************
+*** 18141,18146 ****
+--- 18180,18199 ----
+  }
+  
+  /*
++  * Set List v: variable to "val".
++  */
++     void
++ set_vim_var_list(idx, val)
++     int		idx;
++     list_T	*val;
++ {
++     list_unref(vimvars[idx].vv_list);
++     vimvars[idx].vv_list = val;
++     if (val != NULL)
++ 	++val->lv_refcount;
++ }
++ 
++ /*
+   * Set v:register if needed.
+   */
+      void
+***************
+*** 21900,21905 ****
+--- 21953,22014 ----
+      }
+  }
+  
++ /*
++  * List v:oldfiles in a nice way.
++  */
++ /*ARGSUSED*/
++     void
++ ex_oldfiles(eap)
++     exarg_T	*eap;
++ {
++     list_T	*l = vimvars[VV_OLDFILES].vv_list;
++     listitem_T	*li;
++     int		nr = 0;
++ 
++     if (l == NULL)
++ 	msg((char_u *)_("No old files"));
++     else
++     {
++ 	msg_start();
++ 	msg_scroll = TRUE;
++ 	for (li = l->lv_first; li != NULL && !got_int; li = li->li_next)
++ 	{
++ 	    msg_outnum((long)++nr);
++ 	    MSG_PUTS(": ");
++ 	    msg_outtrans(get_tv_string(&li->li_tv));
++ 	    msg_putchar('\n');
++ 	    out_flush();	    /* output one line at a time */
++ 	    ui_breakcheck();
++ 	}
++ 	/* Assume "got_int" was set to truncate the listing. */
++ 	got_int = FALSE;
++ 
++ #ifdef FEAT_BROWSE_CMD
++ 	if (cmdmod.browse)
++ 	{
++ 	    quit_more = FALSE;
++ 	    nr = prompt_for_number(FALSE);
++ 	    msg_starthere();
++ 	    if (nr > 0)
++ 	    {
++ 		char_u *p = list_find_str(get_vim_var_list(VV_OLDFILES),
++ 								    (long)nr);
++ 
++ 		if (p != NULL)
++ 		{
++ 		    p = expand_env_save(p);
++ 		    eap->arg = p;
++ 		    eap->cmdidx = CMD_edit;
++ 		    cmdmod.browse = FALSE;
++ 		    do_exedit(eap, NULL);
++ 		    vim_free(p);
++ 		}
++ 	    }
++ 	}
++ #endif
++     }
++ }
++ 
+  #endif /* FEAT_EVAL */
+  
+  
+*** ../vim-7.2.030/src/ex_cmds.c	Sun Sep 14 21:40:26 2008
+--- src/ex_cmds.c	Sun Sep 14 13:45:03 2008
+***************
+*** 24,30 ****
+  static void do_filter __ARGS((linenr_T line1, linenr_T line2, exarg_T *eap, char_u *cmd, int do_in, int do_out));
+  #ifdef FEAT_VIMINFO
+  static char_u *viminfo_filename __ARGS((char_u	*));
+! static void do_viminfo __ARGS((FILE *fp_in, FILE *fp_out, int want_info, int want_marks, int force_read));
+  static int viminfo_encoding __ARGS((vir_T *virp));
+  static int read_viminfo_up_to_marks __ARGS((vir_T *virp, int forceit, int writing));
+  #endif
+--- 24,30 ----
+  static void do_filter __ARGS((linenr_T line1, linenr_T line2, exarg_T *eap, char_u *cmd, int do_in, int do_out));
+  #ifdef FEAT_VIMINFO
+  static char_u *viminfo_filename __ARGS((char_u	*));
+! static void do_viminfo __ARGS((FILE *fp_in, FILE *fp_out, int flags));
+  static int viminfo_encoding __ARGS((vir_T *virp));
+  static int read_viminfo_up_to_marks __ARGS((vir_T *virp, int forceit, int writing));
+  #endif
+***************
+*** 1676,1689 ****
+  
+  /*
+   * read_viminfo() -- Read the viminfo file.  Registers etc. which are already
+!  * set are not over-written unless force is TRUE. -- webb
+   */
+      int
+! read_viminfo(file, want_info, want_marks, forceit)
+!     char_u	*file;
+!     int		want_info;
+!     int		want_marks;
+!     int		forceit;
+  {
+      FILE	*fp;
+      char_u	*fname;
+--- 1676,1687 ----
+  
+  /*
+   * read_viminfo() -- Read the viminfo file.  Registers etc. which are already
+!  * set are not over-written unless "flags" includes VIF_FORCEIT. -- webb
+   */
+      int
+! read_viminfo(file, flags)
+!     char_u	*file;	    /* file name or NULL to use default name */
+!     int		flags;	    /* VIF_WANT_INFO et al. */
+  {
+      FILE	*fp;
+      char_u	*fname;
+***************
+*** 1691,1697 ****
+      if (no_viminfo())
+  	return FAIL;
+  
+!     fname = viminfo_filename(file);	    /* may set to default if NULL */
+      if (fname == NULL)
+  	return FAIL;
+      fp = mch_fopen((char *)fname, READBIN);
+--- 1689,1695 ----
+      if (no_viminfo())
+  	return FAIL;
+  
+!     fname = viminfo_filename(file);	/* get file name in allocated buffer */
+      if (fname == NULL)
+  	return FAIL;
+      fp = mch_fopen((char *)fname, READBIN);
+***************
+*** 1701,1708 ****
+  	verbose_enter();
+  	smsg((char_u *)_("Reading viminfo file \"%s\"%s%s%s"),
+  		fname,
+! 		want_info ? _(" info") : "",
+! 		want_marks ? _(" marks") : "",
+  		fp == NULL ? _(" FAILED") : "");
+  	verbose_leave();
+      }
+--- 1699,1707 ----
+  	verbose_enter();
+  	smsg((char_u *)_("Reading viminfo file \"%s\"%s%s%s"),
+  		fname,
+! 		(flags & VIF_WANT_INFO) ? _(" info") : "",
+! 		(flags & VIF_WANT_MARKS) ? _(" marks") : "",
+! 		(flags & VIF_GET_OLDFILES) ? _(" oldfiles") : "",
+  		fp == NULL ? _(" FAILED") : "");
+  	verbose_leave();
+      }
+***************
+*** 1712,1721 ****
+  	return FAIL;
+  
+      viminfo_errcnt = 0;
+!     do_viminfo(fp, NULL, want_info, want_marks, forceit);
+  
+      fclose(fp);
+- 
+      return OK;
+  }
+  
+--- 1711,1719 ----
+  	return FAIL;
+  
+      viminfo_errcnt = 0;
+!     do_viminfo(fp, NULL, flags);
+  
+      fclose(fp);
+      return OK;
+  }
+  
+***************
+*** 1968,1974 ****
+      }
+  
+      viminfo_errcnt = 0;
+!     do_viminfo(fp_in, fp_out, !forceit, !forceit, FALSE);
+  
+      fclose(fp_out);	    /* errors are ignored !? */
+      if (fp_in != NULL)
+--- 1966,1972 ----
+      }
+  
+      viminfo_errcnt = 0;
+!     do_viminfo(fp_in, fp_out, forceit ? 0 : (VIF_WANT_INFO | VIF_WANT_MARKS));
+  
+      fclose(fp_out);	    /* errors are ignored !? */
+      if (fp_in != NULL)
+***************
+*** 2041,2052 ****
+   * do_viminfo() -- Should only be called from read_viminfo() & write_viminfo().
+   */
+      static void
+! do_viminfo(fp_in, fp_out, want_info, want_marks, force_read)
+      FILE	*fp_in;
+      FILE	*fp_out;
+!     int		want_info;
+!     int		want_marks;
+!     int		force_read;
+  {
+      int		count = 0;
+      int		eof = FALSE;
+--- 2039,2048 ----
+   * do_viminfo() -- Should only be called from read_viminfo() & write_viminfo().
+   */
+      static void
+! do_viminfo(fp_in, fp_out, flags)
+      FILE	*fp_in;
+      FILE	*fp_out;
+!     int		flags;
+  {
+      int		count = 0;
+      int		eof = FALSE;
+***************
+*** 2061,2068 ****
+  
+      if (fp_in != NULL)
+      {
+! 	if (want_info)
+! 	    eof = read_viminfo_up_to_marks(&vir, force_read, fp_out != NULL);
+  	else
+  	    /* Skip info, find start of marks */
+  	    while (!(eof = viminfo_readline(&vir))
+--- 2057,2065 ----
+  
+      if (fp_in != NULL)
+      {
+! 	if (flags & VIF_WANT_INFO)
+! 	    eof = read_viminfo_up_to_marks(&vir,
+! 					 flags & VIF_FORCEIT, fp_out != NULL);
+  	else
+  	    /* Skip info, find start of marks */
+  	    while (!(eof = viminfo_readline(&vir))
+***************
+*** 2092,2099 ****
+  	write_viminfo_bufferlist(fp_out);
+  	count = write_viminfo_marks(fp_out);
+      }
+!     if (fp_in != NULL && want_marks)
+! 	copy_viminfo_marks(&vir, fp_out, count, eof);
+  
+      vim_free(vir.vir_line);
+  #ifdef FEAT_MBYTE
+--- 2089,2097 ----
+  	write_viminfo_bufferlist(fp_out);
+  	count = write_viminfo_marks(fp_out);
+      }
+!     if (fp_in != NULL
+! 	    && (flags & (VIF_WANT_MARKS | VIF_GET_OLDFILES | VIF_FORCEIT)))
+! 	copy_viminfo_marks(&vir, fp_out, count, eof, flags);
+  
+      vim_free(vir.vir_line);
+  #ifdef FEAT_MBYTE
+*** ../vim-7.2.030/src/ex_cmds.h	Thu Nov  6 20:47:00 2008
+--- src/ex_cmds.h	Thu Sep 18 22:18:14 2008
+***************
+*** 653,658 ****
+--- 653,660 ----
+  			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
+  EX(CMD_open,		"open",		ex_open,
+  			RANGE|EXTRA),
++ EX(CMD_oldfiles,	"oldfiles",	ex_oldfiles,
++ 			BANG|TRLBAR|SBOXOK|CMDWIN),
+  EX(CMD_omap,		"omap",		ex_map,
+  			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
+  EX(CMD_omapclear,	"omapclear",	ex_mapclear,
+*** ../vim-7.2.030/src/ex_docmd.c	Thu Nov  6 17:16:06 2008
+--- src/ex_docmd.c	Mon Nov  3 21:21:17 2008
+***************
+*** 364,369 ****
+--- 364,370 ----
+  # define ex_function		ex_ni
+  # define ex_delfunction		ex_ni
+  # define ex_return		ex_ni
++ # define ex_oldfiles		ex_ni
+  #endif
+  static char_u	*arg_all __ARGS((void));
+  #ifdef FEAT_SESSION
+***************
+*** 1770,1776 ****
+  			}
+  			if (checkforcmd(&ea.cmd, "browse", 3))
+  			{
+! #ifdef FEAT_BROWSE
+  			    cmdmod.browse = TRUE;
+  #endif
+  			    continue;
+--- 1771,1777 ----
+  			}
+  			if (checkforcmd(&ea.cmd, "browse", 3))
+  			{
+! #ifdef FEAT_BROWSE_CMD
+  			    cmdmod.browse = TRUE;
+  #endif
+  			    continue;
+***************
+*** 9508,9531 ****
+  		    break;
+  		}
+  		s = src + 1;
+  		i = (int)getdigits(&s);
+  		*usedlen = (int)(s - src); /* length of what we expand */
+  
+! 		buf = buflist_findnr(i);
+! 		if (buf == NULL)
+  		{
+! 		    *errormsg = (char_u *)_("E194: No alternate file name to substitute for '#'");
+  		    return NULL;
+  		}
+! 		if (lnump != NULL)
+! 		    *lnump = ECMD_LAST;
+! 		if (buf->b_fname == NULL)
+  		{
+! 		    result = (char_u *)"";
+! 		    valid = 0;	    /* Must have ":p:h" to be valid */
+  		}
+- 		else
+- 		    result = buf->b_fname;
+  		break;
+  
+  #ifdef FEAT_SEARCHPATH
+--- 9509,9558 ----
+  		    break;
+  		}
+  		s = src + 1;
++ 		if (*s == '<')		/* "#<99" uses v:oldfiles */
++ 		    ++s;
+  		i = (int)getdigits(&s);
+  		*usedlen = (int)(s - src); /* length of what we expand */
+  
+! 		if (src[1] == '<')
+  		{
+! 		    if (*usedlen < 2)
+! 		    {
+! 			/* Should we give an error message for #<text? */
+! 			*usedlen = 1;
+! 			return NULL;
+! 		    }
+! #ifdef FEAT_EVAL
+! 		    result = list_find_str(get_vim_var_list(VV_OLDFILES),
+! 								     (long)i);
+! 		    if (result == NULL)
+! 		    {
+! 			*errormsg = (char_u *)"";
+! 			return NULL;
+! 		    }
+! #else
+! 		    *errormsg = (char_u *)_("E809: #< is not available without the +eval feature");
+  		    return NULL;
++ #endif
+  		}
+! 		else
+  		{
+! 		    buf = buflist_findnr(i);
+! 		    if (buf == NULL)
+! 		    {
+! 			*errormsg = (char_u *)_("E194: No alternate file name to substitute for '#'");
+! 			return NULL;
+! 		    }
+! 		    if (lnump != NULL)
+! 			*lnump = ECMD_LAST;
+! 		    if (buf->b_fname == NULL)
+! 		    {
+! 			result = (char_u *)"";
+! 			valid = 0;	    /* Must have ":p:h" to be valid */
+! 		    }
+! 		    else
+! 			result = buf->b_fname;
+  		}
+  		break;
+  
+  #ifdef FEAT_SEARCHPATH
+***************
+*** 10700,10706 ****
+  	p_viminfo = (char_u *)"'100";
+      if (eap->cmdidx == CMD_rviminfo)
+      {
+! 	if (read_viminfo(eap->arg, TRUE, TRUE, eap->forceit) == FAIL)
+  	    EMSG(_("E195: Cannot open viminfo file for reading"));
+      }
+      else
+--- 10727,10734 ----
+  	p_viminfo = (char_u *)"'100";
+      if (eap->cmdidx == CMD_rviminfo)
+      {
+! 	if (read_viminfo(eap->arg, VIF_WANT_INFO | VIF_WANT_MARKS
+! 				  | (eap->forceit ? VIF_FORCEIT : 0)) == FAIL)
+  	    EMSG(_("E195: Cannot open viminfo file for reading"));
+      }
+      else
+*** ../vim-7.2.030/src/feature.h	Wed Aug  6 18:45:07 2008
+--- src/feature.h	Fri Sep 19 19:14:22 2008
+***************
+*** 767,775 ****
+  
+  /*
+   * +browse		":browse" command.
+   */
+! #if defined(FEAT_NORMAL) && (defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC))
+! # define FEAT_BROWSE
+  #endif
+  
+  /*
+--- 767,779 ----
+  
+  /*
+   * +browse		":browse" command.
++  *			or just the ":browse" command modifier
+   */
+! #if defined(FEAT_NORMAL)
+! # define FEAT_BROWSE_CMD
+! # if defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC)
+! #  define FEAT_BROWSE
+! # endif
+  #endif
+  
+  /*
+*** ../vim-7.2.030/src/fileio.c	Thu Sep 18 21:29:07 2008
+--- src/fileio.c	Mon Nov  3 21:21:47 2008
+***************
+*** 2711,2717 ****
+  {
+      if (!curbuf->b_marks_read && get_viminfo_parameter('\'') > 0
+  						  && curbuf->b_ffname != NULL)
+! 	read_viminfo(NULL, FALSE, TRUE, FALSE);
+  
+      /* Always set b_marks_read; needed when 'viminfo' is changed to include
+       * the ' parameter after opening a buffer. */
+--- 2711,2717 ----
+  {
+      if (!curbuf->b_marks_read && get_viminfo_parameter('\'') > 0
+  						  && curbuf->b_ffname != NULL)
+! 	read_viminfo(NULL, VIF_WANT_MARKS);
+  
+      /* Always set b_marks_read; needed when 'viminfo' is changed to include
+       * the ' parameter after opening a buffer. */
+***************
+*** 9108,9114 ****
+  set_context_in_autocmd(xp, arg, doautocmd)
+      expand_T	*xp;
+      char_u	*arg;
+!     int		doautocmd;	/* TRUE for :doautocmd, FALSE for :autocmd */
+  {
+      char_u	*p;
+      int		group;
+--- 9109,9115 ----
+  set_context_in_autocmd(xp, arg, doautocmd)
+      expand_T	*xp;
+      char_u	*arg;
+!     int		doautocmd;	/* TRUE for :doauto*, FALSE for :autocmd */
+  {
+      char_u	*p;
+      int		group;
+*** ../vim-7.2.030/src/main.c	Thu Sep 18 20:55:19 2008
+--- src/main.c	Sun Sep 14 13:26:10 2008
+***************
+*** 645,655 ****
+  
+  #ifdef FEAT_VIMINFO
+      /*
+!      * Read in registers, history etc, but not marks, from the viminfo file
+       */
+      if (*p_viminfo != NUL)
+      {
+! 	read_viminfo(NULL, TRUE, FALSE, FALSE);
+  	TIME_MSG("reading viminfo");
+      }
+  #endif
+--- 645,656 ----
+  
+  #ifdef FEAT_VIMINFO
+      /*
+!      * Read in registers, history etc, but not marks, from the viminfo file.
+!      * This is where v:oldfiles gets filled.
+       */
+      if (*p_viminfo != NUL)
+      {
+! 	read_viminfo(NULL, VIF_WANT_INFO | VIF_GET_OLDFILES);
+  	TIME_MSG("reading viminfo");
+      }
+  #endif
+*** ../vim-7.2.030/src/mark.c	Sat Aug  9 19:37:29 2008
+--- src/mark.c	Sun Sep 14 13:46:19 2008
+***************
+*** 1627,1641 ****
+  
+  /*
+   * Handle marks in the viminfo file:
+!  * fp_out == NULL   read marks for current buffer only
+!  * fp_out != NULL   copy marks for buffers not in buffer list
+   */
+      void
+! copy_viminfo_marks(virp, fp_out, count, eof)
+      vir_T	*virp;
+      FILE	*fp_out;
+      int		count;
+      int		eof;
+  {
+      char_u	*line = virp->vir_line;
+      buf_T	*buf;
+--- 1627,1643 ----
+  
+  /*
+   * Handle marks in the viminfo file:
+!  * fp_out != NULL: copy marks for buffers not in buffer list
+!  * fp_out == NULL && (flags & VIF_WANT_MARKS): read marks for curbuf only
+!  * fp_out == NULL && (flags & VIF_GET_OLDFILES | VIF_FORCEIT): fill v:oldfiles
+   */
+      void
+! copy_viminfo_marks(virp, fp_out, count, eof, flags)
+      vir_T	*virp;
+      FILE	*fp_out;
+      int		count;
+      int		eof;
++     int		flags;
+  {
+      char_u	*line = virp->vir_line;
+      buf_T	*buf;
+***************
+*** 1647,1656 ****
+--- 1649,1671 ----
+      char_u	*p;
+      char_u	*name_buf;
+      pos_T	pos;
++ #ifdef FEAT_EVAL
++     list_T	*list = NULL;
++ #endif
+  
+      if ((name_buf = alloc(LSIZE)) == NULL)
+  	return;
+      *name_buf = NUL;
++ 
++ #ifdef FEAT_EVAL
++     if (fp_out == NULL && (flags & (VIF_GET_OLDFILES | VIF_FORCEIT)))
++     {
++ 	list = list_alloc();
++ 	if (list != NULL)
++ 	    set_vim_var_list(VV_OLDFILES, list);
++     }
++ #endif
++ 
+      num_marked_files = get_viminfo_parameter('\'');
+      while (!eof && (count < num_marked_files || fp_out == NULL))
+      {
+***************
+*** 1681,1686 ****
+--- 1696,1706 ----
+  	    p++;
+  	*p = NUL;
+  
++ #ifdef FEAT_EVAL
++ 	if (list != NULL)
++ 	    list_append_string(list, str, -1);
++ #endif
++ 
+  	/*
+  	 * If fp_out == NULL, load marks for current buffer.
+  	 * If fp_out != NULL, copy marks for buffers not in buflist.
+***************
+*** 1688,1694 ****
+  	load_marks = copy_marks_out = FALSE;
+  	if (fp_out == NULL)
+  	{
+! 	    if (curbuf->b_ffname != NULL)
+  	    {
+  		if (*name_buf == NUL)	    /* only need to do this once */
+  		    home_replace(NULL, curbuf->b_ffname, name_buf, LSIZE, TRUE);
+--- 1708,1714 ----
+  	load_marks = copy_marks_out = FALSE;
+  	if (fp_out == NULL)
+  	{
+! 	    if ((flags & VIF_WANT_MARKS) && curbuf->b_ffname != NULL)
+  	    {
+  		if (*name_buf == NUL)	    /* only need to do this once */
+  		    home_replace(NULL, curbuf->b_ffname, name_buf, LSIZE, TRUE);
+*** ../vim-7.2.030/src/misc1.c	Wed Jun 25 00:24:52 2008
+--- src/misc1.c	Sun Nov  9 11:47:00 2008
+***************
+*** 3245,3253 ****
+  
+      /* When using ":silent" assume that <CR> was entered. */
+      if (mouse_used != NULL)
+! 	MSG_PUTS(_("Type number or click with mouse (<Enter> cancels): "));
+      else
+! 	MSG_PUTS(_("Choice number (<Enter> cancels): "));
+  
+      /* Set the state such that text can be selected/copied/pasted and we still
+       * get mouse events. */
+--- 3245,3253 ----
+  
+      /* When using ":silent" assume that <CR> was entered. */
+      if (mouse_used != NULL)
+! 	MSG_PUTS(_("Type number and <Enter> or click with mouse (empty cancels): "));
+      else
+! 	MSG_PUTS(_("Type number and <Enter> (empty cancels): "));
+  
+      /* Set the state such that text can be selected/copied/pasted and we still
+       * get mouse events. */
+*** ../vim-7.2.030/src/proto/eval.pro	Sun Jan  6 20:06:30 2008
+--- src/proto/eval.pro	Sun Nov  9 12:05:56 2008
+***************
+*** 17,23 ****
+  int eval_to_bool __ARGS((char_u *arg, int *error, char_u **nextcmd, int skip));
+  char_u *eval_to_string_skip __ARGS((char_u *arg, char_u **nextcmd, int skip));
+  int skip_expr __ARGS((char_u **pp));
+! char_u *eval_to_string __ARGS((char_u *arg, char_u **nextcmd, int dolist));
+  char_u *eval_to_string_safe __ARGS((char_u *arg, char_u **nextcmd, int use_sandbox));
+  int eval_to_number __ARGS((char_u *expr));
+  list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr));
+--- 17,23 ----
+  int eval_to_bool __ARGS((char_u *arg, int *error, char_u **nextcmd, int skip));
+  char_u *eval_to_string_skip __ARGS((char_u *arg, char_u **nextcmd, int skip));
+  int skip_expr __ARGS((char_u **pp));
+! char_u *eval_to_string __ARGS((char_u *arg, char_u **nextcmd, int convert));
+  char_u *eval_to_string_safe __ARGS((char_u *arg, char_u **nextcmd, int use_sandbox));
+  int eval_to_number __ARGS((char_u *expr));
+  list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr));
+***************
+*** 46,52 ****
+--- 46,54 ----
+  void list_unref __ARGS((list_T *l));
+  void list_free __ARGS((list_T *l, int recurse));
+  dictitem_T *dict_lookup __ARGS((hashitem_T *hi));
++ char_u *list_find_str __ARGS((list_T *l, long idx));
+  int list_append_dict __ARGS((list_T *list, dict_T *dict));
++ int list_append_string __ARGS((list_T *l, char_u *str, int len));
+  int garbage_collect __ARGS((void));
+  dict_T *dict_alloc __ARGS((void));
+  int dict_add_nr_str __ARGS((dict_T *d, char *key, long nr, char_u *str));
+***************
+*** 58,65 ****
+--- 60,69 ----
+  void set_vim_var_nr __ARGS((int idx, long val));
+  long get_vim_var_nr __ARGS((int idx));
+  char_u *get_vim_var_str __ARGS((int idx));
++ list_T *get_vim_var_list __ARGS((int idx));
+  void set_vcount __ARGS((long count, long count1));
+  void set_vim_var_string __ARGS((int idx, char_u *val, int len));
++ void set_vim_var_list __ARGS((int idx, list_T *val));
+  void set_reg_var __ARGS((int c));
+  char_u *v_exception __ARGS((char_u *oldval));
+  char_u *v_throwpoint __ARGS((char_u *oldval));
+***************
+*** 94,99 ****
+--- 98,104 ----
+  void write_viminfo_varlist __ARGS((FILE *fp));
+  int store_session_globals __ARGS((FILE *fd));
+  void last_set_msg __ARGS((scid_T scriptID));
++ void ex_oldfiles __ARGS((exarg_T *eap));
+  int modify_fname __ARGS((char_u *src, int *usedlen, char_u **fnamep, char_u **bufp, int *fnamelen));
+  char_u *do_string_sub __ARGS((char_u *str, char_u *pat, char_u *sub, char_u *flags));
+  /* vim: set ft=c : */
+*** ../vim-7.2.030/src/proto/ex_cmds.pro	Sat May  5 20:13:58 2007
+--- src/proto/ex_cmds.pro	Sat Sep 13 17:27:21 2008
+***************
+*** 11,17 ****
+  char_u *make_filter_cmd __ARGS((char_u *cmd, char_u *itmp, char_u *otmp));
+  void append_redir __ARGS((char_u *buf, char_u *opt, char_u *fname));
+  int viminfo_error __ARGS((char *errnum, char *message, char_u *line));
+! int read_viminfo __ARGS((char_u *file, int want_info, int want_marks, int forceit));
+  void write_viminfo __ARGS((char_u *file, int forceit));
+  int viminfo_readline __ARGS((vir_T *virp));
+  char_u *viminfo_readstring __ARGS((vir_T *virp, int off, int convert));
+--- 11,17 ----
+  char_u *make_filter_cmd __ARGS((char_u *cmd, char_u *itmp, char_u *otmp));
+  void append_redir __ARGS((char_u *buf, char_u *opt, char_u *fname));
+  int viminfo_error __ARGS((char *errnum, char *message, char_u *line));
+! int read_viminfo __ARGS((char_u *file, int flags));
+  void write_viminfo __ARGS((char_u *file, int forceit));
+  int viminfo_readline __ARGS((vir_T *virp));
+  char_u *viminfo_readstring __ARGS((vir_T *virp, int off, int convert));
+*** ../vim-7.2.030/src/proto/mark.pro	Sat May  5 19:29:37 2007
+--- src/proto/mark.pro	Sat Sep 13 18:06:20 2008
+***************
+*** 26,30 ****
+  void write_viminfo_filemarks __ARGS((FILE *fp));
+  int removable __ARGS((char_u *name));
+  int write_viminfo_marks __ARGS((FILE *fp_out));
+! void copy_viminfo_marks __ARGS((vir_T *virp, FILE *fp_out, int count, int eof));
+  /* vim: set ft=c : */
+--- 26,30 ----
+  void write_viminfo_filemarks __ARGS((FILE *fp));
+  int removable __ARGS((char_u *name));
+  int write_viminfo_marks __ARGS((FILE *fp_out));
+! void copy_viminfo_marks __ARGS((vir_T *virp, FILE *fp_out, int count, int eof, int flags));
+  /* vim: set ft=c : */
+*** ../vim-7.2.030/src/option.c	Thu Oct  2 22:48:01 2008
+--- src/option.c	Fri Sep 26 22:20:20 2008
+***************
+*** 2593,2605 ****
+  #ifdef FEAT_VIMINFO
+  			    (char_u *)&p_viminfo, PV_NONE,
+  #if defined(MSDOS) || defined(MSWIN) || defined(OS2)
+! 			    {(char_u *)"", (char_u *)"'20,<50,s10,h,rA:,rB:"}
+  #else
+  # ifdef AMIGA
+  			    {(char_u *)"",
+! 				 (char_u *)"'20,<50,s10,h,rdf0:,rdf1:,rdf2:"}
+  # else
+! 			    {(char_u *)"", (char_u *)"'20,<50,s10,h"}
+  # endif
+  #endif
+  #else
+--- 2593,2605 ----
+  #ifdef FEAT_VIMINFO
+  			    (char_u *)&p_viminfo, PV_NONE,
+  #if defined(MSDOS) || defined(MSWIN) || defined(OS2)
+! 			    {(char_u *)"", (char_u *)"'100,<50,s10,h,rA:,rB:"}
+  #else
+  # ifdef AMIGA
+  			    {(char_u *)"",
+! 				 (char_u *)"'100,<50,s10,h,rdf0:,rdf1:,rdf2:"}
+  # else
+! 			    {(char_u *)"", (char_u *)"'100,<50,s10,h"}
+  # endif
+  #endif
+  #else
+*** ../vim-7.2.030/src/structs.h	Thu Jul 31 22:04:27 2008
+--- src/structs.h	Fri Sep 19 19:15:18 2008
+***************
+*** 459,465 ****
+  typedef struct
+  {
+      int		hide;			/* TRUE when ":hide" was used */
+! # ifdef FEAT_BROWSE
+      int		browse;			/* TRUE to invoke file dialog */
+  # endif
+  # ifdef FEAT_WINDOWS
+--- 459,465 ----
+  typedef struct
+  {
+      int		hide;			/* TRUE when ":hide" was used */
+! # ifdef FEAT_BROWSE_CMD
+      int		browse;			/* TRUE to invoke file dialog */
+  # endif
+  # ifdef FEAT_WINDOWS
+*** ../vim-7.2.030/src/vim.h	Sat Aug  9 19:37:40 2008
+--- src/vim.h	Sat Sep 13 17:41:24 2008
+***************
+*** 1728,1734 ****
+  #define VV_MOUSE_COL	51
+  #define VV_OP		52
+  #define VV_SEARCHFORWARD 53
+! #define VV_LEN		54	/* number of v: vars */
+  
+  #ifdef FEAT_CLIPBOARD
+  
+--- 1728,1735 ----
+  #define VV_MOUSE_COL	51
+  #define VV_OP		52
+  #define VV_SEARCHFORWARD 53
+! #define VV_OLDFILES	54
+! #define VV_LEN		55	/* number of v: vars */
+  
+  #ifdef FEAT_CLIPBOARD
+  
+***************
+*** 2054,2057 ****
+--- 2055,2064 ----
+  #define DOSO_VIMRC	1	/* loading vimrc file */
+  #define DOSO_GVIMRC	2	/* loading gvimrc file */
+  
++ /* flags for read_viminfo() and children */
++ #define VIF_WANT_INFO		1	/* load non-mark info */
++ #define VIF_WANT_MARKS		2	/* load file marks */
++ #define VIF_FORCEIT		4	/* overwrite info already read */
++ #define VIF_GET_OLDFILES	8	/* load v:oldfiles */
++ 
+  #endif /* VIM__H */
+*** ../vim-7.2.030/src/version.c	Thu Nov  6 20:47:00 2008
+--- src/version.c	Sun Nov  9 13:39:19 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     31,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+217. Your sex life has drastically improved...so what if it's only cyber-sex!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/7.2.032 b/7.2.032
new file mode 100644
index 0000000..f4a0d9b
--- /dev/null
+++ b/7.2.032
@@ -0,0 +1,55 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.032
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.032 (after 7.2.031)
+Problem:    Can't build with EXITFREE defined. (Dominique Pelle)
+Solution:   Change vv_string to vv_str.
+Files:	    src/eval.c
+
+
+*** ../vim-7.2.031/src/eval.c	Sun Nov  9 13:43:25 2008
+--- src/eval.c	Sun Nov  9 17:16:06 2008
+***************
+*** 846,853 ****
+  	p = &vimvars[i];
+  	if (p->vv_di.di_tv.v_type == VAR_STRING)
+  	{
+! 	    vim_free(p->vv_string);
+! 	    p->vv_string = NULL;
+  	}
+  	else if (p->vv_di.di_tv.v_type == VAR_LIST)
+  	{
+--- 846,853 ----
+  	p = &vimvars[i];
+  	if (p->vv_di.di_tv.v_type == VAR_STRING)
+  	{
+! 	    vim_free(p->vv_str);
+! 	    p->vv_str = NULL;
+  	}
+  	else if (p->vv_di.di_tv.v_type == VAR_LIST)
+  	{
+*** ../vim-7.2.031/src/version.c	Sun Nov  9 13:43:25 2008
+--- src/version.c	Sun Nov  9 17:21:00 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     32,
+  /**/
+
+-- 
+hundred-and-one symptoms of being an internet addict:
+218. Your spouse hands you a gift wrapped magnet with your PC's name
+     on it and you accuse him or her of genocide.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///