mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
updated for version 7.4.566
Problem: :argdo, :bufdo, :windo and :tabdo don't take a range. Solution: Support the range. (Marcin Szamotulski)
This commit is contained in:
@@ -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
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@@ -832,8 +832,9 @@ current window. The two windows then share this list, until one of them uses
|
|||||||
USING THE ARGUMENT LIST
|
USING THE ARGUMENT LIST
|
||||||
|
|
||||||
*:argdo*
|
*:argdo*
|
||||||
:argdo[!] {cmd} Execute {cmd} for each file in the argument list.
|
:[range]argdo[!] {cmd} Execute {cmd} for each file in the argument list or
|
||||||
It works like doing this: >
|
if [range] is specified only for arguments in that
|
||||||
|
range. It works like doing this: >
|
||||||
:rewind
|
:rewind
|
||||||
:{cmd}
|
:{cmd}
|
||||||
:next
|
:next
|
||||||
@@ -1391,7 +1392,7 @@ reveal it to others. The 'viminfo' file is not encrypted.
|
|||||||
You could do this to edit very secret text: >
|
You could do this to edit very secret text: >
|
||||||
:set noundofile viminfo=
|
:set noundofile viminfo=
|
||||||
:noswapfile edit secrets.txt
|
: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
|
WARNING: If you make a typo when entering the key and then write the file and
|
||||||
exit, the text will be lost!
|
exit, the text will be lost!
|
||||||
|
@@ -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
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@@ -206,7 +206,7 @@ REORDERING TAB PAGES:
|
|||||||
:tabmove " move the tab page to the right
|
:tabmove " move the tab page to the right
|
||||||
:.tabmove " as above
|
:.tabmove " as above
|
||||||
:+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
|
" list
|
||||||
:$tabmove " move the tab page to the end of the tab list
|
:$tabmove " move the tab page to the end of the tab list
|
||||||
<
|
<
|
||||||
@@ -224,8 +224,10 @@ clarification what +N means in this context see |[range]|.
|
|||||||
LOOPING OVER TAB PAGES:
|
LOOPING OVER TAB PAGES:
|
||||||
|
|
||||||
*:tabd* *:tabdo*
|
*:tabd* *:tabdo*
|
||||||
:tabd[o] {cmd} Execute {cmd} in each tab page.
|
:[range]tabd[o] {cmd}
|
||||||
It works like doing this: >
|
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
|
:tabfirst
|
||||||
:{cmd}
|
:{cmd}
|
||||||
:tabnext
|
:tabnext
|
||||||
@@ -271,8 +273,8 @@ window on the same buffer and then edit another buffer. Thus ":tabnew"
|
|||||||
triggers:
|
triggers:
|
||||||
WinLeave leave current window
|
WinLeave leave current window
|
||||||
TabLeave leave current tab page
|
TabLeave leave current tab page
|
||||||
TabEnter enter new tab page
|
|
||||||
WinEnter enter window in new tab page
|
WinEnter enter window in new tab page
|
||||||
|
TabEnter enter new tab page
|
||||||
BufLeave leave current buffer
|
BufLeave leave current buffer
|
||||||
BufEnter enter new empty buffer
|
BufEnter enter new empty buffer
|
||||||
|
|
||||||
|
@@ -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*
|
8. Do a command in all buffers or windows *list-repeat*
|
||||||
|
|
||||||
*:windo*
|
*:windo*
|
||||||
:windo {cmd} Execute {cmd} in each window.
|
:[range]windo {cmd} Execute {cmd} in each window or if [range] is given
|
||||||
It works like doing this: >
|
only in windows for which the window number lies in
|
||||||
|
the [range]. It works like doing this: >
|
||||||
CTRL-W t
|
CTRL-W t
|
||||||
:{cmd}
|
:{cmd}
|
||||||
CTRL-W w
|
CTRL-W w
|
||||||
@@ -717,8 +718,10 @@ can also get to them with the buffer list commands, like ":bnext".
|
|||||||
Also see |:tabdo|, |:argdo| and |:bufdo|.
|
Also see |:tabdo|, |:argdo| and |:bufdo|.
|
||||||
|
|
||||||
*:bufdo*
|
*:bufdo*
|
||||||
:bufdo[!] {cmd} Execute {cmd} in each buffer in the buffer list.
|
:[range]bufdo[!] {cmd} Execute {cmd} in each buffer in the buffer list or if
|
||||||
It works like doing this: >
|
[range] is given only for buffers for which their
|
||||||
|
buffer numer is in the [range]. It works like doing
|
||||||
|
this: >
|
||||||
:bfirst
|
:bfirst
|
||||||
:{cmd}
|
:{cmd}
|
||||||
:bnext
|
:bnext
|
||||||
|
@@ -133,8 +133,8 @@ EX(CMD_argdelete, "argdelete", ex_argdelete,
|
|||||||
BANG|RANGE|NOTADR|FILES|TRLBAR,
|
BANG|RANGE|NOTADR|FILES|TRLBAR,
|
||||||
ADDR_ARGUMENTS),
|
ADDR_ARGUMENTS),
|
||||||
EX(CMD_argdo, "argdo", ex_listdo,
|
EX(CMD_argdo, "argdo", ex_listdo,
|
||||||
BANG|NEEDARG|EXTRA|NOTRLCOM,
|
BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
|
||||||
ADDR_LINES),
|
ADDR_ARGUMENTS),
|
||||||
EX(CMD_argedit, "argedit", ex_argedit,
|
EX(CMD_argedit, "argedit", ex_argedit,
|
||||||
BANG|NEEDARG|RANGE|NOTADR|FILE1|EDITCMD|ARGOPT|TRLBAR,
|
BANG|NEEDARG|RANGE|NOTADR|FILE1|EDITCMD|ARGOPT|TRLBAR,
|
||||||
ADDR_ARGUMENTS),
|
ADDR_ARGUMENTS),
|
||||||
@@ -220,8 +220,8 @@ EX(CMD_buffers, "buffers", buflist_list,
|
|||||||
BANG|TRLBAR|CMDWIN,
|
BANG|TRLBAR|CMDWIN,
|
||||||
ADDR_LINES),
|
ADDR_LINES),
|
||||||
EX(CMD_bufdo, "bufdo", ex_listdo,
|
EX(CMD_bufdo, "bufdo", ex_listdo,
|
||||||
BANG|NEEDARG|EXTRA|NOTRLCOM,
|
BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
|
||||||
ADDR_LINES),
|
ADDR_BUFFERS),
|
||||||
EX(CMD_bunload, "bunload", ex_bunload,
|
EX(CMD_bunload, "bunload", ex_bunload,
|
||||||
BANG|RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR,
|
BANG|RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR,
|
||||||
ADDR_LOADED_BUFFERS),
|
ADDR_LOADED_BUFFERS),
|
||||||
@@ -1384,8 +1384,8 @@ EX(CMD_tabclose, "tabclose", ex_tabclose,
|
|||||||
RANGE|NOTADR|COUNT|BANG|TRLBAR|CMDWIN,
|
RANGE|NOTADR|COUNT|BANG|TRLBAR|CMDWIN,
|
||||||
ADDR_TABS),
|
ADDR_TABS),
|
||||||
EX(CMD_tabdo, "tabdo", ex_listdo,
|
EX(CMD_tabdo, "tabdo", ex_listdo,
|
||||||
NEEDARG|EXTRA|NOTRLCOM,
|
NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
|
||||||
ADDR_LINES),
|
ADDR_TABS),
|
||||||
EX(CMD_tabedit, "tabedit", ex_splitview,
|
EX(CMD_tabedit, "tabedit", ex_splitview,
|
||||||
BANG|FILE1|RANGE|NOTADR|ZEROR|EDITCMD|ARGOPT|TRLBAR,
|
BANG|FILE1|RANGE|NOTADR|ZEROR|EDITCMD|ARGOPT|TRLBAR,
|
||||||
ADDR_TABS),
|
ADDR_TABS),
|
||||||
@@ -1576,8 +1576,8 @@ EX(CMD_wincmd, "wincmd", ex_wincmd,
|
|||||||
NEEDARG|WORD1|RANGE|NOTADR,
|
NEEDARG|WORD1|RANGE|NOTADR,
|
||||||
ADDR_WINDOWS),
|
ADDR_WINDOWS),
|
||||||
EX(CMD_windo, "windo", ex_listdo,
|
EX(CMD_windo, "windo", ex_listdo,
|
||||||
BANG|NEEDARG|EXTRA|NOTRLCOM,
|
BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
|
||||||
ADDR_LINES),
|
ADDR_WINDOWS),
|
||||||
EX(CMD_winpos, "winpos", ex_winpos,
|
EX(CMD_winpos, "winpos", ex_winpos,
|
||||||
EXTRA|TRLBAR|CMDWIN,
|
EXTRA|TRLBAR|CMDWIN,
|
||||||
ADDR_LINES),
|
ADDR_LINES),
|
||||||
|
@@ -2472,15 +2472,36 @@ ex_listdo(eap)
|
|||||||
| (eap->forceit ? CCGD_FORCEIT : 0)
|
| (eap->forceit ? CCGD_FORCEIT : 0)
|
||||||
| CCGD_EXCMD))
|
| CCGD_EXCMD))
|
||||||
{
|
{
|
||||||
/* start at the first argument/window/buffer */
|
|
||||||
i = 0;
|
i = 0;
|
||||||
|
/* start at the eap->line1 argument/window/buffer */
|
||||||
#ifdef FEAT_WINDOWS
|
#ifdef FEAT_WINDOWS
|
||||||
wp = firstwin;
|
wp = firstwin;
|
||||||
tp = first_tabpage;
|
tp = first_tabpage;
|
||||||
#endif
|
#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 */
|
/* set pcmark now */
|
||||||
if (eap->cmdidx == CMD_bufdo)
|
if (eap->cmdidx == CMD_bufdo)
|
||||||
goto_buffer(eap, DOBUF_FIRST, FORWARD, 0);
|
goto_buffer(eap, DOBUF_FIRST, FORWARD, i);
|
||||||
else
|
else
|
||||||
setpcmark();
|
setpcmark();
|
||||||
listcmd_busy = TRUE; /* avoids setting pcmark below */
|
listcmd_busy = TRUE; /* avoids setting pcmark below */
|
||||||
@@ -2506,7 +2527,6 @@ ex_listdo(eap)
|
|||||||
}
|
}
|
||||||
if (curwin->w_arg_idx != i)
|
if (curwin->w_arg_idx != i)
|
||||||
break;
|
break;
|
||||||
++i;
|
|
||||||
}
|
}
|
||||||
#ifdef FEAT_WINDOWS
|
#ifdef FEAT_WINDOWS
|
||||||
else if (eap->cmdidx == CMD_windo)
|
else if (eap->cmdidx == CMD_windo)
|
||||||
@@ -2541,6 +2561,8 @@ ex_listdo(eap)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
++i;
|
||||||
|
|
||||||
/* execute the command */
|
/* execute the command */
|
||||||
do_cmdline(eap->arg, eap->getline, eap->cookie,
|
do_cmdline(eap->arg, eap->getline, eap->cookie,
|
||||||
DOCMD_VERBOSE + DOCMD_NOWAIT);
|
DOCMD_VERBOSE + DOCMD_NOWAIT);
|
||||||
@@ -2548,7 +2570,7 @@ ex_listdo(eap)
|
|||||||
if (eap->cmdidx == CMD_bufdo)
|
if (eap->cmdidx == CMD_bufdo)
|
||||||
{
|
{
|
||||||
/* Done? */
|
/* Done? */
|
||||||
if (next_fnum < 0)
|
if (next_fnum < 0 || next_fnum > eap->line2)
|
||||||
break;
|
break;
|
||||||
/* Check if the buffer still exists. */
|
/* Check if the buffer still exists. */
|
||||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||||
@@ -2579,6 +2601,14 @@ ex_listdo(eap)
|
|||||||
do_check_scrollbind(TRUE);
|
do_check_scrollbind(TRUE);
|
||||||
#endif
|
#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;
|
listcmd_busy = FALSE;
|
||||||
}
|
}
|
||||||
|
@@ -90,6 +90,40 @@ STARTTEST
|
|||||||
:only!
|
:only!
|
||||||
:e! test.out
|
:e! test.out
|
||||||
:call append(0, g:lines)
|
: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!
|
:w|qa!
|
||||||
ENDTEST
|
ENDTEST
|
||||||
|
|
||||||
|
@@ -28,3 +28,8 @@ $tabe 2
|
|||||||
$+tabe E16: Invalid range
|
$+tabe E16: Invalid range
|
||||||
0tabm x
|
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
|
||||||
|
@@ -741,6 +741,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
566,
|
||||||
/**/
|
/**/
|
||||||
565,
|
565,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user