diff --git a/src/nvim/cmdexpand.c b/src/nvim/cmdexpand.c index 2b11963772..573f56d50f 100644 --- a/src/nvim/cmdexpand.c +++ b/src/nvim/cmdexpand.c @@ -970,7 +970,6 @@ void ExpandInit(expand_T *xp) xp->xp_backslash = XP_BS_NONE; xp->xp_prefix = XP_PREFIX_NONE; xp->xp_numfiles = -1; - XFREE_CLEAR(cmdline_orig); } /// Cleanup an expand structure after use. @@ -983,6 +982,11 @@ void ExpandCleanup(expand_T *xp) XFREE_CLEAR(xp->xp_orig); } +void clear_cmdline_orig(void) +{ + XFREE_CLEAR(cmdline_orig); +} + /// Display one line of completion matches. Multiple matches are displayed in /// each line (used by wildmode=list and CTRL-D) /// diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index 4d55d2cd95..0d91514fca 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -745,6 +745,7 @@ static uint8_t *command_line_enter(int firstc, int count, int indent, bool clear ExpandInit(&s->xpc); ccline.xpc = &s->xpc; + clear_cmdline_orig(); cmdmsg_rl = (curwin->w_p_rl && *curwin->w_p_rlc == 's' && (s->firstc == '/' || s->firstc == '?')); @@ -901,6 +902,7 @@ static uint8_t *command_line_enter(int firstc, int count, int indent, bool clear ExpandCleanup(&s->xpc); ccline.xpc = NULL; + clear_cmdline_orig(); finish_incsearch_highlighting(s->gotesc, &s->is_state, false); diff --git a/test/old/testdir/test_cmdline.vim b/test/old/testdir/test_cmdline.vim index 127f3593bf..df2091bf7d 100644 --- a/test/old/testdir/test_cmdline.vim +++ b/test/old/testdir/test_cmdline.vim @@ -4287,10 +4287,12 @@ func Test_cd_bslash_completion_windows() let &shellslash = save_shellslash endfunc -" Testg cmdcomplete_info() with CmdlineLeavePre autocmd +" Test cmdcomplete_info() with CmdlineLeavePre autocmd func Test_cmdcomplete_info() augroup test_CmdlineLeavePre autocmd! + " Calling expand() should not interfere with cmdcomplete_info(). + autocmd CmdlineLeavePre * call expand('test_cmdline.*') autocmd CmdlineLeavePre * let g:cmdcomplete_info = string(cmdcomplete_info()) augroup END new