diff options
author | Bram Moolenaar <Bram@vim.org> | 2017-01-23 21:53:53 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2017-01-23 21:53:53 +0100 |
commit | 9957a10d0f0c34d8083af6ed66e198e4796038e0 (patch) | |
tree | 88d1ea08b2bfcb86cdebe6b6be29687e682daa6d | |
parent | 7a2699e868bca781e26b060a44fc714d87cfa4ba (diff) | |
download | vim-git-8.0.0225.tar.gz |
patch 8.0.0225: put in Visual block mode terminates earlyv8.0.0225
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)
-rw-r--r-- | src/ops.c | 7 | ||||
-rw-r--r-- | src/testdir/test_put.vim | 11 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 19 insertions, 1 deletions
@@ -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--; diff --git a/src/testdir/test_put.vim b/src/testdir/test_put.vim index 612bdabb6..0154de1ec 100644 --- a/src/testdir/test_put.vim +++ b/src/testdir/test_put.vim @@ -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 diff --git a/src/version.c b/src/version.c index 86d781655..6020472e2 100644 --- a/src/version.c +++ b/src/version.c @@ -765,6 +765,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 225, +/**/ 224, /**/ 223, |