diff src/ops.c @ 5680:4d12112c5efa v7.4.186

updated for version 7.4.186 Problem: Insert in Visual mode sometimes gives incorrect results. (Dominique Pelle) Solution: Remember the original insert start position. (Christian Brabandt, Dominique Pelle)
author Bram Moolenaar <bram@vim.org>
date Sat, 22 Feb 2014 23:03:55 +0100
parents 647e6bb15aa3
children 420fd9cb86d5
line wrap: on
line diff
--- a/src/ops.c
+++ b/src/ops.c
@@ -2643,20 +2643,20 @@ op_insert(oap, count1)
 
 	/* The user may have moved the cursor before inserting something, try
 	 * to adjust the block for that. */
-	if (oap->start.lnum == curbuf->b_op_start.lnum && !bd.is_MAX)
+	if (oap->start.lnum == curbuf->b_op_start_orig.lnum && !bd.is_MAX)
 	{
 	    if (oap->op_type == OP_INSERT
-		    && oap->start.col != curbuf->b_op_start.col)
+		    && oap->start.col != curbuf->b_op_start_orig.col)
 	    {
-		oap->start.col = curbuf->b_op_start.col;
+		oap->start.col = curbuf->b_op_start_orig.col;
 		pre_textlen -= getviscol2(oap->start.col, oap->start.coladd)
 							    - oap->start_vcol;
 		oap->start_vcol = getviscol2(oap->start.col, oap->start.coladd);
 	    }
 	    else if (oap->op_type == OP_APPEND
-		    && oap->end.col >= curbuf->b_op_start.col)
+		    && oap->end.col >= curbuf->b_op_start_orig.col)
 	    {
-		oap->start.col = curbuf->b_op_start.col;
+		oap->start.col = curbuf->b_op_start_orig.col;
 		/* reset pre_textlen to the value of OP_INSERT */
 		pre_textlen += bd.textlen;
 		pre_textlen -= getviscol2(oap->start.col, oap->start.coladd)