Skip to content

Commit

Permalink
updated for version 7.4.566
Browse files Browse the repository at this point in the history
Problem:    :argdo, :bufdo, :windo and :tabdo don't take a range.
Solution:   Support the range. (Marcin Szamotulski)
  • Loading branch information
brammool committed Jan 7, 2015
1 parent 3ffc79a commit a162bc5
Show file tree
Hide file tree
Showing 8 changed files with 102 additions and 25 deletions.
9 changes: 5 additions & 4 deletions runtime/doc/editing.txt
@@ -1,4 +1,4 @@
*editing.txt* For Vim version 7.4. Last change: 2014 Dec 05
*editing.txt* For Vim version 7.4. Last change: 2015 Jan 04


VIM REFERENCE MANUAL by Bram Moolenaar
Expand Down Expand Up @@ -832,8 +832,9 @@ current window. The two windows then share this list, until one of them uses
USING THE ARGUMENT LIST

*:argdo*
:argdo[!] {cmd} Execute {cmd} for each file in the argument list.
It works like doing this: >
:[range]argdo[!] {cmd} Execute {cmd} for each file in the argument list or
if [range] is specified only for arguments in that
range. It works like doing this: >
:rewind
:{cmd}
:next
Expand Down Expand Up @@ -1391,7 +1392,7 @@ reveal it to others. The 'viminfo' file is not encrypted.
You could do this to edit very secret text: >
:set noundofile viminfo=
:noswapfile edit secrets.txt
Keep in mind that without a swap file you risk loosing your work in a crash.
Keep in mind that without a swap file you risk losing your work in a crash.

WARNING: If you make a typo when entering the key and then write the file and
exit, the text will be lost!
Expand Down
12 changes: 7 additions & 5 deletions runtime/doc/tabpage.txt
@@ -1,4 +1,4 @@
*tabpage.txt* For Vim version 7.4. Last change: 2014 Nov 27
*tabpage.txt* For Vim version 7.4. Last change: 2015 Jan 04


VIM REFERENCE MANUAL by Bram Moolenaar
Expand Down Expand Up @@ -206,7 +206,7 @@ REORDERING TAB PAGES:
:tabmove " move the tab page to the right
:.tabmove " as above
:+tabmove " as above
:0tabmove " move the tab page to the begining of the tab
:0tabmove " move the tab page to the beginning of the tab
" list
:$tabmove " move the tab page to the end of the tab list
<
Expand All @@ -224,8 +224,10 @@ clarification what +N means in this context see |[range]|.
LOOPING OVER TAB PAGES:

*:tabd* *:tabdo*
:tabd[o] {cmd} Execute {cmd} in each tab page.
It works like doing this: >
:[range]tabd[o] {cmd}
Execute {cmd} in each tab page or if [range] is given only in
tab pages which tab page number is in the [range]. It works
like doing this: >
:tabfirst
:{cmd}
:tabnext
Expand Down Expand Up @@ -271,8 +273,8 @@ window on the same buffer and then edit another buffer. Thus ":tabnew"
triggers:
WinLeave leave current window
TabLeave leave current tab page
TabEnter enter new tab page
WinEnter enter window in new tab page
TabEnter enter new tab page
BufLeave leave current buffer
BufEnter enter new empty buffer

Expand Down
11 changes: 7 additions & 4 deletions runtime/doc/windows.txt
Expand Up @@ -698,8 +698,9 @@ can also get to them with the buffer list commands, like ":bnext".
8. Do a command in all buffers or windows *list-repeat*

*:windo*
:windo {cmd} Execute {cmd} in each window.
It works like doing this: >
:[range]windo {cmd} Execute {cmd} in each window or if [range] is given
only in windows for which the window number lies in
the [range]. It works like doing this: >
CTRL-W t
:{cmd}
CTRL-W w
Expand All @@ -717,8 +718,10 @@ can also get to them with the buffer list commands, like ":bnext".
Also see |:tabdo|, |:argdo| and |:bufdo|.

*:bufdo*
:bufdo[!] {cmd} Execute {cmd} in each buffer in the buffer list.
It works like doing this: >
:[range]bufdo[!] {cmd} Execute {cmd} in each buffer in the buffer list or if
[range] is given only for buffers for which their
buffer numer is in the [range]. It works like doing
this: >
:bfirst
:{cmd}
:bnext
Expand Down
16 changes: 8 additions & 8 deletions src/ex_cmds.h
Expand Up @@ -133,8 +133,8 @@ EX(CMD_argdelete, "argdelete", ex_argdelete,
BANG|RANGE|NOTADR|FILES|TRLBAR,
ADDR_ARGUMENTS),
EX(CMD_argdo, "argdo", ex_listdo,
BANG|NEEDARG|EXTRA|NOTRLCOM,
ADDR_LINES),
BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
ADDR_ARGUMENTS),
EX(CMD_argedit, "argedit", ex_argedit,
BANG|NEEDARG|RANGE|NOTADR|FILE1|EDITCMD|ARGOPT|TRLBAR,
ADDR_ARGUMENTS),
Expand Down Expand Up @@ -220,8 +220,8 @@ EX(CMD_buffers, "buffers", buflist_list,
BANG|TRLBAR|CMDWIN,
ADDR_LINES),
EX(CMD_bufdo, "bufdo", ex_listdo,
BANG|NEEDARG|EXTRA|NOTRLCOM,
ADDR_LINES),
BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
ADDR_BUFFERS),
EX(CMD_bunload, "bunload", ex_bunload,
BANG|RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR,
ADDR_LOADED_BUFFERS),
Expand Down Expand Up @@ -1384,8 +1384,8 @@ EX(CMD_tabclose, "tabclose", ex_tabclose,
RANGE|NOTADR|COUNT|BANG|TRLBAR|CMDWIN,
ADDR_TABS),
EX(CMD_tabdo, "tabdo", ex_listdo,
NEEDARG|EXTRA|NOTRLCOM,
ADDR_LINES),
NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
ADDR_TABS),
EX(CMD_tabedit, "tabedit", ex_splitview,
BANG|FILE1|RANGE|NOTADR|ZEROR|EDITCMD|ARGOPT|TRLBAR,
ADDR_TABS),
Expand Down Expand Up @@ -1576,8 +1576,8 @@ EX(CMD_wincmd, "wincmd", ex_wincmd,
NEEDARG|WORD1|RANGE|NOTADR,
ADDR_WINDOWS),
EX(CMD_windo, "windo", ex_listdo,
BANG|NEEDARG|EXTRA|NOTRLCOM,
ADDR_LINES),
BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
ADDR_WINDOWS),
EX(CMD_winpos, "winpos", ex_winpos,
EXTRA|TRLBAR|CMDWIN,
ADDR_LINES),
Expand Down
38 changes: 34 additions & 4 deletions src/ex_cmds2.c
Expand Up @@ -2472,15 +2472,36 @@ ex_listdo(eap)
| (eap->forceit ? CCGD_FORCEIT : 0)
| CCGD_EXCMD))
{
/* start at the first argument/window/buffer */
i = 0;
/* start at the eap->line1 argument/window/buffer */
#ifdef FEAT_WINDOWS
wp = firstwin;
tp = first_tabpage;
#endif
switch (eap->cmdidx)
{
#ifdef FEAT_WINDOWS
case CMD_windo:
for ( ; wp != NULL && i + 1 < eap->line1; wp = wp->w_next)
i++;
break;
case CMD_tabdo:
for( ; tp != NULL && i + 1 < eap->line1; tp = tp->tp_next)
i++;
break;
#endif
case CMD_argdo:
i = eap->line1 - 1;
break;
case CMD_bufdo:
i = eap->line1;
break;
default:
break;
}
/* set pcmark now */
if (eap->cmdidx == CMD_bufdo)
goto_buffer(eap, DOBUF_FIRST, FORWARD, 0);
goto_buffer(eap, DOBUF_FIRST, FORWARD, i);
else
setpcmark();
listcmd_busy = TRUE; /* avoids setting pcmark below */
Expand All @@ -2506,7 +2527,6 @@ ex_listdo(eap)
}
if (curwin->w_arg_idx != i)
break;
++i;
}
#ifdef FEAT_WINDOWS
else if (eap->cmdidx == CMD_windo)
Expand Down Expand Up @@ -2541,14 +2561,16 @@ ex_listdo(eap)
}
}

++i;

/* execute the command */
do_cmdline(eap->arg, eap->getline, eap->cookie,
DOCMD_VERBOSE + DOCMD_NOWAIT);

if (eap->cmdidx == CMD_bufdo)
{
/* Done? */
if (next_fnum < 0)
if (next_fnum < 0 || next_fnum > eap->line2)
break;
/* Check if the buffer still exists. */
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
Expand Down Expand Up @@ -2579,6 +2601,14 @@ ex_listdo(eap)
do_check_scrollbind(TRUE);
#endif
}

#ifdef FEAT_WINDOWS
if (eap->cmdidx == CMD_windo || eap->cmdidx == CMD_tabdo)
if (i+1 > eap->line2)
break;
#endif
if (eap->cmdidx == CMD_argdo && i >= eap->line2)
break;
}
listcmd_busy = FALSE;
}
Expand Down
34 changes: 34 additions & 0 deletions src/testdir/test_command_count.in
Expand Up @@ -90,6 +90,40 @@ STARTTEST
:only!
:e! test.out
:call append(0, g:lines)
:unlet g:lines
:w|bd
:se hidden
:b1
ENDTEST

STARTTEST
:only!
:let g:lines = []
:%argd
:arga a b c d e f
:3argu
:let args = ''
:.,$-argdo let args .= ' '.expand('%')
:call add(g:lines, 'argdo:' . args)
:split|split|split|split
:2wincmd w
:let windows = ''
:.,$-windo let windows .= ' '.winnr()
:call add(g:lines, 'windo:'. windows)
:b2
:let buffers = ''
:.,$-bufdo let buffers .= ' '.bufnr('%')
:call add(g:lines, 'bufdo:' . buffers)
:let buffers = ''
:3,7bufdo let buffers .= ' '.bufnr('%')
:call add(g:lines, 'bufdo:' . buffers)
:tabe|tabe|tabe|tabe
:normal! 2gt
:let tabpages = ''
:.,$-tabdo let tabpages .= ' '.tabpagenr()
:call add(g:lines, 'tabdo:' . tabpages)
:e! test.out
:call append('$', g:lines)
:w|qa!
ENDTEST

Expand Down
5 changes: 5 additions & 0 deletions src/testdir/test_command_count.ok
Expand Up @@ -28,3 +28,8 @@ $tabe 2
$+tabe E16: Invalid range
0tabm x

argdo: c d e
windo: 2 3 4
bufdo: 2 3 4 5 6 7 8 9 10 12
bufdo: 3 4 5 6 7
tabdo: 2 3 4
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -741,6 +741,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
566,
/**/
565,
/**/
Expand Down

0 comments on commit a162bc5

Please sign in to comment.