patch 9.1.1315: completion: issue with fuzzy completion and 
'completefuzzycollect'

Commit: 
https://github.com/vim/vim/commit/cfe502c5753cce2080ddabdfdcacb8e4b3092721
Author: glepnir <glephun...@gmail.com>
Date:   Thu Apr 17 20:17:53 2025 +0200

    patch 9.1.1315: completion: issue with fuzzy completion and 
'completefuzzycollect'
    
    Problem:  chain complete does not work when 'cot' includes fuzzy
              and 'completefuzzycollect' collects wrong next word.
              (Konfekt)
    Solution: compl_startpos is not set correctly, remove next word check
              in search_for_fuzzy_match (glepnir).
    
    fixes #17131
    fixes #16942
    closes: #17136
    
    Signed-off-by: glepnir <glephun...@gmail.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/src/insexpand.c b/src/insexpand.c
index 8673e7455..233586277 100644
--- a/src/insexpand.c
+++ b/src/insexpand.c
@@ -6101,7 +6101,6 @@ ins_compl_start(void)
     if (line_invalid)
        line = ml_get(curwin->w_cursor.lnum);
 
-    int in_fuzzy = get_cot_flags() & COT_FUZZY;
     if (compl_status_adding())
     {
        edit_submode_pre = (char_u *)_(" Adding");
@@ -6119,7 +6118,7 @@ ins_compl_start(void)
            compl_col = curwin->w_cursor.col;
            compl_lnum = curwin->w_cursor.lnum;
        }
-       else if (ctrl_x_mode_normal() && in_fuzzy)
+       else if (ctrl_x_mode_normal() && cfc_has_mode())
        {
            compl_startpos = curwin->w_cursor;
            compl_cont_status &= CONT_S_IPOS;
diff --git a/src/search.c b/src/search.c
index abd74416d..68b2e727b 100644
--- a/src/search.c
+++ b/src/search.c
@@ -5370,30 +5370,6 @@ search_for_fuzzy_match(
                                                    len, &current_pos, score);
                    if (found_new_match)
                    {
-                       if (ctrl_x_mode_normal())
-                       {
-                           if (STRNCMP(*ptr, pattern, *len) == 0 && 
pattern[*len] == NUL)
-                           {
-                               char_u  *next_word_end = find_word_start(*ptr + 
*len);
-                               if (*next_word_end != NUL && *next_word_end != 
NL)
-                               {
-                                   // Find end of the word.
-                                   if (has_mbyte)
-                                       while (*next_word_end != NUL)
-                                       {
-                                           int l = 
(*mb_ptr2len)(next_word_end);
-
-                                           if (l < 2 && 
!vim_iswordc(*next_word_end))
-                                               break;
-                                           next_word_end += l;
-                                       }
-                                   else
-                                      next_word_end = 
find_word_end(next_word_end);
-                               }
-
-                               *len = next_word_end - *ptr;
-                           }
-                       }
                        *pos = current_pos;
                        break;
                    }
diff --git a/src/testdir/test_ins_complete.vim 
b/src/testdir/test_ins_complete.vim
index 2b14bfa76..916ad19fb 100644
--- a/src/testdir/test_ins_complete.vim
+++ b/src/testdir/test_ins_complete.vim
@@ -3480,6 +3480,14 @@ func Test_complete_opt_fuzzy()
   call feedkeys("Sb\<C-X>\<C-P>\<C-N>\<C-Y>\<ESC>", 'tx')
   call assert_equal('b', getline('.'))
 
+  " chain completion
+  call feedkeys("Slore spum\<CR>lor\<C-X>\<C-P>\<C-X>\<C-P>\<ESC>", 'tx')
+  call assert_equal('lore spum', getline('.'))
+
+  " issue #15412
+  call feedkeys("Salpha bravio 
charlie\<CR>alpha\<C-X>\<C-N>\<C-X>\<C-N>\<C-X>\<C-N>\<ESC>", 'tx')
+  call assert_equal('alpha bravio charlie', getline('.'))
+
   " clean up
   set omnifunc=
   bw!
@@ -3565,34 +3573,6 @@ func Test_complete_fuzzy_collect()
   call feedkeys("Su\<C-X>\<C-L>\<C-P>\<Esc>0", 'tx!')
   call assert_equal('no one can save me but you', getline('.'))
 
-  " issue #15412
-  call setline(1, ['alpha bravio charlie'])
-  call feedkeys("Salpha\<C-X>\<C-N>\<Esc>0", 'tx!')
-  call assert_equal('alpha bravio', getline('.'))
-  call feedkeys("Salp\<C-X>\<C-N>\<Esc>0", 'tx!')
-  call assert_equal('alpha', getline('.'))
-  call feedkeys("A\<C-X>\<C-N>\<Esc>0", 'tx!')
-  call assert_equal('alpha bravio', getline('.'))
-  call feedkeys("A\<C-X>\<C-N>\<Esc>0", 'tx!')
-  call assert_equal('alpha bravio charlie', getline('.'))
-
-  set complete-=i
-  call feedkeys("Salp\<C-X>\<C-N>\<Esc>0", 'tx!')
-  call assert_equal('alpha', getline('.'))
-  call feedkeys("A\<C-X>\<C-N>\<Esc>0", 'tx!')
-  call assert_equal('alpha bravio', getline('.'))
-  call feedkeys("A\<C-X>\<C-N>\<Esc>0", 'tx!')
-  call assert_equal('alpha bravio charlie', getline('.'))
-
-  call setline(1, ['alpha bravio charlie', 'alpha another'])
-  call feedkeys("Salpha\<C-X>\<C-N>\<C-N>\<Esc>0", 'tx!')
-  call assert_equal('alpha another', getline('.'))
-  call setline(1, ['你好 我好', '你好 他好'])
-  call feedkeys("S你好\<C-X>\<C-N>\<Esc>0", 'tx!')
-  call assert_equal('你好 我好', getline('.'))
-  call feedkeys("S你好\<C-X>\<C-N>\<C-N>\<Esc>0", 'tx!')
-  call assert_equal('你好 他好', getline('.'))
-
   " issue #15526
   set completeopt=menuone,menu,noselect
   call setline(1, ['Text', 'ToText', ''])
@@ -3618,6 +3598,11 @@ func Test_complete_fuzzy_collect()
   call feedkeys("Gofuzzy\<C-X>\<C-N>\<C-N>\<C-N>\<C-Y>\<Esc>0", 'tx!')
   call assert_equal('completefuzzycollect', getline('.'))
 
+  execute('%d _')
+  call setline(1, ['fuzzy', 'fuzzy foo', "fuzzy bar", 'fuzzycollect'])
+  call feedkeys("Gofuzzy\<C-X>\<C-N>\<C-N>\<C-N>\<C-Y>\<Esc>0", 'tx!')
+  call assert_equal('fuzzycollect', getline('.'))
+
   bw!
   bw!
   set dict&
diff --git a/src/version.c b/src/version.c
index 5ced0fefd..9a1926004 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1315,
 /**/
     1314,
 /**/

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/vim_dev/E1u5Tzv-008xgT-C5%40256bit.org.

Raspunde prin e-mail lui