Patch 8.1.0275
Problem:    'incsearch' with :s doesn't start at cursor line.
Solution:   Set cursor before parsing address. (closes #3318)
            Also accept a match at the start of the first line.
Files:      src/ex_getln.c, src/testdir/test_search.vim


*** ../vim-8.1.0274/src/ex_getln.c      2018-08-11 19:20:45.042561404 +0200
--- src/ex_getln.c      2018-08-12 15:48:20.176044564 +0200
***************
*** 316,323 ****
                        ea.line2 = 1;
                        ea.cmd = ccline.cmdbuff;
                        ea.addr_type = ADDR_LINES;
-                       parse_cmd_address(&ea, &dummy);
                        curwin->w_cursor = is_state->search_start;
                        if (ea.addr_count > 0)
                        {
                            search_first_line = ea.line1;
--- 316,323 ----
                        ea.line2 = 1;
                        ea.cmd = ccline.cmdbuff;
                        ea.addr_type = ADDR_LINES;
                        curwin->w_cursor = is_state->search_start;
+                       parse_cmd_address(&ea, &dummy);
                        if (ea.addr_count > 0)
                        {
                            search_first_line = ea.line1;
***************
*** 401,406 ****
--- 401,408 ----
  #endif
        if (!p_hls)
            search_flags += SEARCH_KEEP;
+       if (search_first_line != 0)
+           search_flags += SEARCH_START;
        c = ccline.cmdbuff[skiplen + patlen];
        ccline.cmdbuff[skiplen + patlen] = NUL;
        i = do_search(NULL, firstc == ':' ? '/' : firstc,
*** ../vim-8.1.0274/src/testdir/test_search.vim 2018-08-11 19:20:45.042561404 
+0200
--- src/testdir/test_search.vim 2018-08-12 15:24:06.430745257 +0200
***************
*** 351,357 ****
    set incsearch
  endfunc
  
! func Cmdline3_cleanup()
    set noincsearch
    call test_override("char_avail", 0)
    bw!
--- 351,357 ----
    set incsearch
  endfunc
  
! func Incsearch_cleanup()
    set noincsearch
    call test_override("char_avail", 0)
    bw!
***************
*** 367,373 ****
    call feedkeys("/the\<c-l>\<cr>", 'tx')
    call assert_equal('  2 the~e', getline('.'))
  
!   call Cmdline3_cleanup()
  endfunc
  
  func Test_search_cmdline3s()
--- 367,373 ----
    call feedkeys("/the\<c-l>\<cr>", 'tx')
    call assert_equal('  2 the~e', getline('.'))
  
!   call Incsearch_cleanup()
  endfunc
  
  func Test_search_cmdline3s()
***************
*** 385,391 ****
    call feedkeys(":%substitute/the\<c-l>/xxx\<cr>", 'tx')
    call assert_equal('  2 xxxe', getline('.'))
  
!   call Cmdline3_cleanup()
  endfunc
  
  func Test_search_cmdline3g()
--- 385,391 ----
    call feedkeys(":%substitute/the\<c-l>/xxx\<cr>", 'tx')
    call assert_equal('  2 xxxe', getline('.'))
  
!   call Incsearch_cleanup()
  endfunc
  
  func Test_search_cmdline3g()
***************
*** 400,406 ****
    call feedkeys(":global/the\<c-l>/d\<cr>", 'tx')
    call assert_equal('  3 the theother', getline(2))
  
!   call Cmdline3_cleanup()
  endfunc
  
  func Test_search_cmdline3v()
--- 400,406 ----
    call feedkeys(":global/the\<c-l>/d\<cr>", 'tx')
    call assert_equal('  3 the theother', getline(2))
  
!   call Incsearch_cleanup()
  endfunc
  
  func Test_search_cmdline3v()
***************
*** 417,423 ****
    call assert_equal(1, line('$'))
    call assert_equal('  2 the~e', getline(1))
  
!   call Cmdline3_cleanup()
  endfunc
  
  func Test_search_cmdline4()
--- 417,423 ----
    call assert_equal(1, line('$'))
    call assert_equal('  2 the~e', getline(1))
  
!   call Incsearch_cleanup()
  endfunc
  
  func Test_search_cmdline4()
***************
*** 797,802 ****
--- 797,823 ----
    call delete('Xscript')
  endfunc
  
+ func Test_incsearch_substitute()
+   if !exists('+incsearch')
+     return
+   endif
+   call test_override("char_avail", 1)
+   new
+   set incsearch
+   for n in range(1, 10)
+     call setline(n, 'foo ' . n)
+   endfor
+   4
+   call feedkeys(":.,.+2s/foo\<BS>o\<BS>o/xxx\<cr>", 'tx')
+   call assert_equal('foo 3', getline(3))
+   call assert_equal('xxx 4', getline(4))
+   call assert_equal('xxx 5', getline(5))
+   call assert_equal('xxx 6', getline(6))
+   call assert_equal('foo 7', getline(7))
+ 
+   call Incsearch_cleanup()
+ endfunc
+ 
  func Test_search_undefined_behaviour()
    if !has("terminal")
      return
*** ../vim-8.1.0274/src/version.c       2018-08-11 19:20:45.042561404 +0200
--- src/version.c       2018-08-12 15:29:30.772309260 +0200
***************
*** 796,797 ****
--- 796,799 ----
  {   /* Add new patch number below this line */
+ /**/
+     275,
  /**/

-- 
Any sufficiently advanced technology is indistinguishable from magic.
                                        Arthur C. Clarke
Any sufficiently advanced bug is indistinguishable from a feature.
                                        Rich Kulawiec

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui