]> granicus.if.org Git - vim/commitdiff
patch 8.1.2244: 'wrapscan' is not used for "gn" v8.1.2244
authorBram Moolenaar <Bram@vim.org>
Sat, 2 Nov 2019 22:22:47 +0000 (23:22 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 2 Nov 2019 22:22:47 +0000 (23:22 +0100)
Problem:    'wrapscan' is not used for "gn".
Solution:   Only reset 'wrapscan' for the first search round. (closes #5164)

src/search.c
src/testdir/test_gn.vim
src/version.c

index 18f7905e585abe1dd2f830af41e1485c0df14f48..00f0a08ffea7af83e4e8664a7a9d0ae0ce5008cf 100644 (file)
@@ -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;
index 9edf0a21eaef740ea7fbc85020a313f441eddec6..098fc3db4d0568e16170638c7f1a77cd72c0098a 100644 (file)
@@ -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'
index 4b1acc5d7def74b061f93c052a5c8baa148a044b..5f009e316f0d6e0b569dd45d56013e969cfb2b4d 100644 (file)
@@ -741,6 +741,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2244,
 /**/
     2243,
 /**/