diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-11-18 11:34:37 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-11-18 11:34:37 +0100 |
commit | c77534c303721df4024fd6cfd51098d593b7d4da (patch) | |
tree | 42f3ba50ed17171562c2e7478c90c6b7eddcdd30 /src | |
parent | b3a01946b30f33e7be0358b3ff2736b94973a659 (diff) |
patch 8.2.2005: redoing a mapping with <Cmd> doesn't work properlyv8.2.2005
Problem: Redoing a mapping with <Cmd> doesn't work properly.
Solution: Fill the redo buffer. Use "<SNR>" instead of a key code.
(closes #7282)
Diffstat (limited to 'src')
-rw-r--r-- | src/getchar.c | 6 | ||||
-rw-r--r-- | src/ops.c | 7 | ||||
-rw-r--r-- | src/testdir/test_mapping.vim | 36 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 43 insertions, 8 deletions
diff --git a/src/getchar.c b/src/getchar.c index 165a6a3ad7..ad21cba7f2 100644 --- a/src/getchar.c +++ b/src/getchar.c @@ -3691,11 +3691,7 @@ getcmdkeycmd( else if (IS_SPECIAL(c1)) { if (c1 == K_SNR) - { - ga_append(&line_ga, (char)K_SPECIAL); - ga_append(&line_ga, (char)KS_EXTRA); - ga_append(&line_ga, (char)KE_SNR); - } + ga_concat(&line_ga, (char_u *)"<SNR>"); else { semsg(e_cmd_maping_must_not_include_str_key, @@ -3465,8 +3465,9 @@ do_pending_operator(cmdarg_T *cap, int old_col, int gui_yank) if ((redo_yank || oap->op_type != OP_YANK) && ((!VIsual_active || oap->motion_force) // Also redo Operator-pending Visual mode mappings - || (VIsual_active && cap->cmdchar == ':' - && oap->op_type != OP_COLON)) + || (VIsual_active + && (cap->cmdchar == ':' || cap->cmdchar == K_COMMAND) + && oap->op_type != OP_COLON)) && cap->cmdchar != 'D' #ifdef FEAT_FOLDING && oap->op_type != OP_FOLD @@ -3688,7 +3689,7 @@ do_pending_operator(cmdarg_T *cap, int old_col, int gui_yank) get_op_char(oap->op_type), get_extra_op_char(oap->op_type), oap->motion_force, cap->cmdchar, cap->nchar); - else if (cap->cmdchar != ':') + else if (cap->cmdchar != ':' && cap->cmdchar != K_COMMAND) { int nchar = oap->op_type == OP_REPLACE ? cap->nchar : NUL; diff --git a/src/testdir/test_mapping.vim b/src/testdir/test_mapping.vim index dbd0a7e320..66edaa80a6 100644 --- a/src/testdir/test_mapping.vim +++ b/src/testdir/test_mapping.vim @@ -1324,4 +1324,40 @@ func Test_map_cmdkey_cmdline_mode() %bw! endfunc +func Test_map_cmdkey_redo() + func SelectDash() + call search('^---\n\zs', 'bcW') + norm! V + call search('\n\ze---$', 'W') + endfunc + + let text =<< trim END + --- + aaa + --- + bbb + bbb + --- + ccc + ccc + ccc + --- + END + new Xcmdtext + call setline(1, text) + + onoremap <silent> i- <Cmd>call SelectDash()<CR> + call feedkeys('2Gdi-', 'xt') + call assert_equal(['---', '---'], getline(1, 2)) + call feedkeys('j.', 'xt') + call assert_equal(['---', '---', '---'], getline(1, 3)) + call feedkeys('j.', 'xt') + call assert_equal(['---', '---', '---', '---'], getline(1, 4)) + + bwipe! + call delete('Xcmdtext') + delfunc SelectDash + ounmap i- +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index dafd15bf94..2191c34060 100644 --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2005, +/**/ 2004, /**/ 2003, |