0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.2.3454: using a count with "gp" leave cursor in wrong position

Problem:    Using a count with "gp" leave cursor in wrong position. (Naohiro
            Ono)
Solution:   Count the inserted lines. (closes #8899)
This commit is contained in:
Bram Moolenaar 2021-09-22 16:37:07 +02:00
parent 40fa12aea3
commit 23003e51e1
3 changed files with 23 additions and 3 deletions

View File

@ -2065,6 +2065,8 @@ do_put(
} }
else else
{ {
linenr_T new_lnum = new_cursor.lnum;
// Insert at least one line. When y_type is MCHAR, break the first // Insert at least one line. When y_type is MCHAR, break the first
// line in two. // line in two.
for (cnt = 1; cnt <= count; ++cnt) for (cnt = 1; cnt <= count; ++cnt)
@ -2085,6 +2087,7 @@ do_put(
STRCAT(newp, ptr); STRCAT(newp, ptr);
// insert second line // insert second line
ml_append(lnum, newp, (colnr_T)0, FALSE); ml_append(lnum, newp, (colnr_T)0, FALSE);
++new_lnum;
vim_free(newp); vim_free(newp);
oldp = ml_get(lnum); oldp = ml_get(lnum);
@ -2103,10 +2106,13 @@ do_put(
for (; i < y_size; ++i) for (; i < y_size; ++i)
{ {
if ((y_type != MCHAR || i < y_size - 1) if (y_type != MCHAR || i < y_size - 1)
&& ml_append(lnum, y_array[i], (colnr_T)0, FALSE) {
if (ml_append(lnum, y_array[i], (colnr_T)0, FALSE)
== FAIL) == FAIL)
goto error; goto error;
new_lnum++;
}
lnum++; lnum++;
++nr_lines; ++nr_lines;
if (flags & PUT_FIXINDENT) if (flags & PUT_FIXINDENT)
@ -2138,6 +2144,8 @@ do_put(
lendiff -= (int)STRLEN(ml_get(lnum)); lendiff -= (int)STRLEN(ml_get(lnum));
} }
} }
if (cnt == 1)
new_lnum = lnum;
} }
error: error:
@ -2195,7 +2203,7 @@ error:
} }
else else
{ {
curwin->w_cursor.lnum = lnum; curwin->w_cursor.lnum = new_lnum;
curwin->w_cursor.col = col; curwin->w_cursor.col = col;
} }
} }

View File

@ -122,4 +122,14 @@ func Test_put_visual_delete_all_lines()
close! close!
endfunc endfunc
func Test_gp_with_count_leaves_cursor_at_end()
new
call setline(1, '<---->')
call setreg('@', "foo\nbar", 'c')
exe "normal 1G3|3gpix\<Esc>"
call assert_equal(['<--foo', 'barfoo', 'barfoo', 'barx-->'], getline(1, '$'))
bwipe!
endfunc
" vim: shiftwidth=2 sts=2 expandtab " vim: shiftwidth=2 sts=2 expandtab

View File

@ -757,6 +757,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
3454,
/**/ /**/
3453, 3453,
/**/ /**/