mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
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.
This commit is contained in:
@@ -2911,6 +2911,7 @@ free_cmdmod(void)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Parse the address range, if any, in "eap".
|
* Parse the address range, if any, in "eap".
|
||||||
|
* May set the last search pattern.
|
||||||
* Return FAIL and set "errormsg" or return OK.
|
* Return FAIL and set "errormsg" or return OK.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
@@ -4436,10 +4437,11 @@ skip_range(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* get a single EX address
|
* Get a single EX address.
|
||||||
*
|
*
|
||||||
* Set ptr to the next character after the part that was interpreted.
|
* Set ptr to the next character after the part that was interpreted.
|
||||||
* Set ptr to NULL when an error is encountered.
|
* Set ptr to NULL when an error is encountered.
|
||||||
|
* This may set the last used search pattern.
|
||||||
*
|
*
|
||||||
* Return MAXLNUM when no Ex address was found.
|
* Return MAXLNUM when no Ex address was found.
|
||||||
*/
|
*/
|
||||||
|
@@ -271,6 +271,7 @@ set_search_match(pos_T *t)
|
|||||||
/*
|
/*
|
||||||
* Return TRUE when 'incsearch' highlighting is to be done.
|
* Return TRUE when 'incsearch' highlighting is to be done.
|
||||||
* Sets search_first_line and search_last_line to the address range.
|
* Sets search_first_line and search_last_line to the address range.
|
||||||
|
* May change the last search pattern.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
do_incsearch_highlighting(int firstc, incsearch_state_T *is_state,
|
do_incsearch_highlighting(int firstc, incsearch_state_T *is_state,
|
||||||
@@ -470,8 +471,12 @@ may_do_incsearch_highlighting(
|
|||||||
int next_char;
|
int next_char;
|
||||||
int use_last_pat;
|
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))
|
if (!do_incsearch_highlighting(firstc, is_state, &skiplen, &patlen))
|
||||||
{
|
{
|
||||||
|
restore_last_search_pattern();
|
||||||
finish_incsearch_highlighting(FALSE, is_state, TRUE);
|
finish_incsearch_highlighting(FALSE, is_state, TRUE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -479,6 +484,7 @@ may_do_incsearch_highlighting(
|
|||||||
// If there is a character waiting, search and redraw later.
|
// If there is a character waiting, search and redraw later.
|
||||||
if (char_avail())
|
if (char_avail())
|
||||||
{
|
{
|
||||||
|
restore_last_search_pattern();
|
||||||
is_state->incsearch_postponed = TRUE;
|
is_state->incsearch_postponed = TRUE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -493,7 +499,6 @@ may_do_incsearch_highlighting(
|
|||||||
curwin->w_cursor.lnum = search_first_line;
|
curwin->w_cursor.lnum = search_first_line;
|
||||||
curwin->w_cursor.col = 0;
|
curwin->w_cursor.col = 0;
|
||||||
}
|
}
|
||||||
save_last_search_pattern();
|
|
||||||
|
|
||||||
// Use the previous pattern for ":s//".
|
// Use the previous pattern for ":s//".
|
||||||
next_char = ccline.cmdbuff[skiplen + patlen];
|
next_char = ccline.cmdbuff[skiplen + patlen];
|
||||||
@@ -627,10 +632,19 @@ may_adjust_incsearch_highlighting(
|
|||||||
int i;
|
int i;
|
||||||
int save;
|
int save;
|
||||||
|
|
||||||
|
// Parsing range may already set the last search pattern.
|
||||||
|
save_last_search_pattern();
|
||||||
|
|
||||||
if (!do_incsearch_highlighting(firstc, is_state, &skiplen, &patlen))
|
if (!do_incsearch_highlighting(firstc, is_state, &skiplen, &patlen))
|
||||||
|
{
|
||||||
|
restore_last_search_pattern();
|
||||||
return OK;
|
return OK;
|
||||||
|
}
|
||||||
if (patlen == 0 && ccline.cmdbuff[skiplen] == NUL)
|
if (patlen == 0 && ccline.cmdbuff[skiplen] == NUL)
|
||||||
|
{
|
||||||
|
restore_last_search_pattern();
|
||||||
return FAIL;
|
return FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
if (firstc == ccline.cmdbuff[skiplen])
|
if (firstc == ccline.cmdbuff[skiplen])
|
||||||
{
|
{
|
||||||
@@ -641,7 +655,6 @@ may_adjust_incsearch_highlighting(
|
|||||||
else
|
else
|
||||||
pat = ccline.cmdbuff + skiplen;
|
pat = ccline.cmdbuff + skiplen;
|
||||||
|
|
||||||
save_last_search_pattern();
|
|
||||||
cursor_off();
|
cursor_off();
|
||||||
out_flush();
|
out_flush();
|
||||||
if (c == Ctrl_G)
|
if (c == Ctrl_G)
|
||||||
@@ -721,8 +734,14 @@ may_add_char_to_search(int firstc, int *c, incsearch_state_T *is_state)
|
|||||||
{
|
{
|
||||||
int skiplen, patlen;
|
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))
|
if (!do_incsearch_highlighting(firstc, is_state, &skiplen, &patlen))
|
||||||
|
{
|
||||||
|
restore_last_search_pattern();
|
||||||
return FAIL;
|
return FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
// Add a character from under the cursor for 'incsearch'.
|
// Add a character from under the cursor for 'incsearch'.
|
||||||
if (is_state->did_incsearch)
|
if (is_state->did_incsearch)
|
||||||
|
@@ -1043,6 +1043,23 @@ func Test_incsearch_vimgrep_dump()
|
|||||||
call delete('Xis_vimgrep_script')
|
call delete('Xis_vimgrep_script')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_keep_last_search_pattern()
|
||||||
|
if !exists('+incsearch')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
new
|
||||||
|
call setline(1, ['foo', 'foo', 'foo'])
|
||||||
|
set incsearch
|
||||||
|
call test_override("char_avail", 1)
|
||||||
|
let @/ = 'bar'
|
||||||
|
call feedkeys(":/foo/s//\<Esc>", 'ntx')
|
||||||
|
call assert_equal('bar', @/)
|
||||||
|
|
||||||
|
bwipe!
|
||||||
|
call test_override("ALL", 0)
|
||||||
|
set noincsearch
|
||||||
|
endfunc
|
||||||
|
|
||||||
func Test_search_undefined_behaviour()
|
func Test_search_undefined_behaviour()
|
||||||
if !has("terminal")
|
if !has("terminal")
|
||||||
return
|
return
|
||||||
|
@@ -794,6 +794,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
351,
|
||||||
/**/
|
/**/
|
||||||
350,
|
350,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user