vim-patch:9.0.0011: reading beyond the end of the line with put command (#19166)

Problem:    Reading beyond the end of the line with put command.
Solution:   Adjust the end mark position.
d25f003342
This commit is contained in:
zeertzjq 2022-06-30 20:16:00 +08:00 committed by GitHub
parent 37af46bb4c
commit 69cd0ba27b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 3 deletions

View File

@ -3344,7 +3344,6 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
totlen = (size_t)(count * (yanklen + spaces)
+ bd.startspaces + bd.endspaces);
int addcount = (int)totlen + lines_appended;
newp = (char_u *)xmalloc(totlen + oldlen + 1);
// copy part up to cursor to new line
@ -3366,7 +3365,7 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
memset(ptr, ' ', (size_t)spaces);
ptr += spaces;
} else {
addcount -= spaces;
totlen -= (size_t)spaces; // didn't use these spaces
}
}
@ -3380,7 +3379,7 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
memmove(ptr, oldp + bd.textcol + delcount, (size_t)columns);
ml_replace(curwin->w_cursor.lnum, (char *)newp, false);
extmark_splice_cols(curbuf, (int)curwin->w_cursor.lnum - 1, bd.textcol,
delcount, addcount, kExtmarkUndo);
delcount, (int)totlen + lines_appended, kExtmarkUndo);
++curwin->w_cursor.lnum;
if (i == 0) {

View File

@ -213,5 +213,17 @@ func Test_put_empty_register()
bwipe!
endfunc
" this was putting the end mark after the end of the line
func Test_put_visual_mode()
edit! SomeNewBuffer
set selection=exclusive
exe "norm o\t"
m0
sil! norm  p p
bwipe!
set selection&
endfunc
" vim: shiftwidth=2 sts=2 expandtab