changeset 29479:5c390aa28f44 v9.0.0081

patch 9.0.0081: command line completion of user command may have duplicates Commit: https://github.com/vim/vim/commit/c2842adfb2ca0637f13e2793fefa18e7818684f9 Author: Bram Moolenaar <Bram@vim.org> Date: Tue Jul 26 17:23:47 2022 +0100 patch 9.0.0081: command line completion of user command may have duplicates Problem: Command line completion of user command may have duplicates. (Dani Dickstein) Solution: Skip global user command if an identical buffer-local one is defined. (closes #10797)
author Bram Moolenaar <Bram@vim.org>
date Tue, 26 Jul 2022 18:30:03 +0200
parents 5d3972281e92
children 44fddf8c1ea4
files src/testdir/test_cmdline.vim src/usercmd.c src/version.c
diffstat 3 files changed, 23 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_cmdline.vim
+++ b/src/testdir/test_cmdline.vim
@@ -842,6 +842,16 @@ func Test_cmdline_complete_user_cmd()
   delcommand Foo
 endfunc
 
+func Test_complete_user_cmd()
+  command FooBar echo 'global'
+  command -buffer FooBar echo 'local'
+  call feedkeys(":Foo\<C-A>\<Home>\"\<CR>", 'tx')
+  call assert_equal('"FooBar', @:)
+
+  delcommand -buffer FooBar
+  delcommand FooBar
+endfunc
+
 func s:ScriptLocalFunction()
   echo 'yes'
 endfunc
--- a/src/usercmd.c
+++ b/src/usercmd.c
@@ -363,9 +363,19 @@ get_user_commands(expand_T *xp UNUSED, i
 
     if (idx < buf->b_ucmds.ga_len)
 	return USER_CMD_GA(&buf->b_ucmds, idx)->uc_name;
+
     idx -= buf->b_ucmds.ga_len;
     if (idx < ucmds.ga_len)
-	return USER_CMD(idx)->uc_name;
+    {
+	int	i;
+	char_u  *name = USER_CMD(idx)->uc_name;
+
+	for (i = 0; i < buf->b_ucmds.ga_len; ++i)
+	    if (STRCMP(name, USER_CMD_GA(&buf->b_ucmds, i)->uc_name) == 0)
+		// global command is overruled by buffer-local one
+		return (char_u *)"";
+	return name;
+    }
     return NULL;
 }
 
--- 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 */
 /**/
+    81,
+/**/
     80,
 /**/
     79,