diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-06-12 20:19:44 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-06-12 20:19:44 +0200 |
commit | 6c6be9e88d72a60ee279ccad73d018c534b71d66 (patch) | |
tree | 93869209264c264dc481f4d48ecb6cfcb98b827c /src/ops.c | |
parent | f6e020b1225970d95e6848b79066f82d9e65b66c (diff) | |
download | vim-git-6c6be9e88d72a60ee279ccad73d018c534b71d66.tar.gz |
patch 8.2.0963: number increment/decrement does not work with 'virtualedit'v8.2.0963
Problem: Number increment/decrement does not work with 'virtualedit'.
Solution: Handle coladd changing. (Christian Brabandt, closes #6240,
closes #923)
Diffstat (limited to 'src/ops.c')
-rw-r--r-- | src/ops.c | 11 |
1 files changed, 10 insertions, 1 deletions
@@ -2446,6 +2446,7 @@ do_addsub( 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_addsub( 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 @@ theend: 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; } |