changeset 12279:57e0b701611e v8.0.1019

patch 8.0.1019: pasting in virtual edit happens in the wrong place commit https://github.com/vim/vim/commit/d41babef89a50cdf165f15bc1834c0a4e89ffff8 Author: Bram Moolenaar <Bram@vim.org> 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)
author Christian Brabandt <cb@256bit.org>
date Wed, 30 Aug 2017 17:15:05 +0200
parents 39fd92e26708
children b593a0cc6793
files src/misc2.c src/testdir/test_virtualedit.vim src/version.c
diffstat 3 files changed, 20 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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;
--- 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\<C-O>:normal! \"agP\r"
+  call assert_equal('123456', getline(2))
+
+  bwipe!
+  set virtualedit=
+endfunc
--- 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,