From a8f7957d0b5740983f9e48f5695fbeef0b9c76d6 Mon Sep 17 00:00:00 2001 From: Girish Palya Date: Thu, 18 Sep 2025 19:33:26 +0000 Subject: [PATCH] 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 Signed-off-by: Christian Brabandt --- src/insexpand.c | 7 ++++--- src/testdir/test_ins_complete.vim | 11 +++++++++++ src/version.c | 2 ++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/insexpand.c b/src/insexpand.c index 9b21697f5e..c97f5b2796 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 e2b45b9966..32a89836ca 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\\", 'tx') + call assert_equal('f', g:line) + call feedkeys($"SF\\", '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\", 'tx') call feedkeys($"cwch\\n.n.", 'tx') diff --git a/src/version.c b/src/version.c index b7531bd14a..7f307167c9 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, /**/