]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.1769: completion: "preinsert" insert wrong word with 'smartcase' and 'autoc... v9.1.1769
authorGirish Palya <girishji@gmail.com>
Thu, 18 Sep 2025 19:33:26 +0000 (19:33 +0000)
committerChristian Brabandt <cb@256bit.org>
Thu, 18 Sep 2025 19:33:26 +0000 (19:33 +0000)
Problem:  completion: "preinsert" insert wrong word with 'smartcase' and
          'autocomplete'
Solution: Add compare completed item with the leader (Girish Palya)

closes: #18313

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 9b21697f5e579e60541a0b71824abbbfc6da5a76..c97f5b279689cb5ab52109d27f8880fdec7346be 100644 (file)
@@ -5861,12 +5861,13 @@ find_common_prefix(size_t *prefix_len, int curbuf_only)
            if (!match_limit_exceeded && (!curbuf_only
                        || cpt_sources_array[cur_source].cs_flag == '.'))
            {
-               if (first == NULL)
+               if (first == NULL && STRNCMP(ins_compl_leader(),
+                           compl->cp_str.string, ins_compl_leader_len()) == 0)
                {
                    first = compl->cp_str.string;
                    len = (int)STRLEN(first);
                }
-               else
+               else if (first != NULL)
                {
                    int j = 0;  // count in bytes
                    char_u *s1 = first;
@@ -5894,7 +5895,7 @@ find_common_prefix(size_t *prefix_len, int curbuf_only)
 
     vim_free(match_count);
 
-    if (len > get_compl_len())
+    if (len > (int)ins_compl_leader_len())
     {
        *prefix_len = (size_t)len;
        return first;
index e2b45b99669c3a246bd29a2abb261a9a3cb99f30..32a89836ca85757e86e168852823f9b5804cd4e7 100644 (file)
@@ -5651,7 +5651,18 @@ func Test_autocomplete_completeopt_preinsert()
   call DoTest("f", 'f', 2)
   set cot-=fuzzy
 
+  " leader should match prefix of inserted word
+  %delete
+  set smartcase ignorecase
+  call setline(1, ["FOO"])
+  call feedkeys($"Gof\<F5>\<Esc>", 'tx')
+  call assert_equal('f', g:line)
+  call feedkeys($"SF\<F5>\<Esc>", 'tx')
+  call assert_equal('FOO', g:line)
+  set smartcase& ignorecase&
+
   " Verify that redo (dot) works
+  %delete
   call setline(1, ["foobar", "foozbar", "foobaz", "changed", "change"])
   call feedkeys($"/foo\<CR>", 'tx')
   call feedkeys($"cwch\<C-N>\<Esc>n.n.", 'tx')
index b7531bd14abb73e5813625ff15f850ff80e83134..7f307167c96d0add06ebb1442a671e085f227e4e 100644 (file)
@@ -724,6 +724,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1769,
 /**/
     1768,
 /**/