summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2023-02-01 17:33:18 +0000
committerBram Moolenaar <Bram@vim.org>2023-02-01 17:33:18 +0000
commit8f531662e28c37560bf5ac20a059bf00d01ee5a4 (patch)
tree5939384cb899ffb6d2c7cc57739898cb7690e83f
parente8d4ae0d1153ecb45ebf48030be60640e8800540 (diff)
downloadvim-git-8f531662e28c37560bf5ac20a059bf00d01ee5a4.tar.gz
patch 9.0.1273: "1v" may select block with wrong sizev9.0.1273
Problem: "1v" may select block with wrong size. (Evgeni Chasnovski) Solution: Compute "curswant" in the right line. (closes #11925)
-rw-r--r--src/normal.c7
-rw-r--r--src/testdir/test_visual.vim11
-rw-r--r--src/version.c2
3 files changed, 19 insertions, 1 deletions
diff --git a/src/normal.c b/src/normal.c
index 0bd6655f2..9a3006705 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -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
diff --git a/src/testdir/test_visual.vim b/src/testdir/test_visual.vim
index a56c28854..295e16f93 100644
--- a/src/testdir/test_visual.vim
+++ b/src/testdir/test_visual.vim
@@ -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
diff --git a/src/version.c b/src/version.c
index dc3fad59d..ff2105c87 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1273,
+/**/
1272,
/**/
1271,