forked from aniani/vim
patch 8.0.0225: put in Visual block mode terminates early
Problem: When a block is visually selected and put is used on the end of the selection only one line is changed. Solution: Check for the end properly. (Christian Brabandt, neovim issue 5781)
This commit is contained in:
@@ -3774,6 +3774,11 @@ do_put(
|
|||||||
*/
|
*/
|
||||||
if (y_type == MCHAR && y_size == 1)
|
if (y_type == MCHAR && y_size == 1)
|
||||||
{
|
{
|
||||||
|
linenr_T end = curbuf->b_visual.vi_end.lnum;
|
||||||
|
|
||||||
|
if (curbuf->b_visual.vi_end.lnum < curbuf->b_visual.vi_start.lnum)
|
||||||
|
end = curbuf->b_visual.vi_start.lnum;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
totlen = count * yanklen;
|
totlen = count * yanklen;
|
||||||
if (totlen > 0)
|
if (totlen > 0)
|
||||||
@@ -3801,7 +3806,7 @@ do_put(
|
|||||||
}
|
}
|
||||||
if (VIsual_active)
|
if (VIsual_active)
|
||||||
lnum++;
|
lnum++;
|
||||||
} while (VIsual_active && lnum <= curbuf->b_visual.vi_end.lnum);
|
} while (VIsual_active && lnum <= end);
|
||||||
|
|
||||||
if (VIsual_active) /* reset lnum to the last visual line */
|
if (VIsual_active) /* reset lnum to the last visual line */
|
||||||
lnum--;
|
lnum--;
|
||||||
|
@@ -10,3 +10,14 @@ func Test_put_block()
|
|||||||
call assert_equal("\u2500x", getline(1))
|
call assert_equal("\u2500x", getline(1))
|
||||||
bwipe!
|
bwipe!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_put_char_block()
|
||||||
|
new
|
||||||
|
call setline(1, ['Line 1', 'Line 2'])
|
||||||
|
f Xfile_put
|
||||||
|
" visually select both lines and put the cursor at the top of the visual
|
||||||
|
" selection and then put the buffer name over it
|
||||||
|
exe "norm! G0\<c-v>ke\"%p"
|
||||||
|
call assert_equal(['Xfile_put 1', 'Xfile_put 2'], getline(1,2))
|
||||||
|
bw!
|
||||||
|
endfunc
|
||||||
|
@@ -764,6 +764,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 */
|
||||||
|
/**/
|
||||||
|
225,
|
||||||
/**/
|
/**/
|
||||||
224,
|
224,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user