diff options
author | Bram Moolenaar <Bram@vim.org> | 2017-07-16 15:31:17 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2017-07-16 15:31:17 +0200 |
commit | 90305c66a8637ea43a6509c7ab597734dd218365 (patch) | |
tree | 355ef583c5c9f79a4f5849c087ba270728e402bf | |
parent | 6a77d2667e982655f6adacee774ee7aa2581bd8a (diff) | |
download | vim-git-90305c66a8637ea43a6509c7ab597734dd218365.tar.gz |
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.txt | 14 | ||||
-rw-r--r-- | src/ex_cmds.h | 2 | ||||
-rw-r--r-- | src/ex_cmds2.c | 36 | ||||
-rw-r--r-- | src/testdir/test_arglist.vim | 20 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 33 insertions, 41 deletions
diff --git a/runtime/doc/editing.txt b/runtime/doc/editing.txt index ecb9b87c2..bcd86a1a5 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 0844a9cc2..dd549816a 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 5f1959234..687bbaecf 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 dee2d6506..1a0e4aff2 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 0d5db7f00..906e3fa97 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, |