diff options
author | Yegappan Lakshmanan <yegappan@yahoo.com> | 2022-02-26 11:04:42 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-02-26 11:04:42 +0000 |
commit | 4df5b33f206210fec2a0297aea27e7db8b5173c0 (patch) | |
tree | 0c238b9d39158581b37836f18b3d5240defc989c | |
parent | 5a2d4a3ecb67942d47615507a163ffcd5863c073 (diff) |
patch 8.2.4475: fuzzy cmdline completion does not work for lower casev8.2.4475
Problem: Fuzzy cmdline completion does not work for lower case.
Solution: Also use fuzzy completion for lower case input. (Yegappan
Lakshmanan, closes #9849)
-rw-r--r-- | src/cmdexpand.c | 22 | ||||
-rw-r--r-- | src/testdir/test_cmdline.vim | 12 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 29 insertions, 7 deletions
diff --git a/src/cmdexpand.c b/src/cmdexpand.c index 94781f82f0..138ff9ef81 100644 --- a/src/cmdexpand.c +++ b/src/cmdexpand.c @@ -1212,6 +1212,7 @@ set_cmd_index(char_u *cmd, exarg_T *eap, expand_T *xp, int *complp) { char_u *p = NULL; int len = 0; + int fuzzy = cmdline_fuzzy_complete(cmd); // Isolate the command and search for it in the command table. // 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); - 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 ++p; } @@ -2493,6 +2496,7 @@ ExpandFromContext( int ret; int flags; char_u *tofree = NULL; + int fuzzy = cmdline_fuzzy_complete(pat); flags = map_wildopts_to_ewflags(options); @@ -2577,12 +2581,15 @@ ExpandFromContext( pat = tofree; } - regmatch.regprog = vim_regcomp(pat, magic_isset() ? RE_MAGIC : 0); - if (regmatch.regprog == NULL) - return FAIL; + if (!fuzzy) + { + 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 - regmatch.rm_ic = ignorecase(pat); + // set ignore-case according to p_ic, p_scs and pat + regmatch.rm_ic = ignorecase(pat); + } if (xp->xp_context == EXPAND_SETTINGS || xp->xp_context == EXPAND_BOOL_SETTINGS) @@ -2596,7 +2603,8 @@ ExpandFromContext( else ret = ExpandOther(pat, xp, ®match, matches, numMatches); - vim_regfree(regmatch.regprog); + if (!fuzzy) + vim_regfree(regmatch.regprog); vim_free(tofree); return ret; diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim index 73d39e39e0..c83a8f1470 100644 --- a/src/testdir/test_cmdline.vim +++ b/src/testdir/test_cmdline.vim @@ -2776,6 +2776,18 @@ func Test_wildoptions_fuzzy() delcommand T123FendingOff %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& %bw! endfunc diff --git a/src/version.c b/src/version.c index c7c7402ea2..8842ecca8d 100644 --- a/src/version.c +++ b/src/version.c @@ -755,6 +755,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4475, +/**/ 4474, /**/ 4473, |