vim-patch:8.0.0724: the message for yanking doesn't indicate the register

Problem:    The message for yanking doesn't indicate the register.
Solution:   Show the register name in the "N lines yanked" message. (Lemonboy,
            closes vim/vim#1803, closes vim/vim#1809)
e45deb7997
This commit is contained in:
Jan Edmund Lazo
2018-07-17 08:37:41 -04:00
parent cd6e7e8cf3
commit eab17e5093
3 changed files with 41 additions and 5 deletions

View File

@@ -2509,19 +2509,27 @@ static void op_yank_reg(oparg_T *oap, bool message, yankreg_T *reg, bool append)
} }
// Some versions of Vi use ">=" here, some don't... // Some versions of Vi use ">=" here, some don't...
if (yanklines > (size_t)p_report) { if (yanklines > (size_t)p_report) {
char namebuf[100];
if (oap->regname == NUL) {
*namebuf = NUL;
} else {
vim_snprintf(namebuf, sizeof(namebuf), " into \"%c", oap->regname);
}
// redisplay now, so message is not deleted // redisplay now, so message is not deleted
update_topline_redraw(); update_topline_redraw();
if (yanklines == 1) { if (yanklines == 1) {
if (yank_type == kMTBlockWise) { if (yank_type == kMTBlockWise) {
MSG(_("block of 1 line yanked")); smsg(_("block of 1 line yanked%s"), namebuf);
} else { } else {
MSG(_("1 line yanked")); smsg(_("1 line yanked%s"), namebuf);
} }
} else if (yank_type == kMTBlockWise) { } else if (yank_type == kMTBlockWise) {
smsg(_("block of %" PRId64 " lines yanked"), smsg(_("block of %" PRId64 " lines yanked%s"),
(int64_t)yanklines); (int64_t)yanklines, namebuf);
} else { } else {
smsg(_("%" PRId64 " lines yanked"), (int64_t)yanklines); smsg(_("%" PRId64 " lines yanked%s"), (int64_t)yanklines, namebuf);
} }
} }
} }

View File

@@ -93,6 +93,7 @@ NEW_TESTS ?= \
test_quickfix.res \ test_quickfix.res \
test_quotestar.res \ test_quotestar.res \
test_recover.res \ test_recover.res \
test_registers.res \
test_retab.res \ test_retab.res \
test_scrollbind.res \ test_scrollbind.res \
test_search.res \ test_search.res \

View File

@@ -0,0 +1,27 @@
func Test_yank_shows_register()
enew
set report=0
call setline(1, ['foo', 'bar'])
" Line-wise
exe 'norm! yy'
call assert_equal('1 line yanked', v:statusmsg)
exe 'norm! "zyy'
call assert_equal('1 line yanked into "z', v:statusmsg)
exe 'norm! yj'
call assert_equal('2 lines yanked', v:statusmsg)
exe 'norm! "zyj'
call assert_equal('2 lines yanked into "z', v:statusmsg)
" Block-wise
exe "norm! \<C-V>y"
call assert_equal('block of 1 line yanked', v:statusmsg)
exe "norm! \<C-V>\"zy"
call assert_equal('block of 1 line yanked into "z', v:statusmsg)
exe "norm! \<C-V>jy"
call assert_equal('block of 2 lines yanked', v:statusmsg)
exe "norm! \<C-V>j\"zy"
call assert_equal('block of 2 lines yanked into "z', v:statusmsg)
bwipe!
endfunc