mirror of
https://github.com/neovim/neovim.git
synced 2025-12-10 08:32:42 +00:00
vim-patch:9.1.1931: completion: wrong item selected with fuzzy and noinsert (#36725)
Problem: completion: wrong item selected with fuzzy and noinsert
(Evgeni Chasnovski)
Solution: Reset selected item after fuzzy sort
(Girish Palya)
fixes: vim/vim#18802
closes: vim/vim#18816
057ea1232a
Co-authored-by: Girish Palya <girishji@gmail.com>
This commit is contained in:
@@ -2247,16 +2247,17 @@ static void ins_compl_fuzzy_sort(void)
|
|||||||
{
|
{
|
||||||
unsigned cur_cot_flags = get_cot_flags();
|
unsigned cur_cot_flags = get_cot_flags();
|
||||||
|
|
||||||
// set the fuzzy score in cp_score
|
// Set the fuzzy score in cp_score and sort
|
||||||
set_fuzzy_score();
|
set_fuzzy_score();
|
||||||
// Sort the matches linked list based on fuzzy score
|
|
||||||
if (!(cur_cot_flags & kOptCotFlagNosort)) {
|
if (!(cur_cot_flags & kOptCotFlagNosort)) {
|
||||||
sort_compl_match_list(cp_compare_fuzzy);
|
sort_compl_match_list(cp_compare_fuzzy);
|
||||||
if ((cur_cot_flags & (kOptCotFlagNoinsert|kOptCotFlagNoselect)) == kOptCotFlagNoinsert
|
// Reset the shown item since sorting reorders items
|
||||||
&& compl_first_match) {
|
if ((cur_cot_flags & (kOptCotFlagNoinsert|kOptCotFlagNoselect)) == kOptCotFlagNoinsert) {
|
||||||
compl_shown_match = compl_first_match;
|
bool none_selected = compl_shown_match == (compl_shows_dir_forward()
|
||||||
if (compl_shows_dir_forward() && !compl_autocomplete) {
|
? compl_first_match : compl_first_match->cp_prev);
|
||||||
compl_shown_match = compl_first_match->cp_next;
|
if (!none_selected) {
|
||||||
|
compl_shown_match = (!compl_autocomplete && compl_shows_dir_forward())
|
||||||
|
? compl_first_match->cp_next : compl_first_match;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3703,6 +3703,15 @@ func Test_complete_opt_fuzzy()
|
|||||||
call feedkeys("Gof\<C-N>\<C-R>=PrintMenuWords()\<CR>\<Esc>0", 'tx')
|
call feedkeys("Gof\<C-N>\<C-R>=PrintMenuWords()\<CR>\<Esc>0", 'tx')
|
||||||
call assert_equal('f{''items'': [''func1'', ''func2'', ''xfunc'']}', getline('.'))
|
call assert_equal('f{''items'': [''func1'', ''func2'', ''xfunc'']}', getline('.'))
|
||||||
|
|
||||||
|
" Issue #18802: Reset selected item after fuzzy sort
|
||||||
|
%d
|
||||||
|
call setline(1, ['aa', 'aaa', 'aaaa'])
|
||||||
|
set completeopt=menuone,noinsert,fuzzy
|
||||||
|
call feedkeys("Goa\<C-N>\<C-Y>\<Esc>", 'tx')
|
||||||
|
call assert_equal('aa', getline('.'))
|
||||||
|
call feedkeys("Goa\<C-P>\<C-Y>\<Esc>", 'tx')
|
||||||
|
call assert_equal('aaaa', getline('.'))
|
||||||
|
|
||||||
" clean up
|
" clean up
|
||||||
set omnifunc=
|
set omnifunc=
|
||||||
bw!
|
bw!
|
||||||
|
|||||||
Reference in New Issue
Block a user