Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 0124320

Browse files
zeertzjqchrisbra
authored andcommitted
patch 9.1.1868: v:register is wrong in v_: command
Problem: v:register is wrong in v_: command (after 9.1.1858). Solution: Don't reset v:register for OP_COLON (zeertzjq) related: vim/vim#18583 (comment) closes: #18597 Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
1 parent 5932ed3 commit 0124320

File tree

3 files changed

+42
-5
lines changed

3 files changed

+42
-5
lines changed

‎src/normal.c‎

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -695,6 +695,9 @@ normal_cmd(
695695
int idx;
696696
int set_prevcount = FALSE;
697697
int save_did_cursorhold = did_cursorhold;
698+
#ifdef FEAT_EVAL
699+
int did_visual_op = FALSE;
700+
#endif
698701

699702
CLEAR_FIELD(ca); // also resets ca.retval
700703
ca.oap = oap;
@@ -968,14 +971,18 @@ normal_cmd(
968971
if (old_mapped_len > 0)
969972
old_mapped_len = typebuf_maplen();
970973

971-
#ifdef FEAT_EVAL
972-
int prev_VIsual_active = VIsual_active;
973-
#endif
974-
975974
// If an operation is pending, handle it. But not for K_IGNORE or
976975
// K_MOUSEMOVE.
977976
if (ca.cmdchar != K_IGNORE && ca.cmdchar != K_MOUSEMOVE)
977+
{
978+
#ifdef FEAT_EVAL
979+
did_visual_op = VIsual_active && oap->op_type != OP_NOP
980+
// For OP_COLON, do_pending_operator() stuffs ':' into
981+
// the read buffer, which isn't executed immediately.
982+
&& oap->op_type != OP_COLON;
983+
#endif
978984
do_pending_operator(&ca, old_col, FALSE);
985+
}
979986

980987
// Wait for a moment when a message is displayed that will be overwritten
981988
// by the mode message.
@@ -988,7 +995,7 @@ normal_cmd(
988995
msg_nowait = FALSE;
989996

990997
#ifdef FEAT_EVAL
991-
if (finish_op || prev_VIsual_active)
998+
if (finish_op || did_visual_op)
992999
reset_reg_var();
9931000
#endif
9941001

‎src/testdir/test_registers.vim‎

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -692,7 +692,9 @@ func Test_v_register()
692692
exec 'normal! "' .. v:register .. 'P'
693693
endfunc
694694
nnoremap <buffer> <plug>(test) :<c-u>call s:Put()<cr>
695+
xnoremap <buffer> <plug>(test) :<c-u>call s:Put()<cr>
695696
nmap <buffer> S <plug>(test)
697+
xmap <buffer> S <plug>(test)
696698
697699
let @z = "testz\n"
698700
let @" = "test@\n"
@@ -710,15 +712,41 @@ func Test_v_register()
710712
let s:register = ''
711713
call feedkeys('"zS', 'mx')
712714
call assert_equal('z', s:register)
715+
call assert_equal('testz', getline('.'))
713716

714717
let s:register = ''
715718
call feedkeys('"zSS', 'mx')
716719
call assert_equal('"', s:register)
720+
call assert_equal('test@', getline('.'))
721+
722+
let s:register = ''
723+
call feedkeys("\"z\<Ignore>S", 'mx')
724+
call assert_equal('z', s:register)
725+
call assert_equal('testz', getline('.'))
717726

718727
let s:register = ''
719728
call feedkeys('"_S', 'mx')
720729
call assert_equal('_', s:register)
721730

731+
let s:register = ''
732+
call feedkeys('V"zS', 'mx')
733+
call assert_equal('z', s:register)
734+
call assert_equal('testz', getline('.'))
735+
736+
let s:register = ''
737+
call feedkeys('V"zSS', 'mx')
738+
call assert_equal('"', s:register)
739+
call assert_equal('test@', getline('.'))
740+
741+
let s:register = ''
742+
call feedkeys("V\"z\<Ignore>S", 'mx')
743+
call assert_equal('z', s:register)
744+
call assert_equal('testz', getline('.'))
745+
746+
let s:register = ''
747+
call feedkeys('V"_S', 'mx')
748+
call assert_equal('_', s:register)
749+
722750
let s:register = ''
723751
normal "_ddS
724752
call assert_equal('"', s:register) " fails before 8.2.0929

‎src/version.c‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -734,6 +734,8 @@ static char *(features[]) =
734734

735735
static int included_patches[] =
736736
{ /* Add new patch number below this line */
737+
/**/
738+
1868,
737739
/**/
738740
1867,
739741
/**/

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /