On Fr, 30 Jun 2017, Bram Moolenaar wrote: > OK, now I get it. Looks like CTRL-G works in the other direction. > I'll leave this to Christian.
Here is a patch. Best, Christian -- Augen, die nicht ferne blicken, Und auch nicht zur Liebe taugen, Aber ganz entsetzlich drücken, Sind des Vetters Hühneraugen. -- Heinrich Heine -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
From 39023f250005e091775c81beea622630ecbc20f2 Mon Sep 17 00:00:00 2001 From: Christian Brabandt <c...@256bit.org> Date: Fri, 30 Jun 2017 20:12:00 +0200 Subject: [PATCH] searching backwards with ? and <c-g> works unexpected When incsearch is set and one uses ? and <c-g> the cursor might be moved to an unexpected location. Make sure, the cursor is put at the expected location and add a test. --- src/ex_getln.c | 8 ++++++++ src/testdir/test_search.vim | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/ex_getln.c b/src/ex_getln.c index 11de136bf..a888ba412 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 18a4577b7..69b1335ef 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\<c-g>\<cr>", 'tx') + call assert_equal(' 3 the third', getline('.')) + $ + call feedkeys("?the\<c-g>\<c-g>\<cr>", 'tx') + call assert_equal(' 1 the first', getline('.')) + $ + call feedkeys("?the\<c-g>\<c-g>\<c-g>\<cr>", 'tx') + call assert_equal(' 2 the second', getline('.')) + $ + call feedkeys("?the\<c-t>\<cr>", 'tx') + call assert_equal(' 1 the first', getline('.')) + $ + call feedkeys("?the\<c-t>\<c-t>\<cr>", 'tx') + call assert_equal(' 3 the third', getline('.')) + $ + call feedkeys("?the\<c-t>\<c-t>\<c-t>\<cr>", 'tx') + call assert_equal(' 2 the second', getline('.')) + " clean up + set noincsearch + call test_override("char_avail", 0) + bw! +endfunc -- 2.11.0