vim-patch:9.1.1769: completion: "preinsert" insert wrong word with 'smartcase' and 'autocomplete' (#35834)

Problem:  completion: "preinsert" insert wrong word with 'smartcase' and
          'autocomplete'
Solution: Add compare completed item with the leader (Girish Palya)

closes: vim/vim#18313

a8f7957d0b

Co-authored-by: Girish Palya <girishji@gmail.com>
This commit is contained in:
zeertzjq
2025-09-19 10:47:27 +08:00
committed by GitHub
parent b443a3cb33
commit 95267b664c
2 changed files with 15 additions and 3 deletions

View File

@@ -5069,10 +5069,11 @@ static char *find_common_prefix(size_t *prefix_len, bool 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.data,
ins_compl_leader_len()) == 0) {
first = compl->cp_str.data;
len = (int)strlen(first);
} else {
} else if (first != NULL) {
int j = 0; // count in bytes
char *s1 = first;
char *s2 = compl->cp_str.data;
@@ -5100,7 +5101,7 @@ static char *find_common_prefix(size_t *prefix_len, bool curbuf_only)
xfree(match_count);
if (len > get_compl_len()) {
if (len > (int)ins_compl_leader_len()) {
*prefix_len = (size_t)len;
return first;
}

View File

@@ -5771,7 +5771,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')