0
0
mirror of https://github.com/vim/vim.git synced 2025-10-06 05:44:14 -04:00

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.
This commit is contained in:
Bram Moolenaar
2018-09-12 21:52:18 +02:00
parent 643b614087
commit 90a997987d
5 changed files with 34 additions and 12 deletions

View File

@@ -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);
}
}
/*