From: zeertzjq Date: Mon, 20 Apr 2026 15:43:56 +0000 (+0000) Subject: patch 9.2.0373: Ctrl-R mapping not triggered during completion X-Git-Tag: v9.2.0373^0 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=49e8630a2859e6ed497fb5702663c276f8ab6597;p=thirdparty%2Fvim.git patch 9.2.0373: Ctrl-R mapping not triggered during completion Problem: Ctrl-R mapping not triggered during completion. Solution: Move Ctrl-R check out of vim_is_ctrl_x_key() (zeertzjq). fixes: #20004 closes: #20006 Signed-off-by: zeertzjq Signed-off-by: Christian Brabandt --- diff --git a/src/insexpand.c b/src/insexpand.c index 7545e9b4ec..019557cab7 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -494,10 +494,6 @@ has_compl_option(int dict_opt) int vim_is_ctrl_x_key(int c) { - // Always allow ^R - let its results then be checked - if (c == Ctrl_R && ctrl_x_mode != CTRL_X_REGISTER) - return TRUE; - // Accept and if the popup menu is visible. if (ins_compl_pum_key(c)) return TRUE; @@ -3155,7 +3151,7 @@ ins_compl_prep(int c) else if (ctrl_x_mode_not_default()) { // We're already in CTRL-X mode, do we stay in it? - if (!vim_is_ctrl_x_key(c)) + if (c != Ctrl_R && !vim_is_ctrl_x_key(c)) { ctrl_x_mode = ctrl_x_mode_scroll() ? CTRL_X_NORMAL : CTRL_X_FINISHED; edit_submode = NULL; @@ -3183,7 +3179,7 @@ ins_compl_prep(int c) // reset continue_* if we left expansion-mode, if we stay they'll be // (re)set properly in ins_complete() - if (!vim_is_ctrl_x_key(c)) + if (c != Ctrl_R && !vim_is_ctrl_x_key(c)) { compl_cont_status = 0; compl_cont_mode = 0; diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim index a32bc45cca..ac1b5678ce 100644 --- a/src/testdir/test_ins_complete.vim +++ b/src/testdir/test_ins_complete.vim @@ -6305,4 +6305,24 @@ func Test_autocomplete_with_auto_format() call test_override("char_avail", 0) endfunc +func Test_completion_with_mapped_ctrl_r() + new + let b:n = 0 + let @a = 'AABBCCDDEE' + " Ctrl-R mapping is triggered + inoremap let b:n += 1 + inoremap call complete(col('.'), []) + call feedkeys("i\\<*C-R>abcde\", 'tx') + call assert_equal(1, b:n) + call assert_equal('abcde', getline('.')) + + " Ctrl-X Ctrl-R still works with Ctrl-R mapped + call feedkeys("ccAAB\<*C-X>\<*C-R>\<*C-Y>\", 'tx') + call assert_equal(1, b:n) + call assert_equal('AABBCCDDEE', getline('.')) + + let @a = '' + bwipe! +endfunc + " vim: shiftwidth=2 sts=2 expandtab nofoldenable diff --git a/src/version.c b/src/version.c index 54ea03e260..1328b4db38 100644 --- a/src/version.c +++ b/src/version.c @@ -734,6 +734,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 373, /**/ 372, /**/