Commit: patch 9.1.1747: completion: redo (.) broken with preinsert and autocompletion

1 view
Skip to first unread message

Christian Brabandt

unread,
Sep 9, 2025, 3:45:14 PMSep 9
to vim...@googlegroups.com
patch 9.1.1747: completion: redo (.) broken with preinsert and autocompletion

Commit: https://github.com/vim/vim/commit/306a138172c83cebf573b2ef7f56bf94d84429cb
Author: Girish Palya <giri...@gmail.com>
Date: Tue Sep 9 15:33:14 2025 -0400

patch 9.1.1747: completion: redo (.) broken with preinsert and autocompletion

Problem: completion: redo (.) broken with preinsert and autocompletion
Solution: Make redo (.) work with preinsert and autocompletion
(Girish Palya)

closes: #18253

Signed-off-by: Girish Palya <giri...@gmail.com>
Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/src/insexpand.c b/src/insexpand.c
index 71b09313e..d797bc5d9 100644
--- a/src/insexpand.c
+++ b/src/insexpand.c
@@ -154,9 +154,8 @@ static string_T compl_leader = {NULL, 0};
static int compl_get_longest = FALSE; // put longest common string
// in compl_leader

-// This flag indicates that one of the items in the match list is currently
-// selected. FALSE when no match is selected or the match was edited or using
-// the longest common string.
+// This flag is FALSE when no match is selected (by ^N/^P) or the match was
+// edited or using the longest common string.
static int compl_used_match;

// didn't finish finding completions.
@@ -5960,7 +5959,8 @@ ins_compl_insert(int move_cursor, int preinsert_prefix)
curwin->w_cursor.col -= (colnr_T)(cp_str_len - leader_len);
}
}
- if (match_at_original_text(compl_shown_match) || preinsert)
+ if (match_at_original_text(compl_shown_match)
+ || (preinsert && !compl_autocomplete))
compl_used_match = FALSE;
else
compl_used_match = TRUE;
diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim
index 41b223da1..193775d1c 100644
--- a/src/testdir/test_ins_complete.vim
+++ b/src/testdir/test_ins_complete.vim
@@ -5634,6 +5634,13 @@ func Test_autocomplete_completeopt_preinsert()
" Should not work with fuzzy
set cot+=fuzzy
call DoTest("f", 'f', 2)
+ set cot-=fuzzy
+
+ " Verify that redo (dot) works
+ call setline(1, ["foobar", "foozbar", "foobaz", "changed", "change"])
+ call feedkeys($"/foo\<CR>", 'tx')
+ call feedkeys($"cwch\<C-N>\<Esc>n.n.", 'tx')
+ call assert_equal(repeat(['changed'], 3), getline(1, 3))

%delete _
let &l:undolevels = &l:undolevels
diff --git a/src/version.c b/src/version.c
index 7a08d7a98..44eb6d961 100644
--- a/src/version.c
+++ b/src/version.c
@@ -724,6 +724,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1747,
/**/
1746,
/**/
Reply all
Reply to author
Forward
0 new messages