Mercurial > vim
changeset 22705:ba3f547dc490 v8.2.1901
patch 8.2.1901: variable completion does not work in command line window
Commit: https://github.com/vim/vim/commit/4ff2f2fb6bef01a06bd726bae8dfa8dd6355d594
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Oct 25 13:22:42 2020 +0100
patch 8.2.1901: variable completion does not work in command line window
Problem: Variable completion does not work in command line window.
Solution: Use the "prevwin". (closes https://github.com/vim/vim/issues/7198)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 25 Oct 2020 13:30:06 +0100 |
parents | 8fef39a36cb9 |
children | 9087acfe9333 |
files | src/evalvars.c src/testdir/test_ins_complete.vim src/version.c |
diffstat | 3 files changed, 41 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/evalvars.c +++ b/src/evalvars.c @@ -1981,7 +1981,13 @@ get_user_var_name(expand_T *xp, int idx) } // b: variables - ht = &curbuf->b_vars->dv_hashtab; + ht = +#ifdef FEAT_CMDWIN + // In cmdwin, the alternative buffer should be used. + (cmdwin_type != 0 && get_cmdline_type() == NUL) ? + &prevwin->w_buffer->b_vars->dv_hashtab : +#endif + &curbuf->b_vars->dv_hashtab; if (bdone < ht->ht_used) { if (bdone++ == 0) @@ -1994,7 +2000,13 @@ get_user_var_name(expand_T *xp, int idx) } // w: variables - ht = &curwin->w_vars->dv_hashtab; + ht = +#ifdef FEAT_CMDWIN + // In cmdwin, the alternative window should be used. + (cmdwin_type != 0 && get_cmdline_type() == NUL) ? + &prevwin->w_vars->dv_hashtab : +#endif + &curwin->w_vars->dv_hashtab; if (wdone < ht->ht_used) { if (wdone++ == 0)
--- a/src/testdir/test_ins_complete.vim +++ b/src/testdir/test_ins_complete.vim @@ -346,7 +346,10 @@ func Test_compl_in_cmdwin() set wildmenu wildchar=<Tab> com! -nargs=1 -complete=command GetInput let input = <q-args> com! -buffer TestCommand echo 'TestCommand' + let w:test_winvar = 'winvar' + let b:test_bufvar = 'bufvar' + " User-defined commands let input = '' call feedkeys("q:iGetInput T\<C-x>\<C-v>\<CR>", 'tx!') call assert_equal('TestCommand', input) @@ -355,8 +358,30 @@ func Test_compl_in_cmdwin() call feedkeys("q::GetInput T\<Tab>\<CR>:q\<CR>", 'tx!') call assert_equal('T', input) + + com! -nargs=1 -complete=var GetInput let input = <q-args> + " Window-local variables + let input = '' + call feedkeys("q:iGetInput w:test_\<C-x>\<C-v>\<CR>", 'tx!') + call assert_equal('w:test_winvar', input) + + let input = '' + call feedkeys("q::GetInput w:test_\<Tab>\<CR>:q\<CR>", 'tx!') + call assert_equal('w:test_', input) + + " Buffer-local variables + let input = '' + call feedkeys("q:iGetInput b:test_\<C-x>\<C-v>\<CR>", 'tx!') + call assert_equal('b:test_bufvar', input) + + let input = '' + call feedkeys("q::GetInput b:test_\<Tab>\<CR>:q\<CR>", 'tx!') + call assert_equal('b:test_', input) + delcom TestCommand delcom GetInput + unlet w:test_winvar + unlet b:test_bufvar set wildmenu& wildchar& endfunc