summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-06-28 21:54:27 +0200
committerBram Moolenaar <Bram@vim.org>2021-06-28 21:54:27 +0200
commit7d7bcc6ba01454c1cbb1dcbf5f11c3a4051535d6 (patch)
treeb06193f3c932181a7f6c50c86c1c1f603e288f9e
parent127950241e84c822d3c50f46a00d42a70d2d5cb6 (diff)
patch 8.2.3072: "zy" does not work well when "virtualedit' is "block"v8.2.3072
Problem: The "zy" command does not work well when 'virtualedit' is set to "block". (Johann Höchtl) Solution: Make endspaces zero. (Christian Brabandt, closes #8468, closes #8448)
-rw-r--r--src/register.c4
-rw-r--r--src/testdir/test_visual.vim20
-rw-r--r--src/version.c2
3 files changed, 25 insertions, 1 deletions
diff --git a/src/register.c b/src/register.c
index 4774e2a995..93ee7aad97 100644
--- a/src/register.c
+++ b/src/register.c
@@ -1455,6 +1455,8 @@ yank_copy_line(struct block_def *bd, long y_idx, int exclude_trailing_space)
{
char_u *pnew;
+ if (exclude_trailing_space)
+ bd->endspaces = 0;
if ((pnew = alloc(bd->startspaces + bd->endspaces + bd->textlen + 1))
== NULL)
return FAIL;
@@ -2747,7 +2749,7 @@ write_reg_contents_lst(
&yank_type) == FAIL)
return;
- str_to_reg(y_current, yank_type, (char_u *) strings, -1, block_len, TRUE);
+ str_to_reg(y_current, yank_type, (char_u *)strings, -1, block_len, TRUE);
finish_write_reg(name, old_y_previous, old_y_current);
}
diff --git a/src/testdir/test_visual.vim b/src/testdir/test_visual.vim
index fb26750829..fbd3ca4fcd 100644
--- a/src/testdir/test_visual.vim
+++ b/src/testdir/test_visual.vim
@@ -1,6 +1,7 @@
" Tests for various Visual modes.
source shared.vim
+source check.vim
func Test_block_shift_multibyte()
" Uses double-wide character.
@@ -1225,5 +1226,24 @@ func Test_visual_put_in_block_using_zy_and_zp()
bwipe!
endfunc
+func Test_visual_put_blockedit_zy_and_zp()
+ new
+
+ call setline(1, ['aa', 'bbbbb', 'ccc', '', 'XX', 'GGHHJ', 'RTZU'])
+ exe "normal! gg0\<c-v>2j$zy"
+ norm! 5gg0zP
+ call assert_equal(['aa', 'bbbbb', 'ccc', '', 'aaXX', 'bbbbbGGHHJ', 'cccRTZU'], getline(1, 7))
+ "
+ " now with blockmode editing
+ sil %d
+ :set ve=block
+ call setline(1, ['aa', 'bbbbb', 'ccc', '', 'XX', 'GGHHJ', 'RTZU'])
+ exe "normal! gg0\<c-v>2j$zy"
+ norm! 5gg0zP
+ call assert_equal(['aa', 'bbbbb', 'ccc', '', 'aaXX', 'bbbbbGGHHJ', 'cccRTZU'], getline(1, 7))
+ set ve&vim
+ bw!
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index dd74d2dbee..f33d7dd6be 100644
--- a/src/version.c
+++ b/src/version.c
@@ -756,6 +756,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3072,
+/**/
3071,
/**/
3070,