changeset 10670:bce3eccea39a v8.0.0225

patch 8.0.0225: put in Visual block mode terminates early commit https://github.com/vim/vim/commit/9957a10d0f0c34d8083af6ed66e198e4796038e0 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Jan 23 21:53:53 2017 +0100 patch 8.0.0225: put in Visual block mode terminates early 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)
author Christian Brabandt <cb@256bit.org>
date Mon, 23 Jan 2017 22:00:04 +0100
parents f916ebf3a8b2
children e9f60fdded99
files src/ops.c src/testdir/test_put.vim src/version.c
diffstat 3 files changed, 19 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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--;
--- a/src/testdir/test_put.vim
+++ b/src/testdir/test_put.vim
@@ -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
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    225,
+/**/
     224,
 /**/
     223,