summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-08-30 17:01:35 +0200
committerBram Moolenaar <Bram@vim.org>2017-08-30 17:01:35 +0200
commitd41babef89a50cdf165f15bc1834c0a4e89ffff8 (patch)
treefe92798ce61d0cda8fa746fc9baacc9dc1663266 /src
parent4ad3b2b588f0f591dcc53096c46ec1b5e80af49f (diff)
downloadvim-d41babef89a50cdf165f15bc1834c0a4e89ffff8.zip
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 #2015)
Diffstat (limited to 'src')
-rw-r--r--src/misc2.c7
-rw-r--r--src/testdir/test_virtualedit.vim14
-rw-r--r--src/version.c2
3 files changed, 20 insertions, 3 deletions
diff --git a/src/misc2.c b/src/misc2.c
index d431a9428..9e47b24b4 100644
--- 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
index da143c518..2b8849f48 100644
--- 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
diff --git a/src/version.c b/src/version.c
index d18585d91..980f28578 100644
--- 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,