From 306a138172c83cebf573b2ef7f56bf94d84429cb Mon Sep 17 00:00:00 2001 From: Girish Palya Date: Tue, 9 Sep 2025 15:33:14 -0400 Subject: [PATCH] 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 Signed-off-by: Christian Brabandt --- src/insexpand.c | 8 ++++---- src/testdir/test_ins_complete.vim | 7 +++++++ src/version.c | 2 ++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/insexpand.c b/src/insexpand.c index 71b09313ed..d797bc5d94 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 41b223da1c..193775d1ce 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\", 'tx') + call feedkeys($"cwch\\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 7a08d7a98f..44eb6d961e 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, /**/