0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.0.1304: CTRL-G/CTRL-T don't work with incsearch and empty pattern

Problem:    CTRL-G/CTRL-T don't work with incsearch and empty pattern.
Solution:   Use the last search pattern. (Christian Brabandt, closes #2292)
This commit is contained in:
Bram Moolenaar 2017-11-16 22:20:39 +01:00
parent 9c6ce0e622
commit d048009717
5 changed files with 26 additions and 2 deletions

View File

@ -220,7 +220,7 @@ getcmdline(
pos_T match_end; pos_T match_end;
# ifdef FEAT_DIFF # ifdef FEAT_DIFF
int old_topfill; int old_topfill;
int init_topfill = curwin->w_topfill; int init_topfill = curwin->w_topfill;
# endif # endif
linenr_T old_botline; linenr_T old_botline;
linenr_T init_botline = curwin->w_botline; linenr_T init_botline = curwin->w_botline;
@ -1715,11 +1715,17 @@ getcmdline(
if (p_is && !cmd_silent && (firstc == '/' || firstc == '?')) if (p_is && !cmd_silent && (firstc == '/' || firstc == '?'))
{ {
pos_T t; pos_T t;
char_u *pat;
int search_flags = SEARCH_NOOF; int search_flags = SEARCH_NOOF;
if (ccline.cmdlen == 0) if (ccline.cmdlen == 0)
goto cmdline_not_changed; goto cmdline_not_changed;
if (firstc == ccline.cmdbuff[0])
pat = last_search_pattern();
else
pat = ccline.cmdbuff;
save_last_search_pattern(); save_last_search_pattern();
cursor_off(); cursor_off();
out_flush(); out_flush();
@ -1739,7 +1745,7 @@ getcmdline(
++emsg_off; ++emsg_off;
i = searchit(curwin, curbuf, &t, i = searchit(curwin, curbuf, &t,
c == Ctrl_G ? FORWARD : BACKWARD, c == Ctrl_G ? FORWARD : BACKWARD,
ccline.cmdbuff, count, search_flags, pat, count, search_flags,
RE_SEARCH, 0, NULL, NULL); RE_SEARCH, 0, NULL, NULL);
--emsg_off; --emsg_off;
if (i) if (i)

View File

@ -7,6 +7,7 @@ void save_search_patterns(void);
void restore_search_patterns(void); void restore_search_patterns(void);
void save_last_search_pattern(void); void save_last_search_pattern(void);
void restore_last_search_pattern(void); void restore_last_search_pattern(void);
char_u *last_search_pattern(void);
void free_search_patterns(void); void free_search_patterns(void);
int ignorecase(char_u *pat); int ignorecase(char_u *pat);
int ignorecase_opt(char_u *pat, int ic_in, int scs); int ignorecase_opt(char_u *pat, int ic_in, int scs);

View File

@ -393,6 +393,12 @@ restore_last_search_pattern(void)
last_idx = saved_last_idx; last_idx = saved_last_idx;
SET_NO_HLSEARCH(saved_no_hlsearch); SET_NO_HLSEARCH(saved_no_hlsearch);
} }
char_u *
last_search_pattern(void)
{
return spats[RE_SEARCH].pat;
}
#endif #endif
/* /*

View File

@ -461,6 +461,15 @@ func Test_search_cmdline7()
" moves to next match of previous search pattern, just like /<cr> " moves to next match of previous search pattern, just like /<cr>
call feedkeys("/\<c-t>\<cr>", 'tx') call feedkeys("/\<c-t>\<cr>", 'tx')
call assert_equal([0,1,7,0], getpos('.')) call assert_equal([0,1,7,0], getpos('.'))
" using an offset uses the last search pattern
call cursor(1, 1)
call setline(1, ['1 bbvimb', ' 2 bbvimb'])
let @/ = 'b'
call feedkeys("//e\<c-g>\<cr>", 'tx')
call assert_equal('1 bbvimb', getline('.'))
call assert_equal(4, col('.'))
set noincsearch set noincsearch
call test_override("char_avail", 0) call test_override("char_avail", 0)
bw! bw!

View File

@ -766,6 +766,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 */
/**/
1304,
/**/ /**/
1303, 1303,
/**/ /**/