diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt
index a99f184..5a9c360 100644
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -1,4 +1,4 @@
-*autocmd.txt*   For Vim version 7.0aa.  Last change: 2005 Jul 21
+*autocmd.txt*   For Vim version 7.0aa.  Last change: 2005 Jul 30
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -487,7 +487,7 @@
 				VimLeavePre.
 				To detect an abnormal exit use |v:dying|.
 							*EncodingChanged*
-EncodingChanged			Fires off when the 'encoding' option is
+EncodingChanged			Fires off after the 'encoding' option has been
 				changed.  Useful to set up fonts, for example.
 							*InsertEnter*
 InsertEnter			When starting Insert mode.  Also for Replace
diff --git a/runtime/doc/change.txt b/runtime/doc/change.txt
index 83f50f1..fc0b1c9 100644
--- a/runtime/doc/change.txt
+++ b/runtime/doc/change.txt
@@ -1,4 +1,4 @@
-*change.txt*    For Vim version 7.0aa.  Last change: 2005 Jun 25
+*change.txt*    For Vim version 7.0aa.  Last change: 2005 Jul 30
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -682,8 +682,8 @@
 
 					*sub-replace-special* *:s\=*
 When the {string} starts with "\=" it is evaluated as an expression, see
-|sub-replace-expression|.  Otherwise these characters in {string} have a
-special meaning:
+|sub-replace-expression|.  You can use that for any special characters.
+Otherwise these characters in {string} have a special meaning:
 								*:s%*
 When {string} is equal to "%" and '/' is included with the 'cpotions' option,
 then the {string} of the previous substitute command is used. |cpo-/|
@@ -771,9 +771,12 @@
 Consider using a character like "@" or ":".  There is no problem if the result
 of the expression contains the separation character.
 
-Example: >
+Examples: >
 	:s@\n@\="\r" . expand("$HOME") . "\r"@
-This replaces an end-of-line with a new line containing the value of $HOME.
+This replaces an end-of-line with a new line containing the value of $HOME. >
+
+	s/E/\="\<Char-0x20ac>"/g
+This replaces 'E' characters with an euro sign. Read more in |<Char->|.
 
 
 4.3 Search and replace					*search-replace*
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index d11b77d..be0b0ec 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*      For Vim version 7.0aa.  Last change: 2005 Jul 29
+*eval.txt*      For Vim version 7.0aa.  Last change: 2005 Jul 30
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -3341,14 +3341,14 @@
 printf({fmt}, {expr1} ...)				*printf()*
 		Return a String with {fmt}, where "%" items are replaced by
 		the formatted form of their respective arguments.  Example: >
-			:echo printf("%4d: E%d %.30s", lnum, err, text)
+			printf("%4d: E%d %.30s", lnum, errno, msg)
 <		May result in:
-			  99: E42 asdfasdfasdfasdfasdfasdfasdfas ~
+			"  99: E42 asdfasdfasdfasdfasdfasdfasdfas" ~
 
 		Often used items are:
 		  %s   	string
 		  %6s	string right-aligned in 6 characters
-		  %c    character
+		  %c    single byte
 		  %d    decimal number
 		  %5d   decimal number padded with spaces to 5 characters
 		  %x    hex number
@@ -3362,12 +3362,13 @@
 		the result.
 
 		The "%" starts a conversion specification.  The following
-		arguments appear in sequence.  Overview:
+		arguments appear in sequence:
 
-			%  flags  min-field-width  .precision  type
+			%  [flags]  [field-width]  [.precision]  type
 
-	        -   Zero or more of the following flags:
-                
+	        flags
+			Zero or more of the following flags:
+
 		    #	      The value should be converted to an "alternate
 			      form".  For c, d, and s conversions, this option
 			      has no effect.  For o conversions, the precision
@@ -3378,85 +3379,91 @@
 			      For x and X conversions, a non-zero result has
 			      the string "0x" (or "0X" for X conversions)
 			      prepended to it.
-                
+
 		    0 (zero)  Zero padding.  For all conversions the converted
 			      value is padded on the left with zeros rather
 			      than blanks.  If a precision is given with a
 			      numeric conversion (d, o, x, and X), the 0 flag
 			      is ignored.
-                
+
 		    -	      A negative field width flag; the converted value
 			      is to be left adjusted on the field boundary.
 			      The converted value is padded on the right with
 			      blanks, rather than on the left with blanks or
 			      zeros.  A - overrides a 0 if both are given.
-                
+
 		    ' ' (space)  A blank should be left before a positive
 			      number produced by a signed conversion (d).
-                
+
 		    +	      A sign must always be placed before a number
 			      produced by a signed conversion.  A + overrides
 			      a space if both are used.
-                
-		-   An optional decimal digit string specifying a minimum
-		    field width.  If the converted value has fewer characters
-		    than the field width, it will be padded with spaces on the
-		    left (or right, if the left-adjustment flag has been
-		    given) to fill out the field width.
-                
-		-   An optional precision, in the form of a period '.'
-		    followed by an optional digit string.  If the digit string
-		    is omitted, the precision is taken as zero.  This gives
-		    the minimum number of digits to appear for d, o, x, and X
-		    conversions, or the maximum number of characters to be
-		    printed from a string for s conversions.
-                
-		-   A character that specifies the type of conversion to be
-		    applied, see below.
-                
+
+		field-width
+			An optional decimal digit string specifying a minimum
+			field width.  If the converted value has fewer
+			characters than the field width, it will be padded
+			with spaces on the left (or right, if the
+			left-adjustment flag has been given) to fill out the
+			field width.
+
+		.precision
+			An optional precision, in the form of a period '.'
+			followed by an optional digit string.  If the digit
+			string is omitted, the precision is taken as zero.
+			This gives the minimum number of digits to appear for
+			d, o, x, and X conversions, or the maximum number of
+			characters to be printed from a string for s
+			conversions.
+
+		type
+			A character that specifies the type of conversion to
+			be applied, see below.
+
 		A field width or precision, or both, may be indicated by an
 		asterisk '*' instead of a digit string.  In this case, a
 		Number argument supplies the field width or precision.  A
 		negative field width is treated as a left adjustment flag
 		followed by a positive field width; a negative precision is
 		treated as though it were missing.  Example: >
-			:echo printf("%d: %.*s", nr, columns, line)
+			:echo printf("%d: %.*s", nr, width, line)
 <		This limits the length of the text used from "line" to
-		"columns" bytes.
+		"width" bytes.
 
 	        The conversion specifiers and their meanings are:
-                
+
 		doxX    The Number argument is converted to signed decimal
 			(d), unsigned octal (o), or unsigned hexadecimal (x
 			and X) notation.  The letters "abcdef" are used for
 			x conversions; the letters "ABCDEF" are used for X
-			conversions.  The precision, if any, gives the minimum
-			number of digits that must appear; if the converted
-			value requires fewer digits, it is padded on the left
-			with zeros.
-                
-		c	The Number argument is converted to a byte, and
-			the resulting character is written.
-                
-		s	The String argument is used.  If a precision is
-			specified, no more bytes than the number specified are
-			written.
-                
+			conversions.
+			The precision, if any, gives the minimum number of
+			digits that must appear; if the converted value
+			requires fewer digits, it is padded on the left with
+			zeros.
+			In no case does a non-existent or small field width
+			cause truncation of a numeric field; if the result of
+			a conversion is wider than the field width, the field
+			is expanded to contain the conversion result.
+
+		c	The Number argument is converted to a byte, and the
+			resulting character is written.
+
+		s	The text of the String argument is used.  If a
+			precision is specified, no more bytes than the number
+			specified are used.
+
 		%	A '%' is written.  No argument is converted.  The
 			complete conversion specification is "%%".
-                
-		Each argument can be Number or String and is converted
-		automatically to fit the conversion specifier.
 
-		In no case does a non-existent or small field width cause
-		truncation of a numeric field; if the result of a conversion
-		is wider than the field width, the field is expanded to
-		contain the conversion result.
+		Each argument can be Number or String and is converted
+		automatically to fit the conversion specifier.  Any other
+		argument type results in an error message.
 
 							*E766* *767*
 		The number of {exprN} arguments must exactly match the number
 		of "%" items.  If there are not sufficient or too many
-		arguments an error is given.
+		arguments an error is given.  Up to 18 arguments can be used.
 
 
 prevnonblank({lnum})					*prevnonblank()*
@@ -4242,7 +4249,7 @@
 		information about these fields.  For C code the fields
 		"struct", "class" and "enum" may appear, they give the name of
 		the entity the tag is contained in.
- 
+
 		The ex-command 'cmd' can be either an ex search pattern, a
 		line number or a line number followed by a byte number.
 
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 6c658b0..b15d7c4 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt*	For Vim version 7.0aa.  Last change: 2005 Jul 29
+*options.txt*	For Vim version 7.0aa.  Last change: 2005 Jul 30
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -1584,46 +1584,54 @@
 'completefunc' 'cfu'	string	(default: empty)
 			local to buffer
 			{not in Vi}
-	This option specifies a completion function to be used for CTRL-X
-	CTRL-U.  The function will be invoked with four arguments:
-	   a:line	the text of the current line
-	   a:base	the text with which matches should match
-	   a:col        column in a:line where the cursor is, first column is
-	   		zero
+			{not available when compiled without the +eval
+			or +insert_expand feature}
+	This option specifies a function to be used for CTRL-X CTRL-U
+	completion. |i_CTRL-X_CTRL-U|
+
+	The function will be invoked with three arguments:
 	   a:findstart  either 1 or 0
+	   a:col        column in the cursor line where the completion ends,
+			first column is zero
+	   a:base	the text with which matches should match
+
 	When the a:findstart argument is 1, the function must return the
 	column of where the completion starts.  It must be a number between
-	zero and "a:col".  This involves looking at the characters in a:line
-	before column a:col and include those characters that could be part of
-	the completed item.
-	When the a:findstart argument is 0 the function must return a string
-	with the matching words, separated by newlines.  When there are no
-	matches return an empty string.
+	zero and "a:col".  This involves looking at the characters in the
+	cursor line before column a:col and include those characters that
+	could be part of the completed item.  The text between this column and
+	a:col will be replaced with the matches.  Return -1 if no completion
+	can be done.
+
+	When the a:findstart argument is 0 the function must return a List
+	with the matching words.  These matches should include the "a:base"
+	text.  When there are no matches return an empty List.
+
+	The function must not move the cursor!
+
 	An example that completes the names of the months: >
-		fun! CompleteMonths(line, base, col, findstart)
+		fun! CompleteMonths(findstart, col, base)
 		  if a:findstart
-		    " locate start column of word
+		    " locate the start of the word
+		    let line = getline('.')
 		    let start = a:col
-		    while start > 0 && a:line[start - 1] =~ '\a'
-		      let start = start - 1
+		    while start > 0 && line[start - 1] =~ '\a'
+		      let start -= 1
 		    endwhile
 		    return start
 		  else
 		    " find months matching with "a:base"
-		    let res = "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec"
-		    if a:base != ''
-		      let res = substitute(res, '\c\<\(\(' . a:base . '.\{-}\>\)\|.\{-}\>\)', '\2', 'g')
-		    endif
-		    let res = substitute(res, ' \+', "\n", 'g')
+		    let res = []
+		    for m in split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec")
+		      if m =~ '^' . a:base
+			call add(res, m)
+		      endif
+		    endfor
 		    return res
 		  endif
 		endfun
 		set completefunc=CompleteMonths
-<	Note that a substitute() function is used to reduce the list of
-	possible values and remove the ones that don't match the base.  The
-	part before the "\|" matches the base, the part after it is used
-	when there is no match.  The "\2" in the replacement is empty if the
-	part before the "\|" does not match.
+<
 
 				*'confirm'* *'cf'* *'noconfirm'* *'nocf'*
 'confirm' 'cf'		boolean (default off)
diff --git a/runtime/doc/tags b/runtime/doc/tags
index ac15db6..2700fdc 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -5162,7 +5162,6 @@
 hebrew.txt	hebrew.txt	/*hebrew.txt*
 help	various.txt	/*help*
 help-context	help.txt	/*help-context*
-help-tags	tags	1
 help-translated	various.txt	/*help-translated*
 help-xterm-window	various.txt	/*help-xterm-window*
 help.txt	help.txt	/*help.txt*
@@ -6752,7 +6751,6 @@
 usr_45.txt	usr_45.txt	/*usr_45.txt*
 usr_90.txt	usr_90.txt	/*usr_90.txt*
 usr_toc.txt	usr_toc.txt	/*usr_toc.txt*
-utf-16	options.txt	/*utf-16*
 utf-8	mbyte.txt	/*utf-8*
 utf-8-char-arg	mbyte.txt	/*utf-8-char-arg*
 utf-8-in-xwindows	mbyte.txt	/*utf-8-in-xwindows*
diff --git a/runtime/menu.vim b/runtime/menu.vim
index 37bd11a..5260723 100644
--- a/runtime/menu.vim
+++ b/runtime/menu.vim
@@ -2,7 +2,7 @@
 " You can also use this as a start for your own set of menus.
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2005 Jul 22
+" Last Change:	2005 Jul 30
 
 " Note that ":an" (short for ":anoremenu") is often used to make a menu work
 " in all modes and avoid side effects from mappings defined by the user.
@@ -424,22 +424,30 @@
   an 40.335.260 &Tools.&Spelling.Set\ language\ to\ "en_us"	:set spl=en_us spell<CR>
   an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages	:call <SID>SpellLang()<CR>
 
+  let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
   func! s:SpellLang()
-    silent! aun &Tools.&Spelling.&Find\ More\ Languages
+    for cmd in s:undo_spellang
+      exe "silent! " . cmd
+    endfor
+    let s:undo_spellang = []
+
     if &enc == "iso-8859-15"
       let enc = "latin1"
     else
       let enc = &enc
     endif
+
     let found = 0
     let s = globpath(&rtp, "spell/*." . enc . ".spl")
     if s != ""
       let n = 300
       for f in split(s, "\n")
 	let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
-	if nm != "en"
-	  exe 'an 40.335.' . n . ' &Tools.&Spelling.Set\ language\ to\ "' . nm . '" :set spl=' . nm . ' spell<CR>'
+	if nm != "en" && nm !~ '/'
 	  let found += 1
+	  let menuname = '&Tools.&Spelling.Set\ language\ to\ "' . nm . '"'
+	  exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
+	  let s:undo_spellang += ['aun ' . menuname]
 	endif
 	let n += 10
       endfor
@@ -451,6 +459,10 @@
     else
       echomsg "Found " . found . " more spell files"
     endif
+    " Need to redo this when 'encoding' is changed.
+    augroup spellmenu
+    au! EncodingChanged * call <SID>SpellLang()
+    augroup END
   endfun
 
 endif
diff --git a/src/edit.c b/src/edit.c
index 01a6591..26a9a7c 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -2550,85 +2550,56 @@
 }
 
 #ifdef FEAT_COMPL_FUNC
-static char_u *call_completefunc __ARGS((char_u *line, char_u *base, int col, int preproc));
-static int expand_by_function __ARGS((linenr_T lnum, int col, char_u *base, char_u ***matches));
+static int expand_by_function __ARGS((int col, char_u *base, char_u ***matches));
 
 /*
- * Execute user defined complete function 'completefunc'.
- * Return NULL if some error occurs.
- */
-    static char_u *
-call_completefunc(line, base, col, preproc)
-    char_u	*line;
-    char_u	*base;
-    int		col;
-    int		preproc;
-{
-    char_u	colbuf[30];
-    char_u	*args[4];
-
-    /* Return NULL when 'completefunc' isn't set. */
-    if (*curbuf->b_p_cfu == NUL)
-	return NULL;
-
-    sprintf((char *)colbuf, "%d", col + (base ? (int)STRLEN(base) : 0));
-    args[0] = line;
-    args[1] = base;
-    args[2] = colbuf;
-    args[3] = (char_u *)(preproc ? "1" : "0");
-    return (char_u *)call_func_retstr(curbuf->b_p_cfu, 4, args, FALSE);
-}
-
-/*
- * Execute user defined complete function 'completefunc', and get candidates
- * are separeted with "\n".  Return value is number of candidates and array
- * of candidates as "matches".
+ * Execute user defined complete function 'completefunc', and get matches in
+ * "matches".
+ * Return value is number of matches.
  */
     static int
-expand_by_function(lnum, col, base, matches)
-    linenr_T	lnum;
+expand_by_function(col, base, matches)
     int		col;
     char_u	*base;
     char_u	***matches;
 {
-    char_u	*matchstr = NULL;
-    char_u	*line_copy = vim_strsave(ml_get(lnum));
+    list_T      *matchlist;
+    char_u	colbuf[30];
+    char_u	*args[3];
+    listitem_T	*li;
+    garray_T    ga;
+    char_u	*p;
 
-    /* Execute 'completefunc' and get the result */
-    matchstr = call_completefunc(line_copy, base, col, 0);
-    vim_free(line_copy);
+    if (*curbuf->b_p_cfu == NUL)
+	return 0;
 
-    /* Parse returned string */
-    if (matchstr != NULL)
+    /* Call 'completefunc' to obtain the list of matches. */
+    args[0] = (char_u *)"0";
+    sprintf((char *)colbuf, "%d", col + (int)STRLEN(base));
+    args[1] = colbuf;
+    args[2] = base;
+
+    matchlist = call_func_retlist(curbuf->b_p_cfu, 3, args, FALSE);
+    if (matchlist == NULL)
+	return 0;
+
+    /* Go through the List with matches and put them in an array. */
+    ga_init2(&ga, (int)sizeof(char_u *), 8);
+    for (li = matchlist->lv_first; li != NULL; li = li->li_next)
     {
-	garray_T    ga;
-	char_u	    *p, *pnext;
-
-	ga_init2(&ga, (int)sizeof(char*), 8);
-	for (p = matchstr; *p != NUL; p = pnext)
+	p = get_tv_string_chk(&li->li_tv);
+	if (p != NULL && *p != NUL)
 	{
-	    int len;
-
-	    pnext = vim_strchr(p, '\n');
-	    if (pnext == NULL)
-		pnext = p + STRLEN(p);
-	    len = pnext - p;
-	    if (len > 0)
-	    {
-		if (ga_grow(&ga, 1) == FAIL)
-		    break;
-		((char_u **)ga.ga_data)[ga.ga_len] = vim_strnsave(p, len);
-		++ga.ga_len;
-	    }
-	    if (*pnext != NUL)
-		++pnext;
+	    if (ga_grow(&ga, 1) == FAIL)
+		break;
+	    ((char_u **)ga.ga_data)[ga.ga_len] = vim_strsave(p);
+	    ++ga.ga_len;
 	}
-	vim_free(matchstr);
-	if (ga.ga_len > 0)
-	    *matches = (char_u**)ga.ga_data;
-	return ga.ga_len;
     }
-    return 0;
+
+    list_unref(matchlist);
+    *matches = (char_u **)ga.ga_data;
+    return ga.ga_len;
 }
 #endif /* FEAT_COMPL_FUNC */
 
@@ -2868,8 +2839,8 @@
 
 #ifdef FEAT_COMPL_FUNC
 	case CTRL_X_FUNCTION:
-	    num_matches = expand_by_function(first_match_pos.lnum,
-				 first_match_pos.col, compl_pattern, &matches);
+	    num_matches = expand_by_function(first_match_pos.col,
+						     compl_pattern, &matches);
 	    if (num_matches > 0)
 		ins_compl_add_matches(num_matches, matches, dir);
 	    break;
@@ -3477,31 +3448,33 @@
 	else if (ctrl_x_mode == CTRL_X_FUNCTION)
 	{
 	    /*
-	     * Call user defined function 'completefunc' with line content,
-	     * cursor column number and preproc is 1.  Obtain length of text
-	     * to use for completion.
+	     * Call user defined function 'completefunc' with "a:findstart" is
+	     * 1 to obtain the length of text to use for completion.
 	     */
-	    char_u  *lenstr;
-	    int	    keeplen = 0;
-	    char_u  *line_copy = vim_strsave(line);
+	    char_u	colbuf[30];
+	    char_u	*args[3];
+	    int		col;
 
 	    /* Call 'completefunc' and get pattern length as a string */
-	    lenstr = call_completefunc(line_copy, NULL, curs_col, 1);
-	    vim_free(line_copy);
-	    if (lenstr == NULL)
+	    if (*curbuf->b_p_cfu == NUL)
 		return FAIL;
-	    keeplen = atoi((char *)lenstr);
-	    vim_free(lenstr);
-	    if (keeplen < 0)
+
+	    args[0] = (char_u *)"1";
+	    sprintf((char *)colbuf, "%d", (int)curs_col);
+	    args[1] = colbuf;
+	    args[2] = NULL;
+
+	    col = call_func_retnr(curbuf->b_p_cfu, 3, args, FALSE);
+	    if (col < 0)
 		return FAIL;
-	    if ((colnr_T)keeplen > curs_col)
-		keeplen = curs_col;
+	    compl_col = col;
+	    if ((colnr_T)compl_col > curs_col)
+		compl_col = curs_col;
 
 	    /* Setup variables for completion.  Need to obtain "line" again,
 	     * it may have become invalid. */
 	    line = ml_get(curwin->w_cursor.lnum);
-	    compl_col = keeplen;
-	    compl_length = curs_col - keeplen;
+	    compl_length = curs_col - compl_col;
 	    compl_pattern = vim_strnsave(line + compl_col, compl_length);
 	    if (compl_pattern == NULL)
 		return FAIL;
@@ -3510,7 +3483,7 @@
 	else if (ctrl_x_mode == CTRL_X_OCCULT)
 	{
 	    /* TODO: let language-specific function handle locating the text
-	     * to be completed or use 'coupler' option. */
+	     * to be completed. */
 	    while (--startcol >= 0 && vim_isIDc(line[startcol]))
 		;
 	    compl_col += ++startcol;
diff --git a/src/proto/eval.pro b/src/proto/eval.pro
index db47458..7c0ca84 100644
--- a/src/proto/eval.pro
+++ b/src/proto/eval.pro
@@ -24,6 +24,7 @@
 int get_spellword __ARGS((list_T *list, char_u **pp));
 typval_T *eval_expr __ARGS((char_u *arg, char_u **nextcmd));
 void *call_func_retstr __ARGS((char_u *func, int argc, char_u **argv, int safe));
+long call_func_retnr __ARGS((char_u *func, int argc, char_u **argv, int safe));
 void *call_func_retlist __ARGS((char_u *func, int argc, char_u **argv, int safe));
 void *save_funccal __ARGS((void));
 void restore_funccal __ARGS((void *vfc));
diff --git a/src/version.h b/src/version.h
index 13f67c5..661dc4f 100644
--- a/src/version.h
+++ b/src/version.h
@@ -36,5 +36,5 @@
 #define VIM_VERSION_NODOT	"vim70aa"
 #define VIM_VERSION_SHORT	"7.0aa"
 #define VIM_VERSION_MEDIUM	"7.0aa ALPHA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Jul 29)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Jul 29, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Jul 30)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Jul 30, compiled "
