changeset 21845:0e6ee11977b3 v8.2.1472

patch 8.2.1472: ":argdel" does not work like ":.argdel" as documented Commit: https://github.com/vim/vim/commit/7b22117c4ecf383b6f35acef041773a83ec28220 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Aug 17 19:34:10 2020 +0200 patch 8.2.1472: ":argdel" does not work like ":.argdel" as documented Problem: ":argdel" does not work like ":.argdel" as documented. (Alexey Demin) Solution: Make ":argdel" work like ":.argdel". (closes #6727) Also fix giving the error "0 more files to edit".
author Bram Moolenaar <Bram@vim.org>
date Mon, 17 Aug 2020 19:45:04 +0200
parents 69aca436df65
children 9b0141b6cfc2
files src/arglist.c src/ex_docmd.c src/testdir/test_arglist.vim src/version.c
diffstat 4 files changed, 24 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/arglist.c
+++ b/src/arglist.c
@@ -776,10 +776,20 @@ ex_argdelete(exarg_T *eap)
     int		i;
     int		n;
 
-    if (eap->addr_count > 0)
+    if (eap->addr_count > 0 || *eap->arg == NUL)
     {
-	// ":1,4argdel": Delete all arguments in the range.
-	if (eap->line2 > ARGCOUNT)
+	// ":argdel" works like ":argdel"
+	if (eap->addr_count == 0)
+	{
+	    if (curwin->w_arg_idx >= ARGCOUNT)
+	    {
+		emsg(_("E610: No argument to delete"));
+		return;
+	    }
+	    eap->line1 = eap->line2 = curwin->w_arg_idx + 1;
+	}
+	else if (eap->line2 > ARGCOUNT)
+	    // ":1,4argdel": Delete all arguments in the range.
 	    eap->line2 = ARGCOUNT;
 	n = eap->line2 - eap->line1 + 1;
 	if (*eap->arg != NUL)
@@ -808,8 +818,6 @@ ex_argdelete(exarg_T *eap)
 		curwin->w_arg_idx = ARGCOUNT - 1;
 	}
     }
-    else if (*eap->arg == NUL)
-	emsg(_(e_argreq));
     else
 	do_arglist(eap->arg, AL_DEL, 0, FALSE);
 #ifdef FEAT_TITLE
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -5022,7 +5022,7 @@ check_more(
     int	    n = ARGCOUNT - curwin->w_arg_idx - 1;
 
     if (!forceit && only_one_window()
-	    && ARGCOUNT > 1 && !arg_had_last && n >= 0 && quitmore == 0)
+	    && ARGCOUNT > 1 && !arg_had_last && n > 0 && quitmore == 0)
     {
 	if (message)
 	{
--- a/src/testdir/test_arglist.vim
+++ b/src/testdir/test_arglist.vim
@@ -423,9 +423,15 @@ func Test_argdelete()
   last
   argdelete %
   call assert_equal(['b'], argv())
-  call assert_fails('argdelete', 'E471:')
+  call assert_fails('argdelete', 'E610:')
   call assert_fails('1,100argdelete', 'E16:')
-  %argd
+
+  call Reset_arglist()
+  args a b c d
+  next
+  argdel
+  call Assert_argc(['a', 'c', 'd'])
+  %argdel
 endfunc
 
 func Test_argdelete_completion()
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1472,
+/**/
     1471,
 /**/
     1470,