1
0
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:
Bram Moolenaar
2017-01-23 21:53:53 +01:00
parent 7a2699e868
commit 9957a10d0f
3 changed files with 19 additions and 1 deletions

View File

@@ -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--;

View File

@@ -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

View File

@@ -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,
/**/ /**/