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:
committed by
Bram Moolenaar
parent
5a2d4a3ecb
commit
4df5b33f20
@@ -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, ®match, matches, numMatches);
|
ret = ExpandOther(pat, xp, ®match, matches, numMatches);
|
||||||
|
|
||||||
vim_regfree(regmatch.regprog);
|
if (!fuzzy)
|
||||||
|
vim_regfree(regmatch.regprog);
|
||||||
vim_free(tofree);
|
vim_free(tofree);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@@ -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
|
||||||
|
@@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user