vim-patch:9.1.1970: visual end column returns wrong value after block edit (#36923)

Problem:  visual end column returns wrong value after block edit
Solution: update visual end column after block insert (phanium)

fixes:  vim/vim#18900
closes: vim/vim#18903

fa3bdc2501

Co-authored-by: phanium <91544758+phanen@users.noreply.github.com>
This commit is contained in:
zeertzjq
2025-12-12 09:38:11 +08:00
committed by GitHub
parent 1bde5a91c4
commit 2b02dfa020
2 changed files with 17 additions and 0 deletions

View File

@@ -692,6 +692,10 @@ static void block_insert(oparg_T *oap, const char *s, size_t slen, bool b_insert
// the insert in the first line.
curbuf->b_op_end.lnum = oap->end.lnum;
curbuf->b_op_end.col = offset;
if (curbuf->b_visual.vi_end.coladd) {
curbuf->b_visual.vi_end.col += curbuf->b_visual.vi_end.coladd;
curbuf->b_visual.vi_end.coladd = 0;
}
}
} // for all lnum

View File

@@ -2826,4 +2826,17 @@ func Test_visual_pos_buffer_heap_overflow()
bw! Xa Xb
endfunc
" Test visual block pos update after block insert and gv
func Test_visual_block_pos_update()
new
set virtualedit=block
call setline(1, ['aacccc', 'bb'])
exe "norm! e\<C-v>jAa\<Esc>gv"
call assert_equal([[0, 1, 6, 0], [0 , 2, 6, 0]], [getpos("v"), getpos(".")])
normal! kj
call assert_equal([[0, 1, 6, 0], [0 , 2, 6, 0]], [getpos("v"), getpos(".")])
set virtualedit=
bw!
endfunc
" vim: shiftwidth=2 sts=2 expandtab