]> granicus.if.org Git - vim/commitdiff
patch 8.0.0225: put in Visual block mode terminates early v8.0.0225
authorBram Moolenaar <Bram@vim.org>
Mon, 23 Jan 2017 20:53:53 +0000 (21:53 +0100)
committerBram Moolenaar <Bram@vim.org>
Mon, 23 Jan 2017 20:53:53 +0000 (21:53 +0100)
Problem:    When a block is visually selected and put is used on the end of
            the selection only one line is changed.
Solution:   Check for the end properly. (Christian Brabandt, neovim issue
            5781)

src/ops.c
src/testdir/test_put.vim
src/version.c

index 4d01ef1c66411cf930664bf1b4ea1046f588200e..1abb8daa1fe9b042bc9d060d031fa82e18c2c3d1 100644 (file)
--- a/src/ops.c
+++ b/src/ops.c
@@ -3774,6 +3774,11 @@ do_put(
         */
        if (y_type == MCHAR && y_size == 1)
        {
+           linenr_T end = curbuf->b_visual.vi_end.lnum;
+
+           if (curbuf->b_visual.vi_end.lnum < curbuf->b_visual.vi_start.lnum)
+               end = curbuf->b_visual.vi_start.lnum;
+
            do {
                totlen = count * yanklen;
                if (totlen > 0)
@@ -3801,7 +3806,7 @@ do_put(
                }
                if (VIsual_active)
                    lnum++;
-           } while (VIsual_active && lnum <= curbuf->b_visual.vi_end.lnum);
+           } while (VIsual_active && lnum <= end);
 
            if (VIsual_active) /* reset lnum to the last visual line */
                lnum--;
index 612bdabb6c4c50bcba0a3adbeb370fa79ee790dd..0154de1ec05f1988825e59952e61fd8fee4ff893 100644 (file)
@@ -10,3 +10,14 @@ func Test_put_block()
   call assert_equal("\u2500x", getline(1))
   bwipe!
 endfunc
+
+func Test_put_char_block()
+  new
+  call setline(1, ['Line 1', 'Line 2'])
+  f Xfile_put
+  " visually select both lines and put the cursor at the top of the visual
+  " selection and then put the buffer name over it
+  exe "norm! G0\<c-v>ke\"%p"
+  call assert_equal(['Xfile_put 1', 'Xfile_put 2'], getline(1,2))
+  bw!
+endfunc
index 86d78165554efe7c5cf899f809695b13c1a12e31..6020472e25a22c274c27e43cf5cdb2c53f7bf1b7 100644 (file)
@@ -764,6 +764,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    225,
 /**/
     224,
 /**/