changeset 12855:3c09e451af3a v8.0.1304

patch 8.0.1304: CTRL-G/CTRL-T don't work with incsearch and empty pattern commit https://github.com/vim/vim/commit/d0480097177369a6ed91d47aba189ae647afcd68 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Nov 16 22:20:39 2017 +0100 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 https://github.com/vim/vim/issues/2292)
author Christian Brabandt <cb@256bit.org>
date Thu, 16 Nov 2017 22:30:06 +0100
parents aea77fb82d7a
children 4c4a02a946f0
files src/ex_getln.c src/proto/search.pro src/search.c src/testdir/test_search.vim src/version.c
diffstat 5 files changed, 26 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -220,7 +220,7 @@ getcmdline(
     pos_T       match_end;
 # ifdef FEAT_DIFF
     int		old_topfill;
-    int         init_topfill = curwin->w_topfill;
+    int		init_topfill = curwin->w_topfill;
 # endif
     linenr_T	old_botline;
     linenr_T	init_botline = curwin->w_botline;
@@ -1715,11 +1715,17 @@ getcmdline(
 		if (p_is && !cmd_silent && (firstc == '/' || firstc == '?'))
 		{
 		    pos_T  t;
+		    char_u *pat;
 		    int    search_flags = SEARCH_NOOF;
 
 		    if (ccline.cmdlen == 0)
 			goto cmdline_not_changed;
 
+		    if (firstc == ccline.cmdbuff[0])
+			pat = last_search_pattern();
+		    else
+			pat = ccline.cmdbuff;
+
 		    save_last_search_pattern();
 		    cursor_off();
 		    out_flush();
@@ -1739,7 +1745,7 @@ getcmdline(
 		    ++emsg_off;
 		    i = searchit(curwin, curbuf, &t,
 				 c == Ctrl_G ? FORWARD : BACKWARD,
-				 ccline.cmdbuff, count, search_flags,
+				 pat, count, search_flags,
 				 RE_SEARCH, 0, NULL, NULL);
 		    --emsg_off;
 		    if (i)
--- a/src/proto/search.pro
+++ b/src/proto/search.pro
@@ -7,6 +7,7 @@ void save_search_patterns(void);
 void restore_search_patterns(void);
 void save_last_search_pattern(void);
 void restore_last_search_pattern(void);
+char_u *last_search_pattern(void);
 void free_search_patterns(void);
 int ignorecase(char_u *pat);
 int ignorecase_opt(char_u *pat, int ic_in, int scs);
--- a/src/search.c
+++ b/src/search.c
@@ -393,6 +393,12 @@ restore_last_search_pattern(void)
     last_idx = saved_last_idx;
     SET_NO_HLSEARCH(saved_no_hlsearch);
 }
+
+    char_u *
+last_search_pattern(void)
+{
+    return spats[RE_SEARCH].pat;
+}
 #endif
 
 /*
--- a/src/testdir/test_search.vim
+++ b/src/testdir/test_search.vim
@@ -461,6 +461,15 @@ func Test_search_cmdline7()
   " moves to next match of previous search pattern, just like /<cr>
   call feedkeys("/\<c-t>\<cr>", 'tx')
   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
   call test_override("char_avail", 0)
   bw!
--- a/src/version.c
+++ b/src/version.c
@@ -767,6 +767,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1304,
+/**/
     1303,
 /**/
     1302,