Mercurial > vim
changeset 26032:162ef12a3b5f v8.2.3550
patch 8.2.3550: completion() does not work properly
Commit: https://github.com/vim/vim/commit/ae38a9db7770b38889fbf06908cc69d42b463a73
Author: Shougo Matsushita <Shougo.Matsu@gmail.com>
Date: Thu Oct 21 11:39:53 2021 +0100
patch 8.2.3550: completion() does not work properly
Problem: completion() does not work properly.
Solution: Set xp_line and add WILD_HOME_REPLACE. (Shougo Matsushita,
closes #9016)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 21 Oct 2021 12:45:04 +0200 |
parents | 1e5e92723674 |
children | a65546a90889 |
files | src/cmdexpand.c src/testdir/test_cmdline.vim src/version.c |
diffstat | 3 files changed, 19 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/cmdexpand.c +++ b/src/cmdexpand.c @@ -978,6 +978,7 @@ set_one_cmd_context( ExpandInit(xp); xp->xp_pattern = buff; + xp->xp_line = buff; xp->xp_context = EXPAND_COMMANDS; // Default until we get past command ea.argt = 0; @@ -2891,7 +2892,7 @@ f_getcompletion(typval_T *argvars, typva expand_T xpc; int filtered = FALSE; int options = WILD_SILENT | WILD_USE_NL | WILD_ADD_SLASH - | WILD_NO_BEEP; + | WILD_NO_BEEP | WILD_HOME_REPLACE; if (in_vim9script() && (check_for_string_arg(argvars, 0) == FAIL
--- a/src/testdir/test_cmdline.vim +++ b/src/testdir/test_cmdline.vim @@ -305,6 +305,11 @@ func Test_getcompletion() let l = getcompletion('NoMatch', 'dir') call assert_equal([], l) + if glob('~/*') !=# '' + let l = getcompletion('~/', 'dir') + call assert_true(l[0][0] ==# '~') + endif + let l = getcompletion('exe', 'expression') call assert_true(index(l, 'executable(') >= 0) let l = getcompletion('kill', 'expression') @@ -418,6 +423,16 @@ func Test_getcompletion() let l = getcompletion('call paint', 'cmdline') call assert_equal([], l) + func T(a, c, p) + return "oneA\noneB\noneC" + endfunc + command -nargs=1 -complete=custom,T MyCmd + let l = getcompletion('MyCmd ', 'cmdline') + call assert_equal(['oneA', 'oneB', 'oneC'], l) + + delcommand MyCmd + delfunc T + " For others test if the name is recognized. let names = ['buffer', 'environment', 'file_in_path', 'mapping', 'tag', 'tag_listfiles', 'user'] if has('cmdline_hist')