patch 7.4.2320
Problem:    Redraw problem when using 'incsearch'.
Solution:   Save the current view when deleting characters. (Christian
            Brabandt) Fix that the '" mark is set in the wrong position. Don't
            change the search start when using BS.
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 59fa288..ed82f0f 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -177,17 +177,22 @@
     int		histype;		/* history type to be used */
 #endif
 #ifdef FEAT_SEARCH_EXTRA
-    pos_T	old_cursor;
+    pos_T	search_start;		/* where 'incsearch' starts searching */
+    pos_T       save_cursor;
     colnr_T	old_curswant;
+    colnr_T     init_curswant = curwin->w_curswant;
     colnr_T	old_leftcol;
+    colnr_T     init_leftcol = curwin->w_leftcol;
     linenr_T	old_topline;
-    pos_T       cursor_start;
+    linenr_T    init_topline = curwin->w_topline;
     pos_T       match_start = curwin->w_cursor;
     pos_T       match_end;
 # ifdef FEAT_DIFF
     int		old_topfill;
+    int         init_topfill = curwin->w_topfill;
 # endif
     linenr_T	old_botline;
+    linenr_T	init_botline = curwin->w_botline;
     int		did_incsearch = FALSE;
     int		incsearch_postponed = FALSE;
 #endif
@@ -230,8 +235,8 @@
     ccline.overstrike = FALSE;		    /* always start in insert mode */
 #ifdef FEAT_SEARCH_EXTRA
     clearpos(&match_end);
-    old_cursor = curwin->w_cursor;	    /* needs to be restored later */
-    cursor_start = old_cursor;
+    save_cursor = curwin->w_cursor;	    /* may be restored later */
+    search_start = curwin->w_cursor;
     old_curswant = curwin->w_curswant;
     old_leftcol = curwin->w_leftcol;
     old_topline = curwin->w_topline;
@@ -1006,11 +1011,17 @@
 		    ccline.cmdbuff[ccline.cmdlen] = NUL;
 #ifdef FEAT_SEARCH_EXTRA
 		    if (ccline.cmdlen == 0)
-			old_cursor = cursor_start;
-		    else
 		    {
-			old_cursor = match_start;
-			decl(&old_cursor);
+			search_start = save_cursor;
+			/* save view settings, so that the screen
+			 * won't be restored at the wrong position */
+			old_curswant = init_curswant;
+			old_leftcol = init_leftcol;
+			old_topline = init_topline;
+# ifdef FEAT_DIFF
+			old_topfill = init_topfill;
+# endif
+			old_botline = init_botline;
 		    }
 #endif
 		    redrawcmd();
@@ -1040,7 +1051,7 @@
 		    }
 #ifdef FEAT_SEARCH_EXTRA
 		    if (ccline.cmdlen == 0)
-			old_cursor = cursor_start;
+			search_start = save_cursor;
 #endif
 		    redraw_cmdline = TRUE;
 		    goto returncmd;		/* back to cmd mode */
@@ -1127,7 +1138,7 @@
 		ccline.cmdbuff[ccline.cmdlen] = NUL;
 #ifdef FEAT_SEARCH_EXTRA
 		if (ccline.cmdlen == 0)
-		    old_cursor = cursor_start;
+		    search_start = save_cursor;
 #endif
 		redrawcmd();
 		goto cmdline_changed;
@@ -1468,7 +1479,7 @@
 		    if (did_incsearch)
 		    {
 			curwin->w_cursor = match_end;
-			if (!equalpos(curwin->w_cursor, old_cursor))
+			if (!equalpos(curwin->w_cursor, search_start))
 			{
 			    c = gchar_cursor();
 			    /* If 'ignorecase' and 'smartcase' are set and the
@@ -1685,7 +1696,7 @@
 		    --emsg_off;
 		    if (i)
 		    {
-			old_cursor = match_start;
+			search_start = match_start;
 			match_end = t;
 			match_start = t;
 			if (c == Ctrl_T && firstc == '/')
@@ -1693,17 +1704,17 @@
 			    /* move just before the current match, so that
 			     * when nv_search finishes the cursor will be
 			     * put back on the match */
-			    old_cursor = t;
-			    (void)decl(&old_cursor);
+			    search_start = t;
+			    (void)decl(&search_start);
 			}
-			if (lt(t, old_cursor) && c == Ctrl_G)
+			if (lt(t, search_start) && c == Ctrl_G)
 			{
 			    /* wrap around */
-			    old_cursor = t;
+			    search_start = t;
 			    if (firstc == '?')
-				(void)incl(&old_cursor);
+				(void)incl(&search_start);
 			    else
-				(void)decl(&old_cursor);
+				(void)decl(&search_start);
 			}
 
 			set_search_match(&match_end);
@@ -1870,7 +1881,7 @@
 		continue;
 	    }
 	    incsearch_postponed = FALSE;
-	    curwin->w_cursor = old_cursor;  /* start at old position */
+	    curwin->w_cursor = search_start;  /* start at old position */
 
 	    /* If there is no command line, don't do anything */
 	    if (ccline.cmdlen == 0)
@@ -1988,9 +1999,18 @@
 #ifdef FEAT_SEARCH_EXTRA
     if (did_incsearch)
     {
-	curwin->w_cursor = old_cursor;
 	if (gotesc)
-	    curwin->w_cursor = cursor_start;
+	    curwin->w_cursor = save_cursor;
+	else
+	{
+	    if (!equalpos(save_cursor, search_start))
+	    {
+		/* put the '" mark at the original position */
+		curwin->w_cursor = save_cursor;
+		setpcmark();
+	    }
+	    curwin->w_cursor = search_start;
+	}
 	curwin->w_curswant = old_curswant;
 	curwin->w_leftcol = old_leftcol;
 	curwin->w_topline = old_topline;