summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-07-16 15:31:17 +0200
committerBram Moolenaar <Bram@vim.org>2017-07-16 15:31:17 +0200
commit90305c66a8637ea43a6509c7ab597734dd218365 (patch)
tree355ef583c5c9f79a4f5849c087ba270728e402bf
parent6a77d2667e982655f6adacee774ee7aa2581bd8a (diff)
patch 8.0.0721: :argedit can only have one argumentv8.0.0721
Problem: :argedit can only have one argument. Solution: Allow for multiple arguments. (Christian Brabandt)
-rw-r--r--runtime/doc/editing.txt14
-rw-r--r--src/ex_cmds.h2
-rw-r--r--src/ex_cmds2.c36
-rw-r--r--src/testdir/test_arglist.vim20
-rw-r--r--src/version.c2
5 files changed, 33 insertions, 41 deletions
diff --git a/runtime/doc/editing.txt b/runtime/doc/editing.txt
index ecb9b87c2f..bcd86a1a5e 100644
--- a/runtime/doc/editing.txt
+++ b/runtime/doc/editing.txt
@@ -1,4 +1,4 @@
-*editing.txt* For Vim version 8.0. Last change: 2017 Jun 20
+*editing.txt* For Vim version 8.0. Last change: 2017 Jul 16
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -617,16 +617,16 @@ list of the current window.
Also see |++opt| and |+cmd|.
{Vi: no ++opt}
-:[count]arge[dit][!] [++opt] [+cmd] {name} *:arge* *:argedit*
- Add {name} to the argument list and edit it.
+:[count]arge[dit][!] [++opt] [+cmd] {name} .. *:arge* *:argedit*
+ Add {name}s to the argument list and edit it.
When {name} already exists in the argument list, this
entry is edited.
This is like using |:argadd| and then |:edit|.
- Note that only one file name is allowed, and spaces
- inside the file name are allowed, like with |:edit|.
+ Spaces in filenames have to be escaped with "\".
[count] is used like with |:argadd|.
- [!] is required if the current file cannot be
- |abandon|ed.
+ If the current file cannot be |abandon|ed {name}s will
+ still be added to the argument list, but won't be
+ edited. No check for duplicates is done.
Also see |++opt| and |+cmd|.
{not in Vi}
diff --git a/src/ex_cmds.h b/src/ex_cmds.h
index 0844a9cc27..dd549816ac 100644
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -137,7 +137,7 @@ EX(CMD_argdo, "argdo", ex_listdo,
BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
ADDR_ARGUMENTS),
EX(CMD_argedit, "argedit", ex_argedit,
- BANG|NEEDARG|RANGE|NOTADR|ZEROR|FILE1|EDITCMD|ARGOPT|TRLBAR,
+ BANG|NEEDARG|RANGE|NOTADR|ZEROR|FILES|EDITCMD|ARGOPT|TRLBAR,
ADDR_ARGUMENTS),
EX(CMD_argglobal, "argglobal", ex_args,
BANG|FILES|EDITCMD|ARGOPT|TRLBAR,
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index 5f19592340..687bbaecfb 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -2801,34 +2801,20 @@ ex_next(exarg_T *eap)
void
ex_argedit(exarg_T *eap)
{
- int fnum;
- int i;
- char_u *s;
-
- /* Add the argument to the buffer list and get the buffer number. */
- fnum = buflist_add(eap->arg, BLN_LISTED);
+ int i = eap->addr_count ? (int)eap->line2 : curwin->w_arg_idx + 1;
- /* Check if this argument is already in the argument list. */
- for (i = 0; i < ARGCOUNT; ++i)
- if (ARGLIST[i].ae_fnum == fnum)
- break;
- if (i == ARGCOUNT)
- {
- /* Can't find it, add it to the argument list. */
- s = vim_strsave(eap->arg);
- if (s == NULL)
- return;
- i = alist_add_list(1, &s,
- eap->addr_count > 0 ? (int)eap->line2 : curwin->w_arg_idx + 1);
- if (i < 0)
- return;
- curwin->w_arg_idx = i;
- }
-
- alist_check_arg_idx();
+ if (do_arglist(eap->arg, AL_ADD, i) == FAIL)
+ return;
+#ifdef FEAT_TITLE
+ maketitle();
+#endif
+ if (curwin->w_arg_idx == 0 && (curbuf->b_ml.ml_flags & ML_EMPTY)
+ && curbuf->b_ffname == NULL)
+ i = 0;
/* Edit the argument. */
- do_argfile(eap, i);
+ if (i < ARGCOUNT)
+ do_argfile(eap, i);
}
/*
diff --git a/src/testdir/test_arglist.vim b/src/testdir/test_arglist.vim
index dee2d65064..1a0e4aff28 100644
--- a/src/testdir/test_arglist.vim
+++ b/src/testdir/test_arglist.vim
@@ -188,6 +188,11 @@ func Test_zero_argadd()
2argu
arga third
call assert_equal(['edited', 'a', 'third', 'b', 'c', 'd'], argv())
+
+ 2argu
+ argedit file\ with\ spaces another file
+ call assert_equal(['edited', 'a', 'file with spaces', 'another', 'file', 'third', 'b', 'c', 'd'], argv())
+ call assert_equal('file with spaces', expand('%'))
endfunc
func Reset_arglist()
@@ -239,20 +244,19 @@ func Test_argedit()
call assert_equal(['a', 'b'], argv())
call assert_equal('b', expand('%:t'))
argedit a
- call assert_equal(['a', 'b'], argv())
+ call assert_equal(['a', 'b', 'a'], argv())
call assert_equal('a', expand('%:t'))
- if has('unix')
- " on MS-Windows this would edit file "a b"
- call assert_fails('argedit a b', 'E172:')
- endif
+ argedit C D
+ call assert_equal('C', expand('%:t'))
+ call assert_equal(['a', 'b', 'a', 'C', 'D'], argv())
argedit c
- call assert_equal(['a', 'c', 'b'], argv())
+ call assert_equal(['a', 'b', 'a', 'C', 'c', 'D'], argv())
0argedit x
- call assert_equal(['x', 'a', 'c', 'b'], argv())
+ call assert_equal(['x', 'a', 'b', 'a', 'C', 'c', 'D'], argv())
enew! | set modified
call assert_fails('argedit y', 'E37:')
argedit! y
- call assert_equal(['x', 'y', 'a', 'c', 'b'], argv())
+ call assert_equal(['x', 'y', 'y', 'a', 'b', 'a', 'C', 'c', 'D'], argv())
%argd
endfunc
diff --git a/src/version.c b/src/version.c
index 0d5db7f00b..906e3fa97e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 721,
+/**/
720,
/**/
719,