# HG changeset patch # User Bram Moolenaar # Date 1594405805 -7200 # Node ID 136b33ce82168b47be0bc1bc96f8bf9bd90eacdd # Parent d1413829fbc31a6070e90944a5367ee8ae2b974b 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 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) diff --git a/src/register.c b/src/register.c --- 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) { diff --git a/src/testdir/test_registers.vim b/src/testdir/test_registers.vim --- 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! \3ljdP" + call assert_equal(1, col('.')) + call assert_equal(getline(1, 2), ['QWERTZ', 'ASDFGH']) + call cursor(1,1) + exe ":norm! \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 diff --git a/src/version.c b/src/version.c --- 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,