# HG changeset patch # User Christian Brabandt # Date 1504106105 -7200 # Node ID 57e0b701611e24ab487bbf55a0426464df8517b1 # Parent 39fd92e26708aa396c54ca2a4e6863f38b985cf2 patch 8.0.1019: pasting in virtual edit happens in the wrong place commit https://github.com/vim/vim/commit/d41babef89a50cdf165f15bc1834c0a4e89ffff8 Author: Bram Moolenaar Date: Wed Aug 30 17:01:35 2017 +0200 patch 8.0.1019: pasting in virtual edit happens in the wrong place Problem: Pasting in virtual edit happens in the wrong place. Solution: Do not adjust coladd when after the end of the line (closes https://github.com/vim/vim/issues/2015) diff --git a/src/misc2.c b/src/misc2.c --- a/src/misc2.c +++ b/src/misc2.c @@ -607,11 +607,14 @@ check_cursor_col_win(win_T *win) if (oldcoladd > win->w_cursor.col) { win->w_cursor.coladd = oldcoladd - win->w_cursor.col; - if (win->w_cursor.col < len && win->w_cursor.coladd > 0) + + /* Make sure that coladd is not more than the char width. + * Not for the last character, coladd is then used when the cursor + * is actually after the last character. */ + if (win->w_cursor.col + 1 < len && win->w_cursor.coladd > 0) { int cs, ce; - /* check that coladd is not more than the char width */ getvcol(win, &win->w_cursor, &cs, NULL, &ce); if (win->w_cursor.coladd > ce - cs) win->w_cursor.coladd = ce - cs; diff --git a/src/testdir/test_virtualedit.vim b/src/testdir/test_virtualedit.vim --- a/src/testdir/test_virtualedit.vim +++ b/src/testdir/test_virtualedit.vim @@ -1,7 +1,7 @@ " Tests for 'virtualedit'. func Test_yank_move_change() - split + new call setline(1, [ \ "func foo() error {", \ "\tif n, err := bar();", @@ -29,3 +29,15 @@ func Test_yank_move_change() set virtualedit= set ts=8 endfunc + +func Test_paste_end_of_line() + new + set virtualedit=all + call setline(1, ['456', '123']) + normal! gg0"ay$ + exe "normal! 2G$lllA\:normal! \"agP\r" + call assert_equal('123456', getline(2)) + + bwipe! + set virtualedit= +endfunc diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -770,6 +770,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1019, +/**/ 1018, /**/ 1017,