mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
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)
|
||||
{
|
||||
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 {
|
||||
totlen = count * yanklen;
|
||||
if (totlen > 0)
|
||||
@@ -3801,7 +3806,7 @@ do_put(
|
||||
}
|
||||
if (VIsual_active)
|
||||
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 */
|
||||
lnum--;
|
||||
|
@@ -10,3 +10,14 @@ func Test_put_block()
|
||||
call assert_equal("\u2500x", getline(1))
|
||||
bwipe!
|
||||
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[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
225,
|
||||
/**/
|
||||
224,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user