changeset 18500:c0445cb7cfe0 v8.1.2244

patch 8.1.2244: 'wrapscan' is not used for "gn" Commit: https://github.com/vim/vim/commit/82cf7f6df751505da285815a791463a049587849 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Nov 2 23:22:47 2019 +0100 patch 8.1.2244: 'wrapscan' is not used for "gn" Problem: 'wrapscan' is not used for "gn". Solution: Only reset 'wrapscan' for the first search round. (closes https://github.com/vim/vim/issues/5164)
author Bram Moolenaar <Bram@vim.org>
date Sat, 02 Nov 2019 23:30:04 +0100
parents b27ed4764264
children c9777bf23eb8
files src/search.c src/testdir/test_gn.vim src/version.c
diffstat 3 files changed, 10 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/search.c
+++ b/src/search.c
@@ -4765,9 +4765,6 @@ current_search(
     pos_T	save_VIsual = VIsual;
     int		zero_width;
 
-    /* wrapping should not occur */
-    p_ws = FALSE;
-
     /* Correct cursor when 'selection' is exclusive */
     if (VIsual_active && *p_sel == 'e' && LT_POS(VIsual, curwin->w_cursor))
 	dec_cursor();
@@ -4786,10 +4783,7 @@ current_search(
     zero_width = is_zero_width(spats[last_idx].pat, TRUE, &curwin->w_cursor,
 								      FORWARD);
     if (zero_width == -1)
-    {
-	p_ws = old_p_ws;
 	return FAIL;  /* pattern not found */
-    }
 
     /*
      * The trick is to first search backwards and then search forward again,
@@ -4808,11 +4802,17 @@ current_search(
 	    flags = SEARCH_END;
 	end_pos = pos;
 
+	// wrapping should not occur in the first round
+	if (i == 0)
+	    p_ws = FALSE;
+
 	result = searchit(curwin, curbuf, &pos, &end_pos,
 		(dir ? FORWARD : BACKWARD),
 		spats[last_idx].pat, (long) (i ? count : 1),
 		SEARCH_KEEP | flags, RE_SEARCH, NULL);
 
+	p_ws = old_p_ws;
+
 	/* First search may fail, but then start searching from the
 	 * beginning of the file (cursor might be on the search match)
 	 * except when Visual mode is active, so that extending the visual
@@ -4822,7 +4822,6 @@ current_search(
 	    curwin->w_cursor = orig_pos;
 	    if (VIsual_active)
 		VIsual = save_VIsual;
-	    p_ws = old_p_ws;
 	    return FAIL;
 	}
 	else if (i == 0 && !result)
@@ -4844,7 +4843,6 @@ current_search(
     }
 
     start_pos = pos;
-    p_ws = old_p_ws;
 
     if (!VIsual_active)
 	VIsual = start_pos;
--- a/src/testdir/test_gn.vim
+++ b/src/testdir/test_gn.vim
@@ -135,8 +135,9 @@ func Test_gn_command()
   call assert_equal(['ABCDEFGHi'], getline(1,'$'))
   call setline('.', ['abcdefghi'])
   let @/ = 'b'
+  " this gn wraps around the end of the file
   exe "norm! 0fhvhhgngU"
-  call assert_equal(['abcdefghi'], getline(1,'$'))
+  call assert_equal(['aBCDEFGHi'], getline(1,'$'))
   sil! %d _
   call setline('.', ['abcdefghi'])
   let @/ = 'f'
--- 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 */
 /**/
+    2244,
+/**/
     2243,
 /**/
     2242,