0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.2.1511: putting a string in Visual block mode ignores multi-byte

Problem:    Putting a string in Visual block mode ignores multi-byte
            characters.
Solution:   Adjust the column for Visual block mode. (closes #6767)
This commit is contained in:
Bram Moolenaar 2020-08-22 21:08:44 +02:00
parent 5390099a97
commit cd94277f72
3 changed files with 36 additions and 2 deletions

View File

@ -1937,16 +1937,29 @@ do_put(
--lnum;
new_cursor = curwin->w_cursor;
// simple case: insert into current line
// simple case: insert into one line at a time
if (y_type == MCHAR && y_size == 1)
{
linenr_T end_lnum = 0; // init for gcc
linenr_T end_lnum = 0; // init for gcc
linenr_T start_lnum = lnum;
if (VIsual_active)
{
end_lnum = curbuf->b_visual.vi_end.lnum;
if (end_lnum < curbuf->b_visual.vi_start.lnum)
end_lnum = curbuf->b_visual.vi_start.lnum;
if (end_lnum > start_lnum)
{
pos_T pos;
// "col" is valid for the first line, in following lines
// the virtual column needs to be used. Matters for
// multi-byte characters.
pos.lnum = lnum;
pos.col = col;
pos.coladd = 0;
getvcol(curwin, &pos, NULL, &vcol, NULL);
}
}
do {
@ -1954,6 +1967,16 @@ do_put(
if (totlen > 0)
{
oldp = ml_get(lnum);
if (lnum > start_lnum)
{
pos_T pos;
pos.lnum = lnum;
if (getvpos(&pos, vcol) == OK)
col = pos.col;
else
col = MAXCOL;
}
if (VIsual_active && col > (int)STRLEN(oldp))
{
lnum++;

View File

@ -922,4 +922,13 @@ func Test_visual_inner_block()
close!
endfunc
func Test_visual_put_in_block()
new
call setline(1, ['xxxx', 'y∞yy', 'zzzz'])
normal 1G2yl
exe "normal 1G2l\<C-V>jjlp"
call assert_equal(['xxxx', 'y∞xx', 'zzxx'], getline(1, 3))
bwipe!
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

@ -754,6 +754,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1511,
/**/
1510,
/**/