Mercurial > vim
diff src/ex_getln.c @ 14677:7771a1ff8b99 v8.1.0351
patch 8.1.0351: 'incsearch' for :/foo/s//<Esc> changes last search pattern
commit https://github.com/vim/vim/commit/198cb66d652d3d8ac16226dcc929a11b0b720151
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Sep 6 21:44:17 2018 +0200
patch 8.1.0351: 'incsearch' for :/foo/s//<Esc> changes last search pattern
Problem: 'incsearch' for :/foo/s//<Esc> changes last search pattern.
Solution: Save the last search pattern earlier.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Thu, 06 Sep 2018 21:45:05 +0200 |
parents | f3b183c3d3e2 |
children | 2982a54aa304 |
line wrap: on
line diff
--- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -271,6 +271,7 @@ set_search_match(pos_T *t) /* * Return TRUE when 'incsearch' highlighting is to be done. * Sets search_first_line and search_last_line to the address range. + * May change the last search pattern. */ static int do_incsearch_highlighting(int firstc, incsearch_state_T *is_state, @@ -470,8 +471,12 @@ may_do_incsearch_highlighting( int next_char; int use_last_pat; + // Parsing range may already set the last search pattern. + save_last_search_pattern(); + if (!do_incsearch_highlighting(firstc, is_state, &skiplen, &patlen)) { + restore_last_search_pattern(); finish_incsearch_highlighting(FALSE, is_state, TRUE); return; } @@ -479,6 +484,7 @@ may_do_incsearch_highlighting( // If there is a character waiting, search and redraw later. if (char_avail()) { + restore_last_search_pattern(); is_state->incsearch_postponed = TRUE; return; } @@ -493,7 +499,6 @@ may_do_incsearch_highlighting( curwin->w_cursor.lnum = search_first_line; curwin->w_cursor.col = 0; } - save_last_search_pattern(); // Use the previous pattern for ":s//". next_char = ccline.cmdbuff[skiplen + patlen]; @@ -627,10 +632,19 @@ may_adjust_incsearch_highlighting( int i; int save; + // Parsing range may already set the last search pattern. + save_last_search_pattern(); + if (!do_incsearch_highlighting(firstc, is_state, &skiplen, &patlen)) + { + restore_last_search_pattern(); return OK; + } if (patlen == 0 && ccline.cmdbuff[skiplen] == NUL) + { + restore_last_search_pattern(); return FAIL; + } if (firstc == ccline.cmdbuff[skiplen]) { @@ -641,7 +655,6 @@ may_adjust_incsearch_highlighting( else pat = ccline.cmdbuff + skiplen; - save_last_search_pattern(); cursor_off(); out_flush(); if (c == Ctrl_G) @@ -721,8 +734,14 @@ may_add_char_to_search(int firstc, int * { int skiplen, patlen; + // Parsing range may already set the last search pattern. + save_last_search_pattern(); + if (!do_incsearch_highlighting(firstc, is_state, &skiplen, &patlen)) + { + restore_last_search_pattern(); return FAIL; + } // Add a character from under the cursor for 'incsearch'. if (is_state->did_incsearch)