patch 9.0.1273: "1v" may select block with wrong size

Problem:    "1v" may select block with wrong size. (Evgeni Chasnovski)
Solution:   Compute "curswant" in the right line. (closes #11925)
This commit is contained in:
Bram Moolenaar 2023-02-01 17:33:18 +00:00
parent e8d4ae0d11
commit 8f531662e2
3 changed files with 19 additions and 1 deletions

View File

@ -5493,8 +5493,13 @@ nv_visual(cmdarg_T *cap)
}
else if (VIsual_mode == Ctrl_V)
{
// Update curswant on the original line, that is where "col" is
// valid.
linenr_T lnum = curwin->w_cursor.lnum;
curwin->w_cursor.lnum = VIsual.lnum;
update_curswant_force();
curwin->w_curswant += + resel_VIsual_vcol * cap->count0 - 1;
curwin->w_curswant += resel_VIsual_vcol * cap->count0 - 1;
curwin->w_cursor.lnum = lnum;
coladvance(curwin->w_curswant);
}
else

View File

@ -1318,6 +1318,17 @@ func Test_visual_block_with_substitute()
endfunc
func Test_visual_reselect_with_count()
enew
call setline(1, ['aaaaaa', '✗ bbbb', '✗ bbbb'])
exe "normal! 2Gw\<C-V>jed"
exe "normal! gg0lP"
call assert_equal(['abbbbaaaaa', '✗bbbb ', '✗ '], getline(1, '$'))
exe "normal! 1vr."
call assert_equal(['a....aaaaa', '✗.... ', '✗ '], getline(1, '$'))
bwipe!
" this was causing an illegal memory access
let lines =<< trim END

View File

@ -695,6 +695,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1273,
/**/
1272,
/**/