From b3b47e540d35742503ea372c5a97e8fb5681ab26 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Thu, 16 Oct 2025 18:17:45 +0000 Subject: [PATCH] patch 9.1.1858: v:register not reset after Visual mode command Problem: v:register not reset after Visual mode command. (laktak) Solution: Reset v:register if Visual mode was active before do_pending_operator() (zeertzjq) fixes: #18579 related: #5305 closes: #18583 Signed-off-by: zeertzjq Signed-off-by: Christian Brabandt --- src/normal.c | 6 +++++- src/testdir/test_registers.vim | 12 +++++++++++- src/version.c | 2 ++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/normal.c b/src/normal.c index 3b9934017b..ead265dc26 100644 --- a/src/normal.c +++ b/src/normal.c @@ -968,6 +968,10 @@ normal_cmd( if (old_mapped_len > 0) old_mapped_len = typebuf_maplen(); +#ifdef FEAT_EVAL + int prev_VIsual_active = VIsual_active; +#endif + // If an operation is pending, handle it. But not for K_IGNORE or // K_MOUSEMOVE. if (ca.cmdchar != K_IGNORE && ca.cmdchar != K_MOUSEMOVE) @@ -984,7 +988,7 @@ normal_end: msg_nowait = FALSE; #ifdef FEAT_EVAL - if (finish_op) + if (finish_op || prev_VIsual_active) reset_reg_var(); #endif diff --git a/src/testdir/test_registers.vim b/src/testdir/test_registers.vim index f1a241313c..4d04ff7cdc 100644 --- a/src/testdir/test_registers.vim +++ b/src/testdir/test_registers.vim @@ -699,8 +699,13 @@ func Test_v_register() let s:register = '' call feedkeys('"_ddS', 'mx') - call assert_equal('test@', getline('.')) " fails before 8.2.0929 call assert_equal('"', s:register) " fails before 8.2.0929 + call assert_equal('test@', getline('.')) " fails before 8.2.0929 + + let s:register = '' + call feedkeys('V"_dS', 'mx') + call assert_equal('"', s:register) + call assert_equal('test@', getline('.')) let s:register = '' call feedkeys('"zS', 'mx') @@ -719,6 +724,11 @@ func Test_v_register() call assert_equal('"', s:register) " fails before 8.2.0929 call assert_equal('test@', getline('.')) " fails before 8.2.0929 + let s:register = '' + normal V"_dS + call assert_equal('"', s:register) + call assert_equal('test@', getline('.')) + let s:register = '' execute 'normal "z:call' "s:Put()\n" call assert_equal('z', s:register) diff --git a/src/version.c b/src/version.c index bf98e2d618..3217452c88 100644 --- a/src/version.c +++ b/src/version.c @@ -734,6 +734,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1858, /**/ 1857, /**/