]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.1747: completion: redo (.) broken with preinsert and autocompletion v9.1.1747
authorGirish Palya <girishji@gmail.com>
Tue, 9 Sep 2025 19:33:14 +0000 (15:33 -0400)
committerChristian Brabandt <cb@256bit.org>
Tue, 9 Sep 2025 19:33:14 +0000 (15:33 -0400)
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 <girishji@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
src/insexpand.c
src/testdir/test_ins_complete.vim
src/version.c

index 71b09313ed08723e2d1b791fb61765a5162d85d7..d797bc5d940012ee29c2f81cb5dbf35d33059afd 100644 (file)
@@ -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;
index 41b223da1cdf11f5468edec0f9c4428ec312e61a..193775d1ce2af5541bedbf9424952d2566a29f71 100644 (file)
@@ -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
index 7a08d7a98fcc16edcd2b6599afe5b342f7f0c572..44eb6d961e735932e8af69ecb5733a49a89316ac 100644 (file)
@@ -724,6 +724,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1747,
 /**/
     1746,
 /**/