updated for version 7.0g01
diff --git a/src/quickfix.c b/src/quickfix.c
index 95cf8f7..4f5fe24 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -2153,7 +2153,7 @@
      * it if we have errors; otherwise, leave it closed.
      */
     if (qi->qf_lists[qi->qf_curlist].qf_nonevalid
-	|| qi->qf_curlist >= qi->qf_listcount)
+	    || qi->qf_curlist >= qi->qf_listcount)
     {
 	if (win != NULL)
 	    ex_cclose(eap);
@@ -3290,6 +3290,7 @@
 	if (readfile(fname, NULL,
 		    (linenr_T)0, (linenr_T)0, (linenr_T)MAXLNUM,
 		    NULL, READ_NEW | READ_DUMMY) == OK
+		&& !got_int
 		&& !(curbuf->b_flags & BF_NEW))
 	{
 	    failed = FALSE;
@@ -3329,7 +3330,24 @@
     buf_T	*buf;
 {
     if (curbuf != buf)		/* safety check */
+    {
+#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
+	cleanup_T   cs;
+
+	/* Reset the error/interrupt/exception state here so that aborting()
+	 * returns FALSE when wiping out the buffer.  Otherwise it doesn't
+	 * work when got_int is set. */
+	enter_cleanup(&cs);
+#endif
+
 	wipe_buffer(buf, FALSE);
+
+#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
+	/* Restore the error/interrupt/exception state if not discarded by a
+	 * new aborting error, interrupt, or uncaught exception. */
+	leave_cleanup(&cs);
+#endif
+    }
 }
 
 /*