1
0
forked from aniani/vim

patch 8.2.4475: fuzzy cmdline completion does not work for lower case

Problem:    Fuzzy cmdline completion does not work for lower case.
Solution:   Also use fuzzy completion for lower case input. (Yegappan
            Lakshmanan, closes #9849)
This commit is contained in:
Yegappan Lakshmanan
2022-02-26 11:04:42 +00:00
committed by Bram Moolenaar
parent 5a2d4a3ecb
commit 4df5b33f20
3 changed files with 29 additions and 7 deletions

View File

@@ -1212,6 +1212,7 @@ set_cmd_index(char_u *cmd, exarg_T *eap, expand_T *xp, int *complp)
{ {
char_u *p = NULL; char_u *p = NULL;
int len = 0; int len = 0;
int fuzzy = cmdline_fuzzy_complete(cmd);
// Isolate the command and search for it in the command table. // Isolate the command and search for it in the command table.
// Exceptions: // Exceptions:
@@ -1253,7 +1254,9 @@ set_cmd_index(char_u *cmd, exarg_T *eap, expand_T *xp, int *complp)
eap->cmdidx = excmd_get_cmdidx(cmd, len); eap->cmdidx = excmd_get_cmdidx(cmd, len);
if (cmd[0] >= 'A' && cmd[0] <= 'Z') // User defined commands support alphanumeric characters.
// Also when doing fuzzy expansion, support alphanumeric characters.
if ((cmd[0] >= 'A' && cmd[0] <= 'Z') || (fuzzy && *p != NUL))
while (ASCII_ISALNUM(*p) || *p == '*') // Allow * wild card while (ASCII_ISALNUM(*p) || *p == '*') // Allow * wild card
++p; ++p;
} }
@@ -2493,6 +2496,7 @@ ExpandFromContext(
int ret; int ret;
int flags; int flags;
char_u *tofree = NULL; char_u *tofree = NULL;
int fuzzy = cmdline_fuzzy_complete(pat);
flags = map_wildopts_to_ewflags(options); flags = map_wildopts_to_ewflags(options);
@@ -2577,12 +2581,15 @@ ExpandFromContext(
pat = tofree; pat = tofree;
} }
regmatch.regprog = vim_regcomp(pat, magic_isset() ? RE_MAGIC : 0); if (!fuzzy)
if (regmatch.regprog == NULL) {
return FAIL; regmatch.regprog = vim_regcomp(pat, magic_isset() ? RE_MAGIC : 0);
if (regmatch.regprog == NULL)
return FAIL;
// set ignore-case according to p_ic, p_scs and pat // set ignore-case according to p_ic, p_scs and pat
regmatch.rm_ic = ignorecase(pat); regmatch.rm_ic = ignorecase(pat);
}
if (xp->xp_context == EXPAND_SETTINGS if (xp->xp_context == EXPAND_SETTINGS
|| xp->xp_context == EXPAND_BOOL_SETTINGS) || xp->xp_context == EXPAND_BOOL_SETTINGS)
@@ -2596,7 +2603,8 @@ ExpandFromContext(
else else
ret = ExpandOther(pat, xp, &regmatch, matches, numMatches); ret = ExpandOther(pat, xp, &regmatch, matches, numMatches);
vim_regfree(regmatch.regprog); if (!fuzzy)
vim_regfree(regmatch.regprog);
vim_free(tofree); vim_free(tofree);
return ret; return ret;

View File

@@ -2776,6 +2776,18 @@ func Test_wildoptions_fuzzy()
delcommand T123FendingOff delcommand T123FendingOff
%bw %bw
" Test for fuzzy completion of a command with lower case letters and a
" number
command Foo2Bar :
set wildoptions=fuzzy
call feedkeys(":foo2\<Tab>\<C-B>\"\<CR>", 'tx')
call assert_equal('"Foo2Bar', @:)
call feedkeys(":foo\<Tab>\<C-B>\"\<CR>", 'tx')
call assert_equal('"Foo2Bar', @:)
call feedkeys(":bar\<Tab>\<C-B>\"\<CR>", 'tx')
call assert_equal('"Foo2Bar', @:)
delcommand Foo2Bar
set wildoptions& set wildoptions&
%bw! %bw!
endfunc endfunc

View File

@@ -754,6 +754,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
4475,
/**/ /**/
4474, 4474,
/**/ /**/