patch 9.1.0733: keyword completion does not work with fuzzy
Commit:
https://github.com/vim/vim/commit/7cfe693f9bfa74690867e4d96c25f2205d0d13e4
Author: glepnir <[email protected]>
Date: Sun Sep 15 20:06:28 2024 +0200
patch 9.1.0733: keyword completion does not work with fuzzy
Problem: keyword completion does not work with fuzzy
(egesip)
Solution: handle ctrl_x_mode_normal() specifically
(glepnir)
fixes: #15412
closes: #15424
Signed-off-by: glepnir <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
diff --git a/src/insexpand.c b/src/insexpand.c
index d424fff00..63bf0700d 100644
--- a/src/insexpand.c
+++ b/src/insexpand.c
@@ -5198,6 +5198,7 @@ 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");
@@ -5214,6 +5215,11 @@ ins_compl_start(void)
compl_length = 0;
compl_col = curwin->w_cursor.col;
}
+ else if (ctrl_x_mode_normal() && in_fuzzy)
+ {
+ compl_startpos = curwin->w_cursor;
+ compl_cont_status &= CONT_S_IPOS;
+ }
}
else
{
diff --git a/src/search.c b/src/search.c
index a7fd44e68..661bcc7a5 100644
--- a/src/search.c
+++ b/src/search.c
@@ -5219,6 +5219,8 @@ search_for_fuzzy_match(
pos_T circly_end;
int found_new_match = FALSE;
int looped_around = FALSE;
+ char_u *next_word_end = NULL;
+ char_u *match_word = NULL;
if (whole_line)
current_pos.lnum += dir;
@@ -5254,6 +5256,35 @@ search_for_fuzzy_match(
found_new_match = fuzzy_match_str_in_line(ptr, pattern,
len, ¤t_pos);
if (found_new_match)
{
+ if (ctrl_x_mode_normal())
+ {
+ match_word = vim_strnsave(*ptr, *len);
+ if (STRCMP(match_word, pattern) == 0)
+ {
+ 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);
+ }
+ else if (looped_around)
+ found_new_match = FALSE;
+
+ *len = next_word_end - *ptr;
+ current_pos.col = *len;
+ }
+ vim_free(match_word);
+ }
*pos = current_pos;
break;
}
diff --git a/src/testdir/test_ins_complete.vim
b/src/testdir/test_ins_complete.vim
index aee33936f..df254847e 100644
--- a/src/testdir/test_ins_complete.vim
+++ b/src/testdir/test_ins_complete.vim
@@ -2654,10 +2654,38 @@ func Test_complete_fuzzy_match()
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=fuzzy,menuone,menu,noselect
call setline(1, ['Text', 'ToText', ''])
- call cursor(2, 1)
+ call cursor(3, 1)
call feedkeys("STe\<C-X>\<C-N>x\<CR>\<Esc>0", 'tx!')
call assert_equal('Tex', getline('.'))
diff --git a/src/version.c b/src/version.c
index 6138f5152..f5bd1433c 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 */
+/**/
+ 733,
/**/
732,
/**/
--
--
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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/E1sptm4-001B1O-71%40256bit.org.