Mercurial > vim
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); + } } /*