]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.1858: v:register not reset after Visual mode command v9.1.1858
authorzeertzjq <zeertzjq@outlook.com>
Thu, 16 Oct 2025 18:17:45 +0000 (18:17 +0000)
committerChristian Brabandt <cb@256bit.org>
Thu, 16 Oct 2025 18:17:45 +0000 (18:17 +0000)
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 <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
src/normal.c
src/testdir/test_registers.vim
src/version.c

index 3b9934017be45aa070f34c30a2167892307d9cd8..ead265dc269d6940e9843cef11f3614d77e12bb3 100644 (file)
@@ -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
 
index f1a241313cfec8963abc094edddf8652544198a5..4d04ff7cdced4b87ebaa3c07768a090c191e4f2b 100644 (file)
@@ -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)
index bf98e2d6186c37f58a48d2c9a31730381fbb7fb5..3217452c88ece40b0e3f7d22e7b7a8456b009300 100644 (file)
@@ -734,6 +734,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1858,
 /**/
     1857,
 /**/