diff --git a/src/nvim/insexpand.c b/src/nvim/insexpand.c index 8a14005028..ad00d12b3c 100644 --- a/src/nvim/insexpand.c +++ b/src/nvim/insexpand.c @@ -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; } diff --git a/test/old/testdir/test_ins_complete.vim b/test/old/testdir/test_ins_complete.vim index c0fa3ac260..12ccf00a7d 100644 --- a/test/old/testdir/test_ins_complete.vim +++ b/test/old/testdir/test_ins_complete.vim @@ -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\\", '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')