changeset 18448:35e0ab1f2975 v8.1.2218

patch 8.1.2218: "gN" is off by one in Visual mode Commit: https://github.com/vim/vim/commit/453c19257f6d97904ec2e3823e88e63c983f2f9a Author: Bram Moolenaar <Bram@vim.org> Date: Sat Oct 26 14:42:09 2019 +0200 patch 8.1.2218: "gN" is off by one in Visual mode Problem: "gN" is off by one in Visual mode. Solution: Check moving forward. (Christian Brabandt, https://github.com/vim/vim/issues/5075)
author Bram Moolenaar <Bram@vim.org>
date Sat, 26 Oct 2019 14:45:03 +0200
parents d978101d8bfd
children 2d1716e5ba53
files src/search.c src/testdir/test_gn.vim src/version.c
diffstat 3 files changed, 9 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/search.c
+++ b/src/search.c
@@ -4677,7 +4677,7 @@ abort_search:
 #endif /* FEAT_TEXTOBJ */
 
 /*
- * Check if the pattern is one character long or zero-width.
+ * Check if the pattern is zero-width.
  * If move is TRUE, check from the beginning of the buffer, else from position
  * "cur".
  * "direction" is FORWARD or BACKWARD.
@@ -4851,7 +4851,7 @@ current_search(
 
     // put cursor on last character of match
     curwin->w_cursor = end_pos;
-    if (LT_POS(VIsual, end_pos))
+    if (LT_POS(VIsual, end_pos) && forward)
 	dec_cursor();
     else if (VIsual_active && LT_POS(curwin->w_cursor, VIsual))
 	curwin->w_cursor = pos;   // put the cursor on the start of the match
--- a/src/testdir/test_gn.vim
+++ b/src/testdir/test_gn.vim
@@ -148,6 +148,11 @@ func Test_gn_command()
   norm! gg0f7vhhhhgnd
   call assert_equal(['12348'], getline(1,'$'))
   sil! %d _
+  call setline('.', ['12345678'])
+  let @/ = '5'
+  norm! gg0f2vf7gNd
+  call assert_equal(['1678'], getline(1,'$'))
+  sil! %d _
 
   set wrapscan&vim
 endfu
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2218,
+/**/
     2217,
 /**/
     2216,