changeset 21238:136b33ce8216 v8.2.1170

patch 8.2.1170: cursor off by one with block paste while 'virtualedit' "all" Commit: https://github.com/vim/vim/commit/ef85a9b2d9e992ab594e089af3883e381cfad426 Author: Bram Moolenaar <Bram@vim.org> Date: Fri Jul 10 20:24:07 2020 +0200 patch 8.2.1170: cursor off by one with block paste while 'virtualedit' "all" Problem: Cursor off by one with block paste while 'virtualedit' is "all". Solution: Adjust condition. (Hugo Gualandi, closes https://github.com/vim/vim/issues/6430)
author Bram Moolenaar <Bram@vim.org>
date Fri, 10 Jul 2020 20:30:05 +0200
parents d1413829fbc3
children bc30efb26e7d
files src/register.c src/testdir/test_registers.vim src/version.c
diffstat 3 files changed, 21 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/register.c
+++ b/src/register.c
@@ -1764,7 +1764,7 @@ do_put(
 	{
 	    if (dir == FORWARD && c == NUL)
 		++col;
-	    if (dir != FORWARD && c != NUL)
+	    if (dir != FORWARD && c != NUL && curwin->w_cursor.coladd > 0)
 		++curwin->w_cursor.col;
 	    if (c == TAB)
 	    {
--- a/src/testdir/test_registers.vim
+++ b/src/testdir/test_registers.vim
@@ -659,4 +659,22 @@ func Test_clipboard_nul()
   bwipe!
 endfunc
 
+func Test_ve_blockpaste()
+  new
+  set ve=all
+  0put =['QWERTZ','ASDFGH']
+  call cursor(1,1)
+  exe ":norm! \<C-V>3ljdP"
+  call assert_equal(1, col('.'))
+  call assert_equal(getline(1, 2), ['QWERTZ', 'ASDFGH'])
+  call cursor(1,1)
+  exe ":norm! \<C-V>3ljd"
+  call cursor(1,1)
+  norm! $3lP
+  call assert_equal(5, col('.'))
+  call assert_equal(getline(1, 2), ['TZ  QWER', 'GH  ASDF'])
+  set ve&vim
+  bwipe!
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1170,
+/**/
     1169,
 /**/
     1168,