diff --git a/src/nvim/syntax.c b/src/nvim/syntax.c index 478fa973a1..04e28cf5ca 100644 --- a/src/nvim/syntax.c +++ b/src/nvim/syntax.c @@ -5533,25 +5533,29 @@ char_u *get_syntax_name(expand_T *xp, int idx) } -/* - * Function called for expression evaluation: get syntax ID at file position. - */ -int -syn_get_id ( +// Function called for expression evaluation: get syntax ID at file position. +int syn_get_id( win_T *wp, long lnum, colnr_T col, - int trans, /* remove transparency */ - bool *spellp, /* return: can do spell checking */ - int keep_state /* keep state of char at "col" */ + int trans, // remove transparency + bool *spellp, // return: can do spell checking + int keep_state // keep state of char at "col" ) { - /* When the position is not after the current position and in the same - * line of the same buffer, need to restart parsing. */ + // When the position is not after the current position and in the same + // line of the same buffer, need to restart parsing. if (wp->w_buffer != syn_buf || lnum != current_lnum - || col < current_col) + || col < current_col) { syntax_start(wp, lnum); + } else if (wp->w_buffer == syn_buf + && lnum == current_lnum + && col > current_col) { + // next_match may not be correct when moving around, e.g. with the + // "skip" expression in searchpair() + next_match_idx = -1; + } (void)get_syntax_attr(col, spellp, keep_state); diff --git a/src/nvim/version.c b/src/nvim/version.c index bc10187aa3..0b4db941e8 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -149,7 +149,7 @@ static int included_patches[] = { // 1144 NA // 1143, // 1142, - // 1141, + 1141, // 1140, // 1139 NA // 1138 NA