From da5116da4586fc714434411d2cccb066caa3723e Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sat, 1 Jul 2017 23:11:17 +0200 Subject: patch 8.0.0692: CTRL-G with 'incsearch' and ? goes in the wrong direction Problem: Using CTRL-G with 'incsearch' and ? goes in the wrong direction. (Ramel Eshed) Solution: Adjust search_start. (Christian Brabandt) --- src/ex_getln.c | 8 ++++++++ src/testdir/test_search.vim | 34 ++++++++++++++++++++++++++++++++++ src/version.c | 2 ++ 3 files changed, 44 insertions(+) (limited to 'src') diff --git a/src/ex_getln.c b/src/ex_getln.c index 11de136bf7..a888ba412d 100644 --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -1708,6 +1708,14 @@ getcmdline( search_start = t; (void)decl(&search_start); } + else if (c == Ctrl_G && firstc == '?') + { + /* move just after the current match, so that + * when nv_search finishes the cursor will be + * put back on the match */ + search_start = t; + (void)incl(&search_start); + } if (LT_POS(t, search_start) && c == Ctrl_G) { /* wrap around */ diff --git a/src/testdir/test_search.vim b/src/testdir/test_search.vim index 18a4577b7f..69b1335efb 100644 --- a/src/testdir/test_search.vim +++ b/src/testdir/test_search.vim @@ -322,3 +322,37 @@ func Test_search_cmdline3() call test_override("char_avail", 0) bw! endfunc + +func Test_search_cmdline4() + if !exists('+incsearch') + return + endif + " need to disable char_avail, + " so that expansion of commandline works + call test_override("char_avail", 1) + new + call setline(1, [' 1 the first', ' 2 the second', ' 3 the third']) + set incsearch + $ + call feedkeys("?the\\", 'tx') + call assert_equal(' 3 the third', getline('.')) + $ + call feedkeys("?the\\\", 'tx') + call assert_equal(' 1 the first', getline('.')) + $ + call feedkeys("?the\\\\", 'tx') + call assert_equal(' 2 the second', getline('.')) + $ + call feedkeys("?the\\", 'tx') + call assert_equal(' 1 the first', getline('.')) + $ + call feedkeys("?the\\\", 'tx') + call assert_equal(' 3 the third', getline('.')) + $ + call feedkeys("?the\\\\", 'tx') + call assert_equal(' 2 the second', getline('.')) + " clean up + set noincsearch + call test_override("char_avail", 0) + bw! +endfunc diff --git a/src/version.c b/src/version.c index 4e7558a4b4..917eaa85d2 100644 --- a/src/version.c +++ b/src/version.c @@ -764,6 +764,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 692, /**/ 691, /**/ -- cgit v1.2.3