diff src/move.c @ 14720:a9665096074b v8.1.0372

patch 8.1.0372: screen updating slow when 'cursorline' is set commit https://github.com/vim/vim/commit/90a997987dbbe43af3c15118a35f658f0f037d1d Author: Bram Moolenaar <Bram@vim.org> Date: Wed Sep 12 21:52:18 2018 +0200 patch 8.1.0372: screen updating slow when 'cursorline' is set Problem: Screen updating slow when 'cursorline' is set. Solution: Only redraw the old and new cursor line, not all lines.
author Christian Brabandt <cb@256bit.org>
date Wed, 12 Sep 2018 22:00:07 +0200
parents 1bc96dbb5498
children 9b150311eb9c
line wrap: on
line diff
--- a/src/move.c
+++ b/src/move.c
@@ -123,6 +123,10 @@ comp_botline(win_T *wp)
     set_empty_rows(wp, done);
 }
 
+#ifdef FEAT_SYN_HL
+static linenr_T	last_cursorline = 0;
+#endif
+
 /*
  * Redraw when w_cline_row changes and 'relativenumber' or 'cursorline' is
  * set.
@@ -140,7 +144,22 @@ redraw_for_cursorline(win_T *wp)
 	    && !pum_visible()
 # endif
 	    )
-	redraw_win_later(wp, SOME_VALID);
+    {
+#ifdef FEAT_SYN_HL
+	if (!wp->w_p_rnu && wp->w_redr_type <= VALID && last_cursorline != 0)
+	{
+	    // "last_cursorline" may be set for another window, worst case we
+	    // redraw too much.  This is optimized for moving the cursor around
+	    // in the same window.
+	    redrawWinline(wp, last_cursorline, FALSE);
+	    redrawWinline(wp, wp->w_cursor.lnum, FALSE);
+	    last_cursorline = wp->w_cursor.lnum;
+	    redraw_win_later(wp, VALID);
+	}
+	else
+#endif
+	    redraw_win_later(wp, SOME_VALID);
+    }
 }
 
 /*