patch 9.1.1769: completion: "preinsert" insert wrong word with 'smartcase' and 
'autocomplete'

Commit: 
https://github.com/vim/vim/commit/a8f7957d0b5740983f9e48f5695fbeef0b9c76d6
Author: Girish Palya <[email protected]>
Date:   Thu Sep 18 19:33:26 2025 +0000

    patch 9.1.1769: completion: "preinsert" insert wrong word with 'smartcase' 
and 'autocomplete'
    
    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 <[email protected]>
    Signed-off-by: Christian Brabandt <[email protected]>

diff --git a/src/insexpand.c b/src/insexpand.c
index 9b21697f5..c97f5b279 100644
--- a/src/insexpand.c
+++ b/src/insexpand.c
@@ -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;
diff --git a/src/testdir/test_ins_complete.vim 
b/src/testdir/test_ins_complete.vim
index e2b45b996..32a89836c 100644
--- a/src/testdir/test_ins_complete.vim
+++ b/src/testdir/test_ins_complete.vim
@@ -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')
diff --git a/src/version.c b/src/version.c
index b7531bd14..7f307167c 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 */
+/**/
+    1769,
 /**/
     1768,
 /**/

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/vim_dev/E1uzKYz-00ElUQ-DZ%40256bit.org.

Raspunde prin e-mail lui