updated for version 7.0171
diff --git a/src/auto/configure b/src/auto/configure
index 794fd8f..8c42e66 100755
--- a/src/auto/configure
+++ b/src/auto/configure
@@ -1009,7 +1009,7 @@
 _ACEOF
   exit 0
 fi
-exec 5>auto/config.log
+exec 5>config.log
 cat >&5 <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
@@ -15455,7 +15455,7 @@
 # Open the log real soon, to keep \$[0] and so on meaningful, and to
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.  Logging --version etc. is OK.
-exec 5>>auto/config.log
+exec 5>>config.log
 {
   echo
   sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
@@ -16285,7 +16285,7 @@
     ac_config_status_args="$ac_config_status_args --quiet"
   exec 5>/dev/null
   $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
-  exec 5>>auto/config.log
+  exec 5>>config.log
   # Use ||, not &&, to avoid exiting from the if with $? = 1, which
   # would make configure fail if this is the last instruction.
   $ac_cs_success || { (exit 1); exit 1; }
diff --git a/src/edit.c b/src/edit.c
index 0a770a7..ff09f09 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -208,6 +208,7 @@
 					   K_SPECIAL and CSI are escaped */
 static int	last_insert_skip; /* nr of chars in front of previous insert */
 static int	new_insert_skip;  /* nr of chars in front of current insert */
+static int	did_restart_edit;	/* "restart_edit" when calling edit() */
 
 #ifdef FEAT_CINDENT
 static int	can_cindent;		/* may do cindenting on this line */
@@ -269,9 +270,11 @@
 #endif
     int		inserted_space = FALSE;     /* just inserted a space */
     int		replaceState = REPLACE;
-    int		did_restart_edit = restart_edit;
     int		nomove = FALSE;		    /* don't move cursor on return */
 
+    /* Remember whether editing was restarted after CTRL-O. */
+    did_restart_edit = restart_edit;
+
     /* sleep before redrawing, needed for "CTRL-O :" that results in an
      * error message */
     check_for_delay(TRUE);
@@ -496,10 +499,10 @@
     do_digraph(-1);		/* clear digraphs */
 #endif
 
-/*
- * Get the current length of the redo buffer, those characters have to be
- * skipped if we want to get to the inserted characters.
- */
+    /*
+     * Get the current length of the redo buffer, those characters have to be
+     * skipped if we want to get to the inserted characters.
+     */
     ptr = get_inserted();
     if (ptr == NULL)
 	new_insert_skip = 0;
@@ -5030,20 +5033,29 @@
  */
     static void
 stop_insert(end_insert_pos, esc)
-    pos_T    *end_insert_pos;	/* where insert ended */
-    int	    esc;		/* called by ins_esc() */
+    pos_T	*end_insert_pos;	/* where insert ended */
+    int		esc;			/* called by ins_esc() */
 {
-    int	    cc;
+    int		cc;
+    char_u	*ptr;
 
     stop_redo_ins();
     replace_flush();		/* abandon replace stack */
 
     /*
-     * save the inserted text for later redo with ^@
+     * Save the inserted text for later redo with ^@ and CTRL-A.
+     * Don't do it when "restart_edit" was set and nothing was inserted,
+     * otherwise CTRL-O w and then <Left> will clear "last_insert".
      */
-    vim_free(last_insert);
-    last_insert = get_inserted();
-    last_insert_skip = new_insert_skip;
+    ptr = get_inserted();
+    if (did_restart_edit == 0 || (ptr != NULL && STRLEN(ptr) > new_insert_skip))
+    {
+	vim_free(last_insert);
+	last_insert = ptr;
+	last_insert_skip = new_insert_skip;
+    }
+    else
+	vim_free(ptr);
 
     if (!arrow_used)
     {
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 7c9ea14..a55b497 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -1098,6 +1098,15 @@
 			save_cmdline(&save_ccline);
 			c = get_expr_register();
 			restore_cmdline(&save_ccline);
+
+			/* When there was a serious error abort getting the
+			 * command line. */
+			if (aborting())
+			{
+			    gotesc = TRUE;  /* will free ccline.cmdbuff after
+					       putting it in history */
+			    goto returncmd; /* back to cmd mode */
+			}
 		    }
 		}
 #endif
diff --git a/src/globals.h b/src/globals.h
index ede48c6..8c21105 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -847,6 +847,8 @@
 EXTERN int	swap_exists_action INIT(= SEA_NONE);
 					/* For dialog when swap file already
 					 * exists. */
+EXTERN int	swap_exists_did_quit INIT(= FALSE);
+					/* Selected "quit" at the dialog. */
 #endif
 
 EXTERN char_u	*IObuff;		/* sprintf's are done in this buffer,
diff --git a/src/mysign b/src/mysign
index 1581aa7..e31d3e4 100644
--- a/src/mysign
+++ b/src/mysign
@@ -1 +1 @@
-=auto/configure-lastupdate=1090067895.52-@buildcheck=2c92a9e4676b2304fab9af16f1664194=configure.in@md5=9058353ef67f4d224686695cb80f645e
+=auto/configure-lastupdate=1134726965.61-@buildcheck=7520ec774f62645a09ebe0f9aab5aaec=configure.in@md5=98b5986099d37a7ba1b943fe7f4d0f90
diff --git a/src/ops.c b/src/ops.c
index 2f9ff00..0c75a46 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -159,7 +159,7 @@
     {'z', 'd', TRUE},	/* OP_FOLDDEL */
     {'z', 'D', TRUE},	/* OP_FOLDDELREC */
     {'g', 'w', TRUE},	/* OP_FORMAT2 */
-    {'g', 'y', FALSE},	/* OP_FUNCTION */
+    {'g', '@', FALSE},	/* OP_FUNCTION */
 };
 
 /*
diff --git a/src/version.h b/src/version.h
index 0a6a4ab..a1aed6e 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 Dec 14)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Dec 14, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Dec 16)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Dec 16, compiled "