changeset 29495:82b0aeaeaa3c v9.0.0089

patch 9.0.0089: fuzzy argument completion doesn't work for shell commands Commit: https://github.com/vim/vim/commit/7db3a8e3298bf7c7c3f74cc9c1add04f29e78d2d Author: Yegappan Lakshmanan <yegappan@yahoo.com> Date: Tue Jul 26 22:01:36 2022 +0100 patch 9.0.0089: fuzzy argument completion doesn't work for shell commands Problem: Fuzzy argument completion doesn't work for shell commands. Solution: Check for cmdidx not being CMD_bang. (Yegappan Lakshmanan, closes #10769)
author Bram Moolenaar <Bram@vim.org>
date Tue, 26 Jul 2022 23:15:03 +0200
parents 32b286a8a175
children 38d79c3d66f0
files src/cmdexpand.c src/testdir/test_cmdline.vim src/version.c
diffstat 3 files changed, 16 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/cmdexpand.c
+++ b/src/cmdexpand.c
@@ -1305,8 +1305,10 @@ set_cmd_index(char_u *cmd, exarg_T *eap,
 	eap->cmdidx = excmd_get_cmdidx(cmd, len);
 
 	// User defined commands support alphanumeric characters.
-	// Also when doing fuzzy expansion, support alphanumeric characters.
-	if ((cmd[0] >= 'A' && cmd[0] <= 'Z') || (fuzzy && *p != NUL))
+	// Also when doing fuzzy expansion for non-shell commands, support
+	// alphanumeric characters.
+	if ((cmd[0] >= 'A' && cmd[0] <= 'Z')
+		|| (fuzzy && eap->cmdidx != CMD_bang && *p != NUL))
 	    while (ASCII_ISALNUM(*p) || *p == '*')	// Allow * wild card
 		++p;
     }
--- a/src/testdir/test_cmdline.vim
+++ b/src/testdir/test_cmdline.vim
@@ -3144,6 +3144,16 @@ func Test_cmdline_complete_substitute_sh
   endfor
 endfunc
 
+" Test for :! shell command argument completion
+func Test_cmdline_complete_bang_cmd_argument()
+  set wildoptions=fuzzy
+  call feedkeys(":!vim test_cmdline.\<Tab>\<C-B>\"\<CR>", 'xt')
+  call assert_equal('"!vim test_cmdline.vim', @:)
+  set wildoptions&
+  call feedkeys(":!vim test_cmdline.\<Tab>\<C-B>\"\<CR>", 'xt')
+  call assert_equal('"!vim test_cmdline.vim', @:)
+endfunc
+
 func Check_completion()
   call assert_equal('let a', getcmdline())
   call assert_equal(6, getcmdpos())
--- a/src/version.c
+++ b/src/version.c
@@ -736,6 +736,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    89,
+/**/
     88,
 /**/
     87,