patch 8.2.0963: number increment/decrement does not work with 'virtualedit'

Problem:    Number increment/decrement does not work with 'virtualedit'.
Solution:   Handle coladd changing. (Christian Brabandt, closes #6240,
            closes #923)
diff --git a/src/ops.c b/src/ops.c
index ca00c25..8f31deb 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -2446,6 +2446,7 @@
     int		maxlen = 0;
     pos_T	startpos;
     pos_T	endpos;
+    colnr_T	save_coladd = 0;
 
     do_hex = (vim_strchr(curbuf->b_p_nf, 'x') != NULL);	// "heX"
     do_oct = (vim_strchr(curbuf->b_p_nf, 'o') != NULL);	// "Octal"
@@ -2453,11 +2454,17 @@
     do_alpha = (vim_strchr(curbuf->b_p_nf, 'p') != NULL);	// "alPha"
     do_unsigned = (vim_strchr(curbuf->b_p_nf, 'u') != NULL);	// "Unsigned"
 
+    if (virtual_active())
+    {
+	save_coladd = pos->coladd;
+	pos->coladd = 0;
+    }
+
     curwin->w_cursor = *pos;
     ptr = ml_get(pos->lnum);
     col = pos->col;
 
-    if (*ptr == NUL)
+    if (*ptr == NUL || col + !!save_coladd >= (int)STRLEN(ptr))
 	goto theend;
 
     /*
@@ -2824,6 +2831,8 @@
 	curwin->w_cursor = save_cursor;
     else if (did_change)
 	curwin->w_set_curswant = TRUE;
+    else if (virtual_active())
+	curwin->w_cursor.coladd = save_coladd;
 
     return did_change;
 }