diff src/ops.c @ 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 94db9c08e206
children 3d1872fbecc4
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--;