]> granicus.if.org Git - vim/commitdiff
patch 8.1.0286: 'incsearch' does not apply to :smagic and :snomagic v8.1.0286
authorBram Moolenaar <Bram@vim.org>
Tue, 14 Aug 2018 19:32:21 +0000 (21:32 +0200)
committerBram Moolenaar <Bram@vim.org>
Tue, 14 Aug 2018 19:32:21 +0000 (21:32 +0200)
Problem:    'incsearch' does not apply to :smagic and :snomagic.
Solution:   Add support. (Hirohito Higashi)

src/ex_getln.c
src/testdir/test_search.vim
src/version.c

index d200eab78a9b9a4b5d2dbdc2cf628fff85fc8e33..4af390440988f84e18a2ccc893e185fa35270f09 100644 (file)
@@ -231,6 +231,7 @@ typedef struct {
     pos_T       match_end;
     int                did_incsearch;
     int                incsearch_postponed;
+    int                magic_save;
 } incsearch_state_T;
 
     static void
@@ -239,6 +240,7 @@ init_incsearch_state(incsearch_state_T *is_state)
     is_state->match_start = curwin->w_cursor;
     is_state->did_incsearch = FALSE;
     is_state->incsearch_postponed = FALSE;
+    is_state->magic_save = p_magic;
     CLEAR_POS(&is_state->match_end);
     is_state->save_cursor = curwin->w_cursor;  // may be restored later
     is_state->search_start = curwin->w_cursor;
@@ -308,9 +310,16 @@ do_incsearch_highlighting(int firstc, incsearch_state_T *is_state,
                    ;
                if (*skipwhite(p) != NUL
                        && (STRNCMP(cmd, "substitute", p - cmd) == 0
+                           || STRNCMP(cmd, "smagic", p - cmd) == 0
+                           || STRNCMP(cmd, "snomagic", MAX(p - cmd, 3)) == 0
                            || STRNCMP(cmd, "global", p - cmd) == 0
                            || STRNCMP(cmd, "vglobal", p - cmd) == 0))
                {
+                   if (*cmd == 's' && cmd[1] == 'm')
+                       p_magic = TRUE;
+                   else if (*cmd == 's' && cmd[1] == 'n')
+                       p_magic = FALSE;
+
                    // Check for "global!/".
                    if (*cmd == 'g' && *p == '!')
                    {
@@ -392,6 +401,7 @@ finish_incsearch_highlighting(
            update_screen(SOME_VALID);
        else
            redraw_all_later(SOME_VALID);
+       p_magic = is_state->magic_save;
     }
 }
 
index a36b4fbcd79f8a24554377d0b491f108a407748b..90a0a0e3b579eed472869507af17973105eef844 100644 (file)
@@ -384,6 +384,14 @@ func Test_search_cmdline3s()
   undo
   call feedkeys(":%substitute/the\<c-l>/xxx\<cr>", 'tx')
   call assert_equal('  2 xxxe', getline('.'))
+  undo
+  call feedkeys(":%smagic/the.e/xxx\<cr>", 'tx')
+  call assert_equal('  2 xxx', getline('.'))
+  undo
+  call assert_fails(":%snomagic/the.e/xxx\<cr>", 'E486')
+  "
+  call feedkeys(":%snomagic/the\\.e/xxx\<cr>", 'tx')
+  call assert_equal('  2 xxx', getline('.'))
 
   call Incsearch_cleanup()
 endfunc
index 876fcf335851a75f7a81bac01c2a881e6e840a73..23bcbf83e1234b3738a6248b4e9082ff4c59ddb1 100644 (file)
@@ -794,6 +794,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    286,
 /**/
     285,
 /**/