updated for version 7.0158
diff --git a/src/ops.c b/src/ops.c
index a88c907..8c239da 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -3724,13 +3724,17 @@
 	    && curwin->w_cursor.col > 0
 	    && !(restart_edit || (State & INSERT)))
     {
-#ifdef FEAT_VIRTUALEDIT
-	col = curwin->w_cursor.col;
-#endif
+	/* Put the cursor on the last character in the line. */
 	dec_cursor();
 #ifdef FEAT_VIRTUALEDIT
 	if (ve_flags == VE_ALL)
-	    curwin->w_cursor.coladd = col - curwin->w_cursor.col;
+	{
+	    colnr_T	    scol, ecol;
+
+	    /* Coladd is set to the width of the last character. */
+	    getvcol(curwin, &curwin->w_cursor, &scol, NULL, &ecol);
+	    curwin->w_cursor.coladd = ecol - scol + 1;
+	}
 #endif
     }
 }