updated for version 7.0157
diff --git a/src/ops.c b/src/ops.c
index dc0e52b..a88c907 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -3724,10 +3724,13 @@
 	    && curwin->w_cursor.col > 0
 	    && !(restart_edit || (State & INSERT)))
     {
-	--curwin->w_cursor.col;
+#ifdef FEAT_VIRTUALEDIT
+	col = curwin->w_cursor.col;
+#endif
+	dec_cursor();
 #ifdef FEAT_VIRTUALEDIT
 	if (ve_flags == VE_ALL)
-	    ++curwin->w_cursor.coladd;
+	    curwin->w_cursor.coladd = col - curwin->w_cursor.col;
 #endif
     }
 }