From: Bram Moolenaar Date: Sat, 7 Jan 2017 19:39:53 +0000 (+0100) Subject: patch 8.0.0150: completion for :filter does not skip the pattern X-Git-Tag: v8.0.0150 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7069bf18e1b1b7bc7640335e07d1022b5acc9048;p=vim patch 8.0.0150: completion for :filter does not skip the pattern Problem: When the pattern of :filter does not have a separator then completion of the command fails. Solution: Skip over the pattern. (Ozaki Kiichi, clodes #1299) --- diff --git a/src/ex_docmd.c b/src/ex_docmd.c index b73eb95c9..134a48838 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -3871,7 +3871,6 @@ set_one_cmd_context( case CMD_cfdo: case CMD_confirm: case CMD_debug: - case CMD_filter: case CMD_folddoclosed: case CMD_folddoopen: case CMD_hide: @@ -3896,6 +3895,16 @@ set_one_cmd_context( case CMD_windo: return arg; + case CMD_filter: + if (*arg != NUL) + arg = skip_vimgrep_pat(arg, NULL, NULL); + if (arg == NULL || *arg == NUL) + { + xp->xp_context = EXPAND_NOTHING; + return NULL; + } + return skipwhite(arg); + #ifdef FEAT_CMDL_COMPL # ifdef FEAT_SEARCH_EXTRA case CMD_match: diff --git a/src/testdir/test_filter_cmd.vim b/src/testdir/test_filter_cmd.vim index 0bbd905c8..5aa5fa64d 100644 --- a/src/testdir/test_filter_cmd.vim +++ b/src/testdir/test_filter_cmd.vim @@ -52,3 +52,25 @@ func Test_filter_fails() call assert_fails('filter! /pat/', 'E476:') call assert_fails('filter! /pat/ asdf', 'E492:') endfunc + +function s:complete_filter_cmd(filtcmd) + let keystroke = "\\=execute('let cmdline = getcmdline()')\\" + let cmdline = '' + call feedkeys(':' . a:filtcmd . keystroke, 'ntx') + return cmdline +endfunction + +func Test_filter_cmd_completion() + " Do not complete pattern + call assert_equal("filter \t", s:complete_filter_cmd('filter ')) + call assert_equal("filter pat\t", s:complete_filter_cmd('filter pat')) + call assert_equal("filter /pat\t", s:complete_filter_cmd('filter /pat')) + call assert_equal("filter /pat/\t", s:complete_filter_cmd('filter /pat/')) + + " Complete after string pattern + call assert_equal('filter pat print', s:complete_filter_cmd('filter pat pri')) + + " Complete after regexp pattern + call assert_equal('filter /pat/ print', s:complete_filter_cmd('filter /pat/ pri')) + call assert_equal('filter #pat# print', s:complete_filter_cmd('filter #pat# pri')) +endfunc diff --git a/src/version.c b/src/version.c index 7b47461ca..0c16c2897 100644 --- a/src/version.c +++ b/src/version.c @@ -764,6 +764,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 150, /**/ 149, /**/