patch 9.1.1769: completion: "preinsert" insert wrong word with 'smartcase' and 'autocomplete'
Commit:
https://github.com/vim/vim/commit/a8f7957d0b5740983f9e48f5695fbeef0b9c76d6
Author: Girish Palya <
giri...@gmail.com>
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 <
giri...@gmail.com>
Signed-off-by: Christian Brabandt <
c...@256bit.org>
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,
/**/