vim-patch:9.1.1918: completion: crash with fuzzy completion (#36578)

Problem:  completion: crash with fuzzy completion
          (Christian Brabandt)
Solution: When completion candidates are gathered from a different
          window, and when completing `<c-p>`, linked list should be
          sorted only after all items are collected (Girish Palya).

fixes: vim/vim#18752
closes: vim/vim#18756

6437997d83

Co-authored-by: Girish Palya <girishji@gmail.com>
This commit is contained in:
zeertzjq
2025-11-17 09:33:04 +08:00
committed by GitHub
parent 654303079b
commit ef0c522077
2 changed files with 23 additions and 5 deletions

View File

@@ -4936,12 +4936,14 @@ static int ins_compl_get_exp(pos_T *ini)
}
may_trigger_modechanged();
if (is_nearest_active() && !ins_compl_has_preinsert()) {
sort_compl_match_list(cp_compare_nearest);
}
if (match_count > 0) {
if (is_nearest_active() && !ins_compl_has_preinsert()) {
sort_compl_match_list(cp_compare_nearest);
}
if ((get_cot_flags() & kOptCotFlagFuzzy) && ins_compl_leader_len() > 0) {
ins_compl_fuzzy_sort();
if ((get_cot_flags() & kOptCotFlagFuzzy) && ins_compl_leader_len() > 0) {
ins_compl_fuzzy_sort();
}
}
return match_count;

View File

@@ -3816,6 +3816,22 @@ func Test_complete_fuzzy_collect()
set completeopt& cfc& cpt&
endfunc
" Issue #18752
func Test_complete_fuzzy_collect_multiwin()
new
set completefuzzycollect=keyword,files,whole_line
set completeopt=fuzzy
vnew
call setline(1, ["completeness,", "compatibility", "Composite", "Omnipotent"])
wincmd p
call feedkeys("Somp\<C-P>\<Esc>0", 'tx!')
call assert_equal('Omnipotent', getline('.'))
bw!
set completeopt& cfc&
endfunc
func Test_cfc_with_longest()
new
set completefuzzycollect=keyword,files,whole_line