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)
diff --git a/src/normal.c b/src/normal.c
index 0bd6655..9a30067 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -5493,8 +5493,13 @@
}
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
diff --git a/src/testdir/test_visual.vim b/src/testdir/test_visual.vim
index a56c288..295e16f 100644
--- a/src/testdir/test_visual.vim
+++ b/src/testdir/test_visual.vim
@@ -1318,6 +1318,17 @@
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
diff --git a/src/version.c b/src/version.c
index dc3fad5..ff2105c 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1273,
+/**/
1272,
/**/
1271,