diff --git a/7.4.566 b/7.4.566
new file mode 100644
index 0000000..96bb68e
--- /dev/null
+++ b/7.4.566
@@ -0,0 +1,612 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.566
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.4.566
+Problem:    :argdo, :bufdo, :windo and :tabdo don't take a range.
+Solution:   Support the range. (Marcin Szamotulski)
+Files:	    runtime/doc/editing.txt, runtime/doc/tabpage.txt,
+	    runtime/doc/windows.txt, src/ex_cmds.h, src/ex_cmds2.c,
+	    src/testdir/test_command_count.in,
+	    src/testdir/test_command_count.ok
+
+
+*** ../vim-7.4.565/runtime/doc/editing.txt	2014-11-27 16:22:42.734413130 +0100
+--- runtime/doc/editing.txt	2015-01-07 16:09:20.501100753 +0100
+***************
+*** 38,43 ****
+--- 38,44 ----
+  file name.  It can be used with "#" on the command line |:_#| and you can use
+  the |CTRL-^| command to toggle between the current and the alternate file.
+  However, the alternate file name is not changed when |:keepalt| is used.
++ An alternate file name is remembered for each window.
+  
+  							*:keepalt* *:keepa*
+  :keepalt {cmd}		Execute {cmd} while keeping the current alternate file
+***************
+*** 610,616 ****
+  :[count]arga[dd] {name} ..			*:arga* *:argadd* *E479*
+  :[count]arga[dd]
+  			Add the {name}s to the argument list.  When {name} is
+! 			omitted at the current buffer name to the argument
+  			list.
+  			If [count] is omitted, the {name}s are added just
+  			after the current entry in the argument list.
+--- 611,617 ----
+  :[count]arga[dd] {name} ..			*:arga* *:argadd* *E479*
+  :[count]arga[dd]
+  			Add the {name}s to the argument list.  When {name} is
+! 			omitted add the current buffer name to the argument
+  			list.
+  			If [count] is omitted, the {name}s are added just
+  			after the current entry in the argument list.
+***************
+*** 831,838 ****
+  USING THE ARGUMENT LIST
+  
+  						*:argdo*
+! :argdo[!] {cmd}		Execute {cmd} for each file in the argument list.
+! 			It works like doing this: >
+  				:rewind
+  				:{cmd}
+  				:next
+--- 832,840 ----
+  USING THE ARGUMENT LIST
+  
+  						*:argdo*
+! :[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
+***************
+*** 1090,1096 ****
+  
+  :q[uit]!		Quit without writing, also when currently visible
+  			buffers have changes.  Does not exit when this is the
+! 			last window and there are is a changed hidden buffer.
+  			In this case, the first changed hidden buffer becomes
+  			the current buffer.
+  			Use ":qall!" to exit always.
+--- 1092,1098 ----
+  
+  :q[uit]!		Quit without writing, also when currently visible
+  			buffers have changes.  Does not exit when this is the
+! 			last window and there is a changed hidden buffer.
+  			In this case, the first changed hidden buffer becomes
+  			the current buffer.
+  			Use ":qall!" to exit always.
+***************
+*** 1390,1396 ****
+  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.
+  
+  WARNING: If you make a typo when entering the key and then write the file and
+  exit, the text will be lost!
+--- 1392,1398 ----
+  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 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!
+***************
+*** 1426,1438 ****
+  set automatically to the method used when that file was written.  You can
+  change 'cryptmethod' before writing that file to change the method.
+  
+! To set the default method, used for new files, use one of these in your
+! |vimrc| file: >
+! 	set cm=zip
+  	set cm=blowfish2
+! Use the first one if you need to be compatible with Vim 7.2 and older.  Using
+! "blowfish2" is highly recommended if you can use a Vim version that supports
+! it.
+  
+  The message given for reading and writing a file will show "[crypted]" when
+  using zip, "[blowfish]" when using blowfish, etc.
+--- 1428,1438 ----
+  set automatically to the method used when that file was written.  You can
+  change 'cryptmethod' before writing that file to change the method.
+  
+! To set the default method, used for new files, use this in your |vimrc| 
+! file: >
+  	set cm=blowfish2
+! Using "blowfish2" is highly recommended.  Only use another method if you
+! must use an older Vim version that does not support it.
+  
+  The message given for reading and writing a file will show "[crypted]" when
+  using zip, "[blowfish]" when using blowfish, etc.
+***************
+*** 1494,1501 ****
+  - Pkzip uses the same encryption as 'cryptmethod' "zip", and US Govt has no
+    objection to its export.  Pkzip's public file APPNOTE.TXT describes this
+    algorithm in detail.
+! - The implmentation of 'cryptmethod' "blowfish" has a flaw.  It is possible to
+!   crack the first 64 bytes of a file and in some circumstances more of the
+    file. Use of it is not recommended, but it's still the strongest method
+    supported by Vim 7.3 and 7.4.  The "zip" method is even weaker.
+  - Vim originates from the Netherlands.  That is where the sources come from.
+--- 1494,1501 ----
+  - Pkzip uses the same encryption as 'cryptmethod' "zip", and US Govt has no
+    objection to its export.  Pkzip's public file APPNOTE.TXT describes this
+    algorithm in detail.
+! - The implementation of 'cryptmethod' "blowfish" has a flaw.  It is possible
+!   to crack the first 64 bytes of a file and in some circumstances more of the
+    file. Use of it is not recommended, but it's still the strongest method
+    supported by Vim 7.3 and 7.4.  The "zip" method is even weaker.
+  - Vim originates from the Netherlands.  That is where the sources come from.
+*** ../vim-7.4.565/runtime/doc/tabpage.txt	2014-11-27 16:22:42.738413084 +0100
+--- runtime/doc/tabpage.txt	2015-01-07 16:09:20.501100753 +0100
+***************
+*** 206,212 ****
+  		    :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
+  				" list
+  		    :$tabmove	" move the tab page to the end of the tab list
+  <
+--- 206,212 ----
+  		    :tabmove	" move the tab page to the right
+  		    :.tabmove	" as above
+  		    :+tabmove	" as above
+! 		    :0tabmove	" move the tab page to the beginning of the tab
+  				" list
+  		    :$tabmove	" move the tab page to the end of the tab list
+  <
+***************
+*** 224,231 ****
+  LOOPING OVER TAB PAGES:
+  
+  							*:tabd* *:tabdo*
+! :tabd[o] {cmd}	Execute {cmd} in each tab page.
+! 		It works like doing this: >
+  			:tabfirst
+  			:{cmd}
+  			:tabnext
+--- 224,233 ----
+  LOOPING OVER TAB PAGES:
+  
+  							*:tabd* *:tabdo*
+! :[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
+***************
+*** 271,278 ****
+  triggers:
+  	WinLeave		leave current window
+  	TabLeave		leave current tab page
+- 	TabEnter		enter new tab page
+  	WinEnter		enter window in new tab page
+  	BufLeave		leave current buffer
+  	BufEnter		enter new empty buffer
+  
+--- 273,280 ----
+  triggers:
+  	WinLeave		leave current window
+  	TabLeave		leave current tab page
+  	WinEnter		enter window in new tab page
++ 	TabEnter		enter new tab page
+  	BufLeave		leave current buffer
+  	BufEnter		enter new empty buffer
+  
+*** ../vim-7.4.565/runtime/doc/windows.txt	2014-11-30 14:50:12.255356230 +0100
+--- runtime/doc/windows.txt	2015-01-07 16:09:20.501100753 +0100
+***************
+*** 278,293 ****
+  		and there is only one window for the current buffer, and the
+  		buffer was changed, the command fails.
+  		
+! 		(Note: CTRL-Q does not
+! 		work on all terminals).  If [count] is greater than
+! 		the last window number the last window will be closed: >
+  		    :1quit  " quit the first window
+  		    :$quit  " quit the last window
+  		    :9quit  " quit the last window
+  			     " if there are less than 9 windows opened
+  		    :-quit  " quit the previews window
+  		    :+quit  " quit the next window
+! 		    :+2quit " will also work as expected
+  <
+  :q[uit]!
+  :{count}q[uit]!
+--- 278,294 ----
+  		and there is only one window for the current buffer, and the
+  		buffer was changed, the command fails.
+  		
+! 		(Note: CTRL-Q does not work on all terminals).
+! 		
+! 		If [count] is greater than the last window number the last
+! 		window will be closed: >
+  		    :1quit  " quit the first window
+  		    :$quit  " quit the last window
+  		    :9quit  " quit the last window
+  			     " if there are less than 9 windows opened
+  		    :-quit  " quit the previews window
+  		    :+quit  " quit the next window
+! 		    :+2quit " quit the second next window
+  <
+  :q[uit]!
+  :{count}q[uit]!
+***************
+*** 332,340 ****
+  		screen.  For {count} see |:quit| command.
+  		
+  		The buffer becomes hidden (unless there is another window
+! 		editing it or 'bufhidden' is "unload" or "delete").  If the
+! 		window is the last one in the current tab page the tab page is
+! 		closed.  |tab-page| 
+  		
+  		The value of 'hidden' is irrelevant for this command.  Changes
+  		to the buffer are not written and won't get lost, so this is a
+--- 333,341 ----
+  		screen.  For {count} see |:quit| command.
+  		
+  		The buffer becomes hidden (unless there is another window
+! 		editing it or 'bufhidden' is "unload", "delete" or "wipe").
+! 		If the window is the last one in the current tab page the tab
+! 		page is closed.  |tab-page| 
+  		
+  		The value of 'hidden' is irrelevant for this command.  Changes
+  		to the buffer are not written and won't get lost, so this is a
+***************
+*** 697,704 ****
+  8. Do a command in all buffers or windows			*list-repeat*
+  
+  							*:windo*
+! :windo {cmd}		Execute {cmd} in each window.
+! 			It works like doing this: >
+  				CTRL-W t
+  				:{cmd}
+  				CTRL-W w
+--- 698,706 ----
+  8. Do a command in all buffers or windows			*list-repeat*
+  
+  							*:windo*
+! :[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
+***************
+*** 716,723 ****
+  			Also see |:tabdo|, |:argdo| and |:bufdo|.
+  
+  							*:bufdo*
+! :bufdo[!] {cmd}		Execute {cmd} in each buffer in the buffer list.
+! 			It works like doing this: >
+  				:bfirst
+  				:{cmd}
+  				:bnext
+--- 718,727 ----
+  			Also see |:tabdo|, |:argdo| and |:bufdo|.
+  
+  							*:bufdo*
+! :[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
+***************
+*** 763,780 ****
+  
+  CTRL-W ]					*CTRL-W_]* *CTRL-W_CTRL-]*
+  CTRL-W CTRL-]	Split current window in two.  Use identifier under cursor as a
+! 		tag and jump to it in the new upper window.  Make new window N
+! 		high.
+  
+  							*CTRL-W_g]*
+  CTRL-W g ]	Split current window in two.  Use identifier under cursor as a
+  		tag and perform ":tselect" on it in the new upper window.
+  		Make new window N high.
+  
+  							*CTRL-W_g_CTRL-]*
+  CTRL-W g CTRL-]	Split current window in two.  Use identifier under cursor as a
+! 		tag and perform ":tjump" on it in the new upper window.  Make
+! 		new window N high.
+  
+  CTRL-W f					*CTRL-W_f* *CTRL-W_CTRL-F*
+  CTRL-W CTRL-F	Split current window in two.  Edit file name under cursor.
+--- 767,787 ----
+  
+  CTRL-W ]					*CTRL-W_]* *CTRL-W_CTRL-]*
+  CTRL-W CTRL-]	Split current window in two.  Use identifier under cursor as a
+! 		tag and jump to it in the new upper window.
+! 		In Visual mode uses the Visually selected text as a tag.
+! 		Make new window N high.
+  
+  							*CTRL-W_g]*
+  CTRL-W g ]	Split current window in two.  Use identifier under cursor as a
+  		tag and perform ":tselect" on it in the new upper window.
++ 		In Visual mode uses the Visually selected text as a tag.
+  		Make new window N high.
+  
+  							*CTRL-W_g_CTRL-]*
+  CTRL-W g CTRL-]	Split current window in two.  Use identifier under cursor as a
+! 		tag and perform ":tjump" on it in the new upper window.
+! 		In Visual mode uses the Visually selected text as a tag.
+! 		Make new window N high.
+  
+  CTRL-W f					*CTRL-W_f* *CTRL-W_CTRL-F*
+  CTRL-W CTRL-F	Split current window in two.  Edit file name under cursor.
+*** ../vim-7.4.565/src/ex_cmds.h	2015-01-07 15:57:13.145559792 +0100
+--- src/ex_cmds.h	2015-01-07 16:13:24.406265045 +0100
+***************
+*** 133,140 ****
+  			BANG|RANGE|NOTADR|FILES|TRLBAR,
+  			ADDR_ARGUMENTS),
+  EX(CMD_argdo,		"argdo",	ex_listdo,
+! 			BANG|NEEDARG|EXTRA|NOTRLCOM,
+! 			ADDR_LINES),
+  EX(CMD_argedit,		"argedit",	ex_argedit,
+  			BANG|NEEDARG|RANGE|NOTADR|FILE1|EDITCMD|ARGOPT|TRLBAR,
+  			ADDR_ARGUMENTS),
+--- 133,140 ----
+  			BANG|RANGE|NOTADR|FILES|TRLBAR,
+  			ADDR_ARGUMENTS),
+  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|FILE1|EDITCMD|ARGOPT|TRLBAR,
+  			ADDR_ARGUMENTS),
+***************
+*** 220,227 ****
+  			BANG|TRLBAR|CMDWIN,
+  			ADDR_LINES),
+  EX(CMD_bufdo,		"bufdo",	ex_listdo,
+! 			BANG|NEEDARG|EXTRA|NOTRLCOM,
+! 			ADDR_LINES),
+  EX(CMD_bunload,		"bunload",	ex_bunload,
+  			BANG|RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR,
+  			ADDR_LOADED_BUFFERS),
+--- 220,227 ----
+  			BANG|TRLBAR|CMDWIN,
+  			ADDR_LINES),
+  EX(CMD_bufdo,		"bufdo",	ex_listdo,
+! 			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),
+***************
+*** 1384,1391 ****
+  			RANGE|NOTADR|COUNT|BANG|TRLBAR|CMDWIN,
+  			ADDR_TABS),
+  EX(CMD_tabdo,		"tabdo",	ex_listdo,
+! 			NEEDARG|EXTRA|NOTRLCOM,
+! 			ADDR_LINES),
+  EX(CMD_tabedit,		"tabedit",	ex_splitview,
+  			BANG|FILE1|RANGE|NOTADR|ZEROR|EDITCMD|ARGOPT|TRLBAR,
+  			ADDR_TABS),
+--- 1384,1391 ----
+  			RANGE|NOTADR|COUNT|BANG|TRLBAR|CMDWIN,
+  			ADDR_TABS),
+  EX(CMD_tabdo,		"tabdo",	ex_listdo,
+! 			NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
+! 			ADDR_TABS),
+  EX(CMD_tabedit,		"tabedit",	ex_splitview,
+  			BANG|FILE1|RANGE|NOTADR|ZEROR|EDITCMD|ARGOPT|TRLBAR,
+  			ADDR_TABS),
+***************
+*** 1576,1583 ****
+  			NEEDARG|WORD1|RANGE|NOTADR,
+  			ADDR_WINDOWS),
+  EX(CMD_windo,		"windo",	ex_listdo,
+! 			BANG|NEEDARG|EXTRA|NOTRLCOM,
+! 			ADDR_LINES),
+  EX(CMD_winpos,		"winpos",	ex_winpos,
+  			EXTRA|TRLBAR|CMDWIN,
+  			ADDR_LINES),
+--- 1576,1583 ----
+  			NEEDARG|WORD1|RANGE|NOTADR,
+  			ADDR_WINDOWS),
+  EX(CMD_windo,		"windo",	ex_listdo,
+! 			BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
+! 			ADDR_WINDOWS),
+  EX(CMD_winpos,		"winpos",	ex_winpos,
+  			EXTRA|TRLBAR|CMDWIN,
+  			ADDR_LINES),
+*** ../vim-7.4.565/src/ex_cmds2.c	2014-11-19 16:38:01.512679964 +0100
+--- src/ex_cmds2.c	2015-01-07 16:12:42.526751920 +0100
+***************
+*** 2472,2486 ****
+  				    | (eap->forceit ? CCGD_FORCEIT : 0)
+  				    | CCGD_EXCMD))
+      {
+- 	/* start at the first argument/window/buffer */
+  	i = 0;
+  #ifdef FEAT_WINDOWS
+  	wp = firstwin;
+  	tp = first_tabpage;
+  #endif
+  	/* set pcmark now */
+  	if (eap->cmdidx == CMD_bufdo)
+! 	    goto_buffer(eap, DOBUF_FIRST, FORWARD, 0);
+  	else
+  	    setpcmark();
+  	listcmd_busy = TRUE;	    /* avoids setting pcmark below */
+--- 2472,2507 ----
+  				    | (eap->forceit ? CCGD_FORCEIT : 0)
+  				    | CCGD_EXCMD))
+      {
+  	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, i);
+  	else
+  	    setpcmark();
+  	listcmd_busy = TRUE;	    /* avoids setting pcmark below */
+***************
+*** 2506,2512 ****
+  		}
+  		if (curwin->w_arg_idx != i)
+  		    break;
+- 		++i;
+  	    }
+  #ifdef FEAT_WINDOWS
+  	    else if (eap->cmdidx == CMD_windo)
+--- 2527,2532 ----
+***************
+*** 2541,2546 ****
+--- 2561,2568 ----
+  		    }
+  	    }
+  
++ 	    ++i;
++ 
+  	    /* execute the command */
+  	    do_cmdline(eap->arg, eap->getline, eap->cookie,
+  						DOCMD_VERBOSE + DOCMD_NOWAIT);
+***************
+*** 2548,2554 ****
+  	    if (eap->cmdidx == CMD_bufdo)
+  	    {
+  		/* Done? */
+! 		if (next_fnum < 0)
+  		    break;
+  		/* Check if the buffer still exists. */
+  		for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+--- 2570,2576 ----
+  	    if (eap->cmdidx == CMD_bufdo)
+  	    {
+  		/* Done? */
+! 		if (next_fnum < 0 || next_fnum > eap->line2)
+  		    break;
+  		/* Check if the buffer still exists. */
+  		for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+***************
+*** 2579,2584 ****
+--- 2601,2614 ----
+  		    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;
+      }
+*** ../vim-7.4.565/src/testdir/test_command_count.in	2015-01-07 15:57:13.145559792 +0100
+--- src/testdir/test_command_count.in	2015-01-07 16:19:57.217698877 +0100
+***************
+*** 90,95 ****
+--- 90,129 ----
+  :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
+  
+*** ../vim-7.4.565/src/testdir/test_command_count.ok	2015-01-07 15:57:13.145559792 +0100
+--- src/testdir/test_command_count.ok	2015-01-07 16:19:51.805761782 +0100
+***************
+*** 28,30 ****
+--- 28,35 ----
+  $+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
+*** ../vim-7.4.565/src/version.c	2015-01-07 15:57:13.149559746 +0100
+--- src/version.c	2015-01-07 16:50:24.620511525 +0100
+***************
+*** 743,744 ****
+--- 743,746 ----
+  {   /* Add new patch number below this line */
++ /**/
++     566,
+  /**/
+
+-- 
+ERROR 047: Keyboard not found.  Press RETURN to continue.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\  an exciting new programming language -- http://www.Zimbu.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///