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:
parent
40fa12aea3
commit
23003e51e1
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user