To: vim_dev@googlegroups.com
Subject: Patch 7.4.530
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.530
Problem:    Many commands take a count or range that is not using line
	    numbers.
Solution:   For each command specify what kind of count it uses.  For windows,
	    buffers and arguments have "$" and "." have a relevant meaning.
	    (Marcin Szamotulski)
Files:	    runtime/doc/editing.txt, runtime/doc/tabpage.txt,
	    runtime/doc/windows.txt, src/Makefile, src/ex_cmds.h,
	    src/ex_docmd.c, src/testdir/Make_amiga.mak
	    src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
	    src/testdir/Make_os2.mak, src/testdir/Make_vms.mms,
	    src/testdir/Makefile, src/testdir/test_argument_count.in,
	    src/testdir/test_argument_count.ok,
	    src/testdir/test_close_count.in, src/testdir/test_close_count.ok,
	    src/window.c


*** ../vim-7.4.529/runtime/doc/editing.txt	2014-08-10 13:34:59.048785459 +0200
--- runtime/doc/editing.txt	2014-11-27 14:36:09.312502238 +0100
***************
*** 608,614 ****
  			{not in Vi}
  
  :[count]arga[dd] {name} ..			*:arga* *:argadd* *E479*
! 			Add the {name}s to the argument list.
  			If [count] is omitted, the {name}s are added just
  			after the current entry in the argument list.
  			Otherwise they are added after the [count]'th file.
--- 609,618 ----
  			{not in Vi}
  
  :[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.
  			Otherwise they are added after the [count]'th file.
***************
*** 618,624 ****
  				:argadd x	a b x c
  				:0argadd x	x a b c
  				:1argadd x	a x b c
! 				:99argadd x	a b c x
  			There is no check for duplicates, it is possible to
  			add a file to the argument list twice.
  			The currently edited file is not changed.
--- 622,629 ----
  				:argadd x	a b x c
  				:0argadd x	x a b c
  				:1argadd x	a x b c
! 				:$argadd x	a b c x
! 				:+2argadd y	a b c x y
  			There is no check for duplicates, it is possible to
  			add a file to the argument list twice.
  			The currently edited file is not changed.
***************
*** 640,650 ****
  <			{not in Vi} {not available when compiled without the
  			|+listcmds| feature}
  
! :{range}argd[elete]	Delete the {range} files from the argument list.
  			When the last number in the range is too high, up to
! 			the last argument is deleted.  Example: >
! 				:10,1000argdel
! <			Deletes arguments 10 and further, keeping 1-9.
  			{not in Vi} {not available when compiled without the
  			|+listcmds| feature}
  
--- 645,663 ----
  <			{not in Vi} {not available when compiled without the
  			|+listcmds| feature}
  
! :[range]argd[elete]	Delete the {range} files from the argument list.
! 			Example: >
! 				:10,$argdel
! <			Deletes arguments 10 and further, keeping 1-9. >
! 				:$argd
! <			Deletes just the last one. >
! 				:argd
! 				:.argd
! <			Deletes the current argument. >
! 				:%argd
! <			Removes all the files from the arglist.
  			When the last number in the range is too high, up to
! 			the last argument is deleted.
  			{not in Vi} {not available when compiled without the
  			|+listcmds| feature}
  
***************
*** 1076,1084 ****
  			the last file in the argument list has not been
  			edited.  See |:confirm| and 'confirm'.  {not in Vi}
  
! :q[uit]!		Quit without writing, also when visible buffers have
! 			changes.  Does not exit when there are changed hidden
! 			buffers.  Use ":qall!" to exit always.
  
  :cq[uit]		Quit always, without writing, and return an error
  			code.  See |:cq|.  Used for Manx's QuickFix mode (see
--- 1089,1100 ----
  			the last file in the argument list has not been
  			edited.  See |:confirm| and 'confirm'.  {not in Vi}
  
! :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.
  
  :cq[uit]		Quit always, without writing, and return an error
  			code.  See |:cq|.  Used for Manx's QuickFix mode (see
*** ../vim-7.4.529/runtime/doc/tabpage.txt	2013-08-10 13:25:01.000000000 +0200
--- runtime/doc/tabpage.txt	2014-11-27 14:42:13.340492837 +0100
***************
*** 61,76 ****
  :[count]tabe[dit]				*:tabe* *:tabedit* *:tabnew*
  :[count]tabnew
  		Open a new tab page with an empty window, after the current
! 		tab page.  For [count] see |:tab| below.
  
  :[count]tabe[dit] [++opt] [+cmd] {file}
  :[count]tabnew [++opt] [+cmd] {file}
  		Open a new tab page and edit {file}, like with |:edit|.
! 		For [count] see |:tab| below.
  
  :[count]tabf[ind] [++opt] [+cmd] {file}			*:tabf* *:tabfind*
  		Open a new tab page and edit {file} in 'path', like with
! 		|:find|.  For [count] see |:tab| below.
  		{not available when the |+file_in_path| feature was disabled
  		at compile time}
  
--- 61,85 ----
  :[count]tabe[dit]				*:tabe* *:tabedit* *:tabnew*
  :[count]tabnew
  		Open a new tab page with an empty window, after the current
! 		tab page.  If [count] is given the new tab page appears after
! 		the tab page [count] otherwise the new tab page will appear
! 		after the current one. >
! 		    :tabnew	" opens tabpage after the current one
! 		    :.tabnew	" as above
! 		    :+tabnew	" opens tabpage after the next tab page
! 				" note: it is one further than :tabnew
! 		    :-tabnew	" opens tabpage before the current one
! 		    :0tabnew	" opens tabpage before the first one
! 		    :$tabnew	" opens tabpage after the last one
  
  :[count]tabe[dit] [++opt] [+cmd] {file}
  :[count]tabnew [++opt] [+cmd] {file}
  		Open a new tab page and edit {file}, like with |:edit|.
! 		For [count] see |:tabnew| above.
  
  :[count]tabf[ind] [++opt] [+cmd] {file}			*:tabf* *:tabfind*
  		Open a new tab page and edit {file} in 'path', like with
! 		|:find|.  For [count] see |:tabnew| above.
  		{not available when the |+file_in_path| feature was disabled
  		at compile time}
  
***************
*** 110,121 ****
  		- When 'hidden' is not set, [!] is not used, a buffer has
  		  changes, and there is no other window on this buffer.
  		Changes to the buffer are not written and won't get lost, so
! 		this is a "safe" command.
  
  :tabc[lose][!] {count}
  		Close tab page {count}.  Fails in the same way as `:tabclose`
! 		above.
! 
  							*:tabo* *:tabonly*
  :tabo[nly][!]	Close all other tab pages.
  		When the 'hidden' option is set, all buffers in closed windows
--- 119,136 ----
  		- When 'hidden' is not set, [!] is not used, a buffer has
  		  changes, and there is no other window on this buffer.
  		Changes to the buffer are not written and won't get lost, so
! 		this is a "safe" command. >
! 		    :tabclose	    " close the current tab page
  
+ :{count}tabc[lose][!]
  :tabc[lose][!] {count}
  		Close tab page {count}.  Fails in the same way as `:tabclose`
! 		above. >
! 		    :-tabclose	    " close the previous tab page
! 		    :+tabclose	    " close the next tab page
! 		    :1tabclose	    " close the first tab page
! 		    :$tabclose	    " close the last tab page
! <
  							*:tabo* *:tabonly*
  :tabo[nly][!]	Close all other tab pages.
  		When the 'hidden' option is set, all buffers in closed windows
***************
*** 124,130 ****
  		modified buffers are written.  Otherwise, windows that have
  		buffers that are modified are not removed, unless the [!] is
  		given, then they become hidden.  But modified buffers are
! 		never abandoned, so changes cannot get lost.
  
  
  SWITCHING TO ANOTHER TAB PAGE:
--- 139,155 ----
  		modified buffers are written.  Otherwise, windows that have
  		buffers that are modified are not removed, unless the [!] is
  		given, then they become hidden.  But modified buffers are
! 		never abandoned, so changes cannot get lost. >
! 		    :tabonly	    " close all tab pages except the current
! 
! :{count}tabo[nly][!]
! 		Close all tab pages except the {count}th one. >
! 		    :.tabonly	    " one
! 		    :-tabonly	    " close all tab pages except the previous
! 				    " one
! 		    :+tabonly	    " close all tab pages except the next one
! 		    :1tabonly	    " close all tab pages except the first one
! 		    :$tabonly	    " close all tab pages except the last one
  
  
  SWITCHING TO ANOTHER TAB PAGE:
***************
*** 176,182 ****
  :[N]tabm[ove]
  		Move the current tab page to after tab page N.  Use zero to
  		make the current tab page the first one.  Without N the tab
! 		page is made the last one.
  
  :tabm[ove] +[N]
  :tabm[ove] -[N]
--- 201,215 ----
  :[N]tabm[ove]
  		Move the current tab page to after tab page N.  Use zero to
  		make the current tab page the first one.  Without N the tab
! 		page is made the last one. >
! 		    :-tabmove	" move the tab page to the left
! 		    :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
! <
  
  :tabm[ove] +[N]
  :tabm[ove] -[N]
*** ../vim-7.4.529/runtime/doc/windows.txt	2014-09-19 20:07:22.542449677 +0200
--- runtime/doc/windows.txt	2014-11-27 14:52:42.261566503 +0100
***************
*** 263,290 ****
  Closing a window
  ----------------
  
  CTRL-W q						*CTRL-W_q*
  CTRL-W CTRL-Q						*CTRL-W_CTRL-Q*
! :q[uit]		Quit current window.  When quitting the last window (not
! 		counting a help window), exit Vim.
  		When 'hidden' is set, and there is only one window for the
! 		current buffer, it becomes hidden.
! 		When 'hidden' is not set, 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)
! 
! :q[uit]!	Quit current window.  If this was the last window for a buffer,
! 		any changes to that buffer are lost.  When quitting the last
! 		window (not counting help windows), exit Vim.  The contents of
! 		the buffer are lost, even when 'hidden' is set.
  
  CTRL-W c					*CTRL-W_c* *:clo* *:close*
! :clo[se][!]	Close current window.  When the 'hidden' option is set, or
! 		when the buffer was changed and the [!] is used, the buffer
! 		becomes hidden (unless there is another window editing it).
  		When there is only one window in the current tab page and
  		there is another tab page, this closes the current tab page.
  		|tab-page|.
  		This command fails when:			*E444*
  		- There is only one window on the screen.
  		- When 'hidden' is not set, [!] is not used, the buffer has
--- 263,318 ----
  Closing a window
  ----------------
  
+ :q[uit]
+ :{count}q[uit]
  CTRL-W q						*CTRL-W_q*
  CTRL-W CTRL-Q						*CTRL-W_CTRL-Q*
! 		Without {count}: Quit the current window.  If {count} is
! 		given quit the {count} window.
! 
! 		When quitting the last window (not counting a help window),
! 		exit Vim.
! 		
  		When 'hidden' is set, and there is only one window for the
! 		current buffer, it becomes hidden.  When 'hidden' is not set,
! 		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]!
! 		Without {count}: Quit the current window.  If {count} is
! 		given quit the {count} window.
! 
! 		If this was the last window for a buffer, any changes to that
! 		buffer are lost.  When quitting the last window (not counting
! 		help windows), exit Vim.  The contents of the buffer are lost,
! 		even when 'hidden' is set.
  
+ :clo[se][!]
+ :{count}clo[se][!]
  CTRL-W c					*CTRL-W_c* *:clo* *:close*
! 		Without {count}: Close the current window.  If {count} is
! 		given close the {count} window.
! 
! 		When the 'hidden' option is set, or when the buffer was
! 		changed and the [!] is used, the buffer becomes hidden (unless
! 		there is another window editing it).
! 		
  		When there is only one window in the current tab page and
  		there is another tab page, this closes the current tab page.
  		|tab-page|.
+ 
  		This command fails when:			*E444*
  		- There is only one window on the screen.
  		- When 'hidden' is not set, [!] is not used, the buffer has
***************
*** 298,311 ****
  		command.
  
  							*:hide*
! :hid[e]		Quit current window, unless it is the last window on the
! 		screen.  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 "safe" command.
  
  :hid[e] {cmd}	Execute {cmd} with 'hidden' is set.  The previous value of
  		'hidden' is restored after {cmd} has been executed.
--- 326,344 ----
  		command.
  
  							*:hide*
! :hid[e]
! :{count}hid[e]
! 		Quit the current window, unless it is the last window on the
! 		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
! 		"safe" command.
  
  :hid[e] {cmd}	Execute {cmd} with 'hidden' is set.  The previous value of
  		'hidden' is restored after {cmd} has been executed.
***************
*** 314,325 ****
  <		This will edit "Makefile", and hide the current buffer if it
  		has any changes.
  
  CTRL-W o						*CTRL-W_o* *E445*
  CTRL-W CTRL-O					*CTRL-W_CTRL-O* *:on* *:only*
! :on[ly][!]	Make the current window the only one on the screen.  All other
! 		windows are closed.
  		When the 'hidden' option is set, all buffers in closed windows
  		become hidden.
  		When 'hidden' is not set, and the 'autowrite' option is set,
  		modified buffers are written.  Otherwise, windows that have
  		buffers that are modified are not removed, unless the [!] is
--- 347,362 ----
  <		This will edit "Makefile", and hide the current buffer if it
  		has any changes.
  
+ :on[ly][!]
+ :{count}on[ly][!]
  CTRL-W o						*CTRL-W_o* *E445*
  CTRL-W CTRL-O					*CTRL-W_CTRL-O* *:on* *:only*
! 		Make the current window the only one on the screen.  All other
! 		windows are closed.  For {count} see |:quit| command.
! 		
  		When the 'hidden' option is set, all buffers in closed windows
  		become hidden.
+ 		
  		When 'hidden' is not set, and the 'autowrite' option is set,
  		modified buffers are written.  Otherwise, windows that have
  		buffers that are modified are not removed, unless the [!] is
*** ../vim-7.4.529/src/Makefile	2014-11-12 15:45:16.591789174 +0100
--- src/Makefile	2014-11-27 14:23:18.260995560 +0100
***************
*** 1890,1899 ****
  	done
  
  # Run individual test, assuming that Vim was already compiled.
! test1 test2 test3 test4 test5 test6 test7 test8 test9 \
  	test_autoformat_join \
  	test_breakindent \
  	test_changelist \
  	test_eval \
  	test_insertcount \
  	test_listlbr \
--- 1890,1901 ----
  	done
  
  # Run individual test, assuming that Vim was already compiled.
! test1 \
! 	test_argument_count \
  	test_autoformat_join \
  	test_breakindent \
  	test_changelist \
+ 	test_close_count \
  	test_eval \
  	test_insertcount \
  	test_listlbr \
***************
*** 1904,1909 ****
--- 1906,1912 ----
  	test_signs \
  	test_utf8 \
  	test_writefile \
+ 	test2 test3 test4 test5 test6 test7 test8 test9 \
  	test10 test11 test12 test13 test14 test15 test16 test17 test18 test19 \
  	test20 test21 test22 test23 test24 test25 test26 test27 test28 test29 \
  	test30 test31 test32 test33 test34 test35 test36 test37 test38 test39 \
*** ../vim-7.4.529/src/ex_cmds.h	2014-10-21 20:01:54.986287762 +0200
--- src/ex_cmds.h	2014-11-27 14:56:55.146781659 +0100
***************
*** 58,63 ****
--- 58,71 ----
  #define WORD1	(EXTRA | NOSPC)	/* one extra word allowed */
  #define FILE1	(FILES | NOSPC)	/* 1 file allowed, defaults to current file */
  
+ /* values for cmd_addr_type */
+ #define ADDR_LINES		0
+ #define ADDR_WINDOWS		1
+ #define ADDR_ARGUMENTS		2
+ #define ADDR_LOADED_BUFFERS	3
+ #define ADDR_UNLOADED_BUFFERS	4
+ #define ADDR_TABS		5
+ 
  #ifndef DO_DECLARE_EXCMD
  typedef struct exarg exarg_T;
  #endif
***************
*** 74,80 ****
  # undef EX	    /* just in case */
  #endif
  #ifdef DO_DECLARE_EXCMD
! # define EX(a, b, c, d)  {(char_u *)b, c, (long_u)(d)}
  
  typedef void (*ex_func_T) __ARGS((exarg_T *eap));
  
--- 82,88 ----
  # undef EX	    /* just in case */
  #endif
  #ifdef DO_DECLARE_EXCMD
! # define EX(a, b, c, d, e)  {(char_u *)b, c, (long_u)(d), e}
  
  typedef void (*ex_func_T) __ARGS((exarg_T *eap));
  
***************
*** 83,1146 ****
      char_u	*cmd_name;	/* name of the command */
      ex_func_T   cmd_func;	/* function for this command */
      long_u	cmd_argt;	/* flags declared above */
  }
  # if defined(FEAT_GUI_W16)
  _far
  # endif
  cmdnames[] =
  #else
! # define EX(a, b, c, d)  a
  enum CMD_index
  #endif
  {
  EX(CMD_append,		"append",	ex_append,
! 			BANG|RANGE|ZEROR|TRLBAR|CMDWIN|MODIFY),
  EX(CMD_abbreviate,	"abbreviate",	ex_abbreviate,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_abclear,		"abclear",	ex_abclear,
! 			EXTRA|TRLBAR|CMDWIN),
  EX(CMD_aboveleft,	"aboveleft",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM),
  EX(CMD_all,		"all",		ex_all,
! 			BANG|RANGE|NOTADR|COUNT|TRLBAR),
  EX(CMD_amenu,		"amenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_anoremenu,	"anoremenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_args,		"args",		ex_args,
! 			BANG|FILES|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_argadd,		"argadd",	ex_argadd,
! 			BANG|NEEDARG|RANGE|NOTADR|ZEROR|FILES|TRLBAR),
  EX(CMD_argdelete,	"argdelete",	ex_argdelete,
! 			BANG|RANGE|NOTADR|FILES|TRLBAR),
  EX(CMD_argdo,		"argdo",	ex_listdo,
! 			BANG|NEEDARG|EXTRA|NOTRLCOM),
  EX(CMD_argedit,		"argedit",	ex_argedit,
! 			BANG|NEEDARG|RANGE|NOTADR|FILE1|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_argglobal,	"argglobal",	ex_args,
! 			BANG|FILES|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_arglocal,	"arglocal",	ex_args,
! 			BANG|FILES|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_argument,	"argument",	ex_argument,
! 			BANG|RANGE|NOTADR|COUNT|EXTRA|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_ascii,		"ascii",	do_ascii,
! 			TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_autocmd,		"autocmd",	ex_autocmd,
! 			BANG|EXTRA|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_augroup,		"augroup",	ex_autocmd,
! 			BANG|WORD1|TRLBAR|CMDWIN),
  EX(CMD_aunmenu,		"aunmenu",	ex_menu,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_buffer,		"buffer",	ex_buffer,
! 			BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|EDITCMD|TRLBAR),
  EX(CMD_bNext,		"bNext",	ex_bprevious,
! 			BANG|RANGE|NOTADR|COUNT|EDITCMD|TRLBAR),
  EX(CMD_ball,		"ball",		ex_buffer_all,
! 			RANGE|NOTADR|COUNT|TRLBAR),
  EX(CMD_badd,		"badd",		ex_edit,
! 			NEEDARG|FILE1|EDITCMD|TRLBAR|CMDWIN),
  EX(CMD_bdelete,		"bdelete",	ex_bunload,
! 			BANG|RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR),
  EX(CMD_behave,		"behave",	ex_behave,
! 			NEEDARG|WORD1|TRLBAR|CMDWIN),
  EX(CMD_belowright,	"belowright",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM),
  EX(CMD_bfirst,		"bfirst",	ex_brewind,
! 			BANG|RANGE|NOTADR|EDITCMD|TRLBAR),
  EX(CMD_blast,		"blast",	ex_blast,
! 			BANG|RANGE|NOTADR|EDITCMD|TRLBAR),
  EX(CMD_bmodified,	"bmodified",	ex_bmodified,
! 			BANG|RANGE|NOTADR|COUNT|EDITCMD|TRLBAR),
  EX(CMD_bnext,		"bnext",	ex_bnext,
! 			BANG|RANGE|NOTADR|COUNT|EDITCMD|TRLBAR),
  EX(CMD_botright,	"botright",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM),
  EX(CMD_bprevious,	"bprevious",	ex_bprevious,
! 			BANG|RANGE|NOTADR|COUNT|EDITCMD|TRLBAR),
  EX(CMD_brewind,		"brewind",	ex_brewind,
! 			BANG|RANGE|NOTADR|EDITCMD|TRLBAR),
  EX(CMD_break,		"break",	ex_break,
! 			TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_breakadd,	"breakadd",	ex_breakadd,
! 			EXTRA|TRLBAR|CMDWIN),
  EX(CMD_breakdel,	"breakdel",	ex_breakdel,
! 			EXTRA|TRLBAR|CMDWIN),
  EX(CMD_breaklist,	"breaklist",	ex_breaklist,
! 			EXTRA|TRLBAR|CMDWIN),
  EX(CMD_browse,		"browse",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM|CMDWIN),
  EX(CMD_buffers,		"buffers",	buflist_list,
! 			BANG|TRLBAR|CMDWIN),
  EX(CMD_bufdo,		"bufdo",	ex_listdo,
! 			BANG|NEEDARG|EXTRA|NOTRLCOM),
  EX(CMD_bunload,		"bunload",	ex_bunload,
! 			BANG|RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR),
  EX(CMD_bwipeout,	"bwipeout",	ex_bunload,
! 			BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|TRLBAR),
  EX(CMD_change,		"change",	ex_change,
! 			BANG|WHOLEFOLD|RANGE|COUNT|TRLBAR|CMDWIN|MODIFY),
  EX(CMD_cNext,		"cNext",	ex_cnext,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG),
  EX(CMD_cNfile,		"cNfile",	ex_cnext,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG),
  EX(CMD_cabbrev,		"cabbrev",	ex_abbreviate,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_cabclear,	"cabclear",	ex_abclear,
! 			EXTRA|TRLBAR|CMDWIN),
  EX(CMD_caddbuffer,	"caddbuffer",	ex_cbuffer,
! 			RANGE|NOTADR|WORD1|TRLBAR),
  EX(CMD_caddexpr,	"caddexpr",	ex_cexpr,
! 			NEEDARG|WORD1|NOTRLCOM|TRLBAR),
  EX(CMD_caddfile,	"caddfile",	ex_cfile,
! 			TRLBAR|FILE1),
  EX(CMD_call,		"call",		ex_call,
! 			RANGE|NEEDARG|EXTRA|NOTRLCOM|SBOXOK|CMDWIN),
  EX(CMD_catch,		"catch",	ex_catch,
! 			EXTRA|SBOXOK|CMDWIN),
  EX(CMD_cbuffer,		"cbuffer",	ex_cbuffer,
! 			BANG|RANGE|NOTADR|WORD1|TRLBAR),
  EX(CMD_cc,		"cc",		ex_cc,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG),
  EX(CMD_cclose,		"cclose",	ex_cclose,
! 			RANGE|NOTADR|COUNT|TRLBAR),
  EX(CMD_cd,		"cd",		ex_cd,
! 			BANG|FILE1|TRLBAR|CMDWIN),
  EX(CMD_center,		"center",	ex_align,
! 			TRLBAR|RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY),
  EX(CMD_cexpr,		"cexpr",	ex_cexpr,
! 			NEEDARG|WORD1|NOTRLCOM|TRLBAR|BANG),
  EX(CMD_cfile,		"cfile",	ex_cfile,
! 			TRLBAR|FILE1|BANG),
  EX(CMD_cfirst,		"cfirst",	ex_cc,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG),
  EX(CMD_cgetfile,	"cgetfile",	ex_cfile,
! 			TRLBAR|FILE1),
  EX(CMD_cgetbuffer,	"cgetbuffer",	ex_cbuffer,
! 			RANGE|NOTADR|WORD1|TRLBAR),
  EX(CMD_cgetexpr,	"cgetexpr",	ex_cexpr,
! 			NEEDARG|WORD1|NOTRLCOM|TRLBAR),
  EX(CMD_chdir,		"chdir",	ex_cd,
! 			BANG|FILE1|TRLBAR|CMDWIN),
  EX(CMD_changes,		"changes",	ex_changes,
! 			TRLBAR|CMDWIN),
  EX(CMD_checkpath,	"checkpath",	ex_checkpath,
! 			TRLBAR|BANG|CMDWIN),
  EX(CMD_checktime,	"checktime",	ex_checktime,
! 			RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR),
  EX(CMD_clist,		"clist",	qf_list,
! 			BANG|EXTRA|TRLBAR|CMDWIN),
  EX(CMD_clast,		"clast",	ex_cc,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG),
  EX(CMD_close,		"close",	ex_close,
! 			BANG|TRLBAR|CMDWIN),
  EX(CMD_cmap,		"cmap",		ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_cmapclear,	"cmapclear",	ex_mapclear,
! 			EXTRA|TRLBAR|CMDWIN),
  EX(CMD_cmenu,		"cmenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_cnext,		"cnext",	ex_cnext,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG),
  EX(CMD_cnewer,		"cnewer",	qf_age,
! 			RANGE|NOTADR|COUNT|TRLBAR),
  EX(CMD_cnfile,		"cnfile",	ex_cnext,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG),
  EX(CMD_cnoremap,	"cnoremap",	ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_cnoreabbrev,	"cnoreabbrev",	ex_abbreviate,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_cnoremenu,	"cnoremenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_copy,		"copy",		ex_copymove,
! 			RANGE|WHOLEFOLD|EXTRA|TRLBAR|CMDWIN|MODIFY),
  EX(CMD_colder,		"colder",	qf_age,
! 			RANGE|NOTADR|COUNT|TRLBAR),
  EX(CMD_colorscheme,	"colorscheme",	ex_colorscheme,
! 			WORD1|TRLBAR|CMDWIN),
  EX(CMD_command,		"command",	ex_command,
! 			EXTRA|BANG|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_comclear,	"comclear",	ex_comclear,
! 			TRLBAR|CMDWIN),
  EX(CMD_compiler,	"compiler",	ex_compiler,
! 			BANG|TRLBAR|WORD1|CMDWIN),
  EX(CMD_continue,	"continue",	ex_continue,
! 			TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_confirm,		"confirm",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM|CMDWIN),
  EX(CMD_copen,		"copen",	ex_copen,
! 			RANGE|NOTADR|COUNT|TRLBAR),
  EX(CMD_cprevious,	"cprevious",	ex_cnext,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG),
  EX(CMD_cpfile,		"cpfile",	ex_cnext,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG),
  EX(CMD_cquit,		"cquit",	ex_cquit,
! 			TRLBAR|BANG),
  EX(CMD_crewind,		"crewind",	ex_cc,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG),
  EX(CMD_cscope,		"cscope",	do_cscope,
! 			EXTRA|NOTRLCOM|XFILE),
  EX(CMD_cstag,		"cstag",	do_cstag,
! 			BANG|TRLBAR|WORD1),
  EX(CMD_cunmap,		"cunmap",	ex_unmap,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_cunabbrev,	"cunabbrev",	ex_abbreviate,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_cunmenu,		"cunmenu",	ex_menu,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_cwindow,		"cwindow",	ex_cwindow,
! 			RANGE|NOTADR|COUNT|TRLBAR),
  EX(CMD_delete,		"delete",	ex_operators,
! 			RANGE|WHOLEFOLD|REGSTR|COUNT|TRLBAR|CMDWIN|MODIFY),
  EX(CMD_delmarks,	"delmarks",	ex_delmarks,
! 			BANG|EXTRA|TRLBAR|CMDWIN),
  EX(CMD_debug,		"debug",	ex_debug,
! 			NEEDARG|EXTRA|NOTRLCOM|SBOXOK|CMDWIN),
  EX(CMD_debuggreedy,	"debuggreedy",	ex_debuggreedy,
! 			RANGE|NOTADR|ZEROR|TRLBAR|CMDWIN),
  EX(CMD_delcommand,	"delcommand",	ex_delcommand,
! 			NEEDARG|WORD1|TRLBAR|CMDWIN),
  EX(CMD_delfunction,	"delfunction",	ex_delfunction,
! 			NEEDARG|WORD1|CMDWIN),
  EX(CMD_display,		"display",	ex_display,
! 			EXTRA|NOTRLCOM|TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_diffupdate,	"diffupdate",	ex_diffupdate,
! 			BANG|TRLBAR),
  EX(CMD_diffget,		"diffget",	ex_diffgetput,
! 			RANGE|EXTRA|TRLBAR|MODIFY),
  EX(CMD_diffoff,		"diffoff",	ex_diffoff,
! 			BANG|TRLBAR),
  EX(CMD_diffpatch,	"diffpatch",	ex_diffpatch,
! 			EXTRA|FILE1|TRLBAR|MODIFY),
  EX(CMD_diffput,		"diffput",	ex_diffgetput,
! 			RANGE|EXTRA|TRLBAR),
  EX(CMD_diffsplit,	"diffsplit",	ex_diffsplit,
! 			EXTRA|FILE1|TRLBAR),
  EX(CMD_diffthis,	"diffthis",	ex_diffthis,
! 			TRLBAR),
  EX(CMD_digraphs,	"digraphs",	ex_digraphs,
! 			EXTRA|TRLBAR|CMDWIN),
  EX(CMD_djump,		"djump",	ex_findpat,
! 			BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA),
  EX(CMD_dlist,		"dlist",	ex_findpat,
! 			BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA|CMDWIN),
  EX(CMD_doautocmd,	"doautocmd",	ex_doautocmd,
! 			EXTRA|TRLBAR|CMDWIN),
  EX(CMD_doautoall,	"doautoall",	ex_doautoall,
! 			EXTRA|TRLBAR|CMDWIN),
  EX(CMD_drop,		"drop",		ex_drop,
! 			FILES|EDITCMD|NEEDARG|ARGOPT|TRLBAR),
  EX(CMD_dsearch,		"dsearch",	ex_findpat,
! 			BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA|CMDWIN),
  EX(CMD_dsplit,		"dsplit",	ex_findpat,
! 			BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA),
  EX(CMD_edit,		"edit",		ex_edit,
! 			BANG|FILE1|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_earlier,		"earlier",	ex_later,
! 			TRLBAR|EXTRA|NOSPC|CMDWIN),
  EX(CMD_echo,		"echo",		ex_echo,
! 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN),
  EX(CMD_echoerr,		"echoerr",	ex_execute,
! 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN),
  EX(CMD_echohl,		"echohl",	ex_echohl,
! 			EXTRA|TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_echomsg,		"echomsg",	ex_execute,
! 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN),
  EX(CMD_echon,		"echon",	ex_echo,
! 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN),
  EX(CMD_else,		"else",		ex_else,
! 			TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_elseif,		"elseif",	ex_else,
! 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN),
  EX(CMD_emenu,		"emenu",	ex_emenu,
! 			NEEDARG|EXTRA|TRLBAR|NOTRLCOM|RANGE|NOTADR|CMDWIN),
  EX(CMD_endif,		"endif",	ex_endif,
! 			TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_endfunction,	"endfunction",	ex_endfunction,
! 			TRLBAR|CMDWIN),
  EX(CMD_endfor,		"endfor",	ex_endwhile,
! 			TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_endtry,		"endtry",	ex_endtry,
! 			TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_endwhile,	"endwhile",	ex_endwhile,
! 			TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_enew,		"enew",		ex_edit,
! 			BANG|TRLBAR),
  EX(CMD_ex,		"ex",		ex_edit,
! 			BANG|FILE1|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_execute,		"execute",	ex_execute,
! 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN),
  EX(CMD_exit,		"exit",		ex_exit,
! 			RANGE|WHOLEFOLD|BANG|FILE1|ARGOPT|DFLALL|TRLBAR|CMDWIN),
  EX(CMD_exusage,		"exusage",	ex_exusage,
! 			TRLBAR),
  EX(CMD_file,		"file",		ex_file,
! 			RANGE|NOTADR|ZEROR|BANG|FILE1|TRLBAR),
  EX(CMD_files,		"files",	buflist_list,
! 			BANG|TRLBAR|CMDWIN),
  EX(CMD_filetype,	"filetype",	ex_filetype,
! 			EXTRA|TRLBAR|CMDWIN),
  EX(CMD_find,		"find",		ex_find,
! 			RANGE|NOTADR|BANG|FILE1|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_finally,		"finally",	ex_finally,
! 			TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_finish,		"finish",	ex_finish,
! 			TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_first,		"first",	ex_rewind,
! 			EXTRA|BANG|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_fixdel,		"fixdel",	do_fixdel,
! 			TRLBAR|CMDWIN),
  EX(CMD_fold,		"fold",		ex_fold,
! 			RANGE|WHOLEFOLD|TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_foldclose,	"foldclose",	ex_foldopen,
! 			RANGE|BANG|WHOLEFOLD|TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_folddoopen,	"folddoopen",	ex_folddo,
! 			RANGE|DFLALL|NEEDARG|EXTRA|NOTRLCOM),
  EX(CMD_folddoclosed,	"folddoclosed",	ex_folddo,
! 			RANGE|DFLALL|NEEDARG|EXTRA|NOTRLCOM),
  EX(CMD_foldopen,	"foldopen",	ex_foldopen,
! 			RANGE|BANG|WHOLEFOLD|TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_for,		"for",		ex_while,
! 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN),
  EX(CMD_function,	"function",	ex_function,
! 			EXTRA|BANG|CMDWIN),
  EX(CMD_global,		"global",	ex_global,
! 			RANGE|WHOLEFOLD|BANG|EXTRA|DFLALL|SBOXOK|CMDWIN),
  EX(CMD_goto,		"goto",		ex_goto,
! 			RANGE|NOTADR|COUNT|TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_grep,		"grep",		ex_make,
! 			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE),
  EX(CMD_grepadd,		"grepadd",	ex_make,
! 			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE),
  EX(CMD_gui,		"gui",		ex_gui,
! 			BANG|FILES|EDITCMD|ARGOPT|TRLBAR|CMDWIN),
  EX(CMD_gvim,		"gvim",		ex_gui,
! 			BANG|FILES|EDITCMD|ARGOPT|TRLBAR|CMDWIN),
  EX(CMD_help,		"help",		ex_help,
! 			BANG|EXTRA|NOTRLCOM),
  EX(CMD_helpclose,	"helpclose",	ex_helpclose,
! 			RANGE|NOTADR|COUNT|TRLBAR),
  EX(CMD_helpfind,	"helpfind",	ex_helpfind,
! 			EXTRA|NOTRLCOM),
  EX(CMD_helpgrep,	"helpgrep",	ex_helpgrep,
! 			EXTRA|NOTRLCOM|NEEDARG),
  EX(CMD_helptags,	"helptags",	ex_helptags,
! 			NEEDARG|FILES|TRLBAR|CMDWIN),
  EX(CMD_hardcopy,	"hardcopy",	ex_hardcopy,
! 			RANGE|COUNT|EXTRA|TRLBAR|DFLALL|BANG),
  EX(CMD_highlight,	"highlight",	ex_highlight,
! 			BANG|EXTRA|TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_hide,		"hide",		ex_hide,
! 			BANG|EXTRA|NOTRLCOM),
  EX(CMD_history,		"history",	ex_history,
! 			EXTRA|TRLBAR|CMDWIN),
  EX(CMD_insert,		"insert",	ex_append,
! 			BANG|RANGE|TRLBAR|CMDWIN|MODIFY),
  EX(CMD_iabbrev,		"iabbrev",	ex_abbreviate,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_iabclear,	"iabclear",	ex_abclear,
! 			EXTRA|TRLBAR|CMDWIN),
  EX(CMD_if,		"if",		ex_if,
! 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN),
  EX(CMD_ijump,		"ijump",	ex_findpat,
! 			BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA),
  EX(CMD_ilist,		"ilist",	ex_findpat,
! 			BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA|CMDWIN),
  EX(CMD_imap,		"imap",		ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_imapclear,	"imapclear",	ex_mapclear,
! 			EXTRA|TRLBAR|CMDWIN),
  EX(CMD_imenu,		"imenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_inoremap,	"inoremap",	ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_inoreabbrev,	"inoreabbrev",	ex_abbreviate,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_inoremenu,	"inoremenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_intro,		"intro",	ex_intro,
! 			TRLBAR|CMDWIN),
  EX(CMD_isearch,		"isearch",	ex_findpat,
! 			BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA|CMDWIN),
  EX(CMD_isplit,		"isplit",	ex_findpat,
! 			BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA),
  EX(CMD_iunmap,		"iunmap",	ex_unmap,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_iunabbrev,	"iunabbrev",	ex_abbreviate,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_iunmenu,		"iunmenu",	ex_menu,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_join,		"join",		ex_join,
! 			BANG|RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN|MODIFY),
  EX(CMD_jumps,		"jumps",	ex_jumps,
! 			TRLBAR|CMDWIN),
  EX(CMD_k,		"k",		ex_mark,
! 			RANGE|WORD1|TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_keepmarks,	"keepmarks",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM),
  EX(CMD_keepjumps,	"keepjumps",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM),
  EX(CMD_keeppatterns,	"keeppatterns",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM),
  EX(CMD_keepalt,		"keepalt",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM),
  EX(CMD_list,		"list",		ex_print,
! 			RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN),
  EX(CMD_lNext,		"lNext",	ex_cnext,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG),
  EX(CMD_lNfile,		"lNfile",	ex_cnext,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG),
  EX(CMD_last,		"last",		ex_last,
! 			EXTRA|BANG|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_language,	"language",	ex_language,
! 			EXTRA|TRLBAR|CMDWIN),
  EX(CMD_laddexpr,	"laddexpr",	ex_cexpr,
! 			NEEDARG|WORD1|NOTRLCOM|TRLBAR),
  EX(CMD_laddbuffer,	"laddbuffer",	ex_cbuffer,
! 			RANGE|NOTADR|WORD1|TRLBAR),
  EX(CMD_laddfile,	"laddfile",	ex_cfile,
! 			TRLBAR|FILE1),
  EX(CMD_later,		"later",	ex_later,
! 			TRLBAR|EXTRA|NOSPC|CMDWIN),
  EX(CMD_lbuffer,		"lbuffer",	ex_cbuffer,
! 			BANG|RANGE|NOTADR|WORD1|TRLBAR),
  EX(CMD_lcd,		"lcd",		ex_cd,
! 			BANG|FILE1|TRLBAR|CMDWIN),
  EX(CMD_lchdir,		"lchdir",	ex_cd,
! 			BANG|FILE1|TRLBAR|CMDWIN),
  EX(CMD_lclose,		"lclose",	ex_cclose,
! 			RANGE|NOTADR|COUNT|TRLBAR),
  EX(CMD_lcscope,		"lcscope",	do_cscope,
! 			EXTRA|NOTRLCOM|XFILE),
  EX(CMD_left,		"left",		ex_align,
! 			TRLBAR|RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY),
  EX(CMD_leftabove,	"leftabove",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM),
  EX(CMD_let,		"let",		ex_let,
! 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN),
  EX(CMD_lexpr,		"lexpr",	ex_cexpr,
! 			NEEDARG|WORD1|NOTRLCOM|TRLBAR|BANG),
  EX(CMD_lfile,		"lfile",	ex_cfile,
! 			TRLBAR|FILE1|BANG),
  EX(CMD_lfirst,		"lfirst",	ex_cc,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG),
  EX(CMD_lgetfile,	"lgetfile",	ex_cfile,
! 			TRLBAR|FILE1),
  EX(CMD_lgetbuffer,	"lgetbuffer",	ex_cbuffer,
! 			RANGE|NOTADR|WORD1|TRLBAR),
  EX(CMD_lgetexpr,	"lgetexpr",	ex_cexpr,
! 			NEEDARG|WORD1|NOTRLCOM|TRLBAR),
  EX(CMD_lgrep,		"lgrep",	ex_make,
! 			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE),
  EX(CMD_lgrepadd,	"lgrepadd",	ex_make,
! 			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE),
  EX(CMD_lhelpgrep,	"lhelpgrep",	ex_helpgrep,
! 			EXTRA|NOTRLCOM|NEEDARG),
  EX(CMD_ll,		"ll",		ex_cc,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG),
  EX(CMD_llast,		"llast",	ex_cc,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG),
  EX(CMD_llist,		"llist",	qf_list,
! 			BANG|EXTRA|TRLBAR|CMDWIN),
  EX(CMD_lmap,		"lmap",		ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_lmapclear,	"lmapclear",	ex_mapclear,
! 			EXTRA|TRLBAR|CMDWIN),
  EX(CMD_lmake,		"lmake",	ex_make,
! 			BANG|EXTRA|NOTRLCOM|TRLBAR|XFILE),
  EX(CMD_lnoremap,	"lnoremap",	ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_lnext,		"lnext",	ex_cnext,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG),
  EX(CMD_lnewer,		"lnewer",	qf_age,
! 			RANGE|NOTADR|COUNT|TRLBAR),
  EX(CMD_lnfile,		"lnfile",	ex_cnext,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG),
  EX(CMD_loadview,	"loadview",	ex_loadview,
! 			FILE1|TRLBAR),
  EX(CMD_loadkeymap,	"loadkeymap",	ex_loadkeymap,
! 			CMDWIN),
  EX(CMD_lockmarks,	"lockmarks",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM),
  EX(CMD_lockvar,		"lockvar",	ex_lockvar,
! 			BANG|EXTRA|NEEDARG|SBOXOK|CMDWIN),
  EX(CMD_lolder,		"lolder",	qf_age,
! 			RANGE|NOTADR|COUNT|TRLBAR),
  EX(CMD_lopen,		"lopen",	ex_copen,
! 			RANGE|NOTADR|COUNT|TRLBAR),
  EX(CMD_lprevious,	"lprevious",	ex_cnext,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG),
  EX(CMD_lpfile,		"lpfile",	ex_cnext,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG),
  EX(CMD_lrewind,		"lrewind",	ex_cc,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG),
  EX(CMD_ltag,		"ltag",	ex_tag,
! 			NOTADR|TRLBAR|BANG|WORD1),
  EX(CMD_lunmap,		"lunmap",	ex_unmap,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_lua,		"lua",		ex_lua,
! 			RANGE|EXTRA|NEEDARG|CMDWIN),
  EX(CMD_luado,		"luado",	ex_luado,
! 			RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN),
  EX(CMD_luafile,		"luafile",	ex_luafile,
! 			RANGE|FILE1|NEEDARG|CMDWIN),
  EX(CMD_lvimgrep,	"lvimgrep",	ex_vimgrep,
! 			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE),
  EX(CMD_lvimgrepadd,	"lvimgrepadd",	ex_vimgrep,
! 			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE),
  EX(CMD_lwindow,		"lwindow",	ex_cwindow,
! 			RANGE|NOTADR|COUNT|TRLBAR),
  EX(CMD_ls,		"ls",		buflist_list,
! 			BANG|TRLBAR|CMDWIN),
  EX(CMD_move,		"move",		ex_copymove,
! 			RANGE|WHOLEFOLD|EXTRA|TRLBAR|CMDWIN|MODIFY),
  EX(CMD_mark,		"mark",		ex_mark,
! 			RANGE|WORD1|TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_make,		"make",		ex_make,
! 			BANG|EXTRA|NOTRLCOM|TRLBAR|XFILE),
  EX(CMD_map,		"map",		ex_map,
! 			BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_mapclear,	"mapclear",	ex_mapclear,
! 			EXTRA|BANG|TRLBAR|CMDWIN),
  EX(CMD_marks,		"marks",	do_marks,
! 			EXTRA|TRLBAR|CMDWIN),
  EX(CMD_match,		"match",	ex_match,
! 			RANGE|NOTADR|EXTRA|CMDWIN),
  EX(CMD_menu,		"menu",		ex_menu,
! 			RANGE|NOTADR|ZEROR|BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_menutranslate,	"menutranslate", ex_menutranslate,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_messages,	"messages",	ex_messages,
! 			TRLBAR|CMDWIN),
  EX(CMD_mkexrc,		"mkexrc",	ex_mkrc,
! 			BANG|FILE1|TRLBAR|CMDWIN),
  EX(CMD_mksession,	"mksession",	ex_mkrc,
! 			BANG|FILE1|TRLBAR),
  EX(CMD_mkspell,		"mkspell",	ex_mkspell,
! 			BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE),
  EX(CMD_mkvimrc,		"mkvimrc",	ex_mkrc,
! 			BANG|FILE1|TRLBAR|CMDWIN),
  EX(CMD_mkview,		"mkview",	ex_mkrc,
! 			BANG|FILE1|TRLBAR),
  EX(CMD_mode,		"mode",		ex_mode,
! 			WORD1|TRLBAR|CMDWIN),
  EX(CMD_mzscheme,	"mzscheme",	ex_mzscheme,
! 			RANGE|EXTRA|DFLALL|NEEDARG|CMDWIN|SBOXOK),
  EX(CMD_mzfile,		"mzfile",	ex_mzfile,
! 			RANGE|FILE1|NEEDARG|CMDWIN),
  EX(CMD_next,		"next",		ex_next,
! 			RANGE|NOTADR|BANG|FILES|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_nbkey,		"nbkey",	ex_nbkey,
! 			EXTRA|NOTADR|NEEDARG),
  EX(CMD_nbclose,		"nbclose",	ex_nbclose,
! 			TRLBAR|CMDWIN),
  EX(CMD_nbstart,		"nbstart",	ex_nbstart,
! 			WORD1|TRLBAR|CMDWIN),
  EX(CMD_new,		"new",		ex_splitview,
! 			BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_nmap,		"nmap",		ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_nmapclear,	"nmapclear",	ex_mapclear,
! 			EXTRA|TRLBAR|CMDWIN),
  EX(CMD_nmenu,		"nmenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_nnoremap,	"nnoremap",	ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_nnoremenu,	"nnoremenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_noremap,		"noremap",	ex_map,
! 			BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_noautocmd,	"noautocmd",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM),
  EX(CMD_nohlsearch,	"nohlsearch",	ex_nohlsearch,
! 			TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_noreabbrev,	"noreabbrev",	ex_abbreviate,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_noremenu,	"noremenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_noswapfile,	"noswapfile",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM),
  EX(CMD_normal,		"normal",	ex_normal,
! 			RANGE|BANG|EXTRA|NEEDARG|NOTRLCOM|USECTRLV|SBOXOK|CMDWIN),
  EX(CMD_number,		"number",	ex_print,
! 			RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN),
  EX(CMD_nunmap,		"nunmap",	ex_unmap,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_nunmenu,		"nunmenu",	ex_menu,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_open,		"open",		ex_open,
! 			RANGE|BANG|EXTRA),
  EX(CMD_oldfiles,	"oldfiles",	ex_oldfiles,
! 			BANG|TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_omap,		"omap",		ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_omapclear,	"omapclear",	ex_mapclear,
! 			EXTRA|TRLBAR|CMDWIN),
  EX(CMD_omenu,		"omenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_only,		"only",		ex_only,
! 			BANG|TRLBAR),
  EX(CMD_onoremap,	"onoremap",	ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_onoremenu,	"onoremenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_options,		"options",	ex_options,
! 			TRLBAR),
  EX(CMD_ounmap,		"ounmap",	ex_unmap,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_ounmenu,		"ounmenu",	ex_menu,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_ownsyntax,	"ownsyntax",	ex_ownsyntax,
! 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN),
  EX(CMD_print,		"print",	ex_print,
! 			RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN|SBOXOK),
  EX(CMD_pclose,		"pclose",	ex_pclose,
! 			BANG|TRLBAR),
  EX(CMD_perl,		"perl",		ex_perl,
! 			RANGE|EXTRA|DFLALL|NEEDARG|SBOXOK|CMDWIN),
  EX(CMD_perldo,		"perldo",	ex_perldo,
! 			RANGE|EXTRA|DFLALL|NEEDARG|CMDWIN),
  EX(CMD_pedit,		"pedit",	ex_pedit,
! 			BANG|FILE1|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_pop,		"pop",		ex_tag,
! 			RANGE|NOTADR|BANG|COUNT|TRLBAR|ZEROR),
  EX(CMD_popup,		"popup",	ex_popup,
! 			NEEDARG|EXTRA|BANG|TRLBAR|NOTRLCOM|CMDWIN),
  EX(CMD_ppop,		"ppop",		ex_ptag,
! 			RANGE|NOTADR|BANG|COUNT|TRLBAR|ZEROR),
  EX(CMD_preserve,	"preserve",	ex_preserve,
! 			TRLBAR),
  EX(CMD_previous,	"previous",	ex_previous,
! 			EXTRA|RANGE|NOTADR|COUNT|BANG|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_promptfind,	"promptfind",	gui_mch_find_dialog,
! 			EXTRA|NOTRLCOM|CMDWIN),
  EX(CMD_promptrepl,	"promptrepl",	gui_mch_replace_dialog,
! 			EXTRA|NOTRLCOM|CMDWIN),
  EX(CMD_profile,		"profile",	ex_profile,
! 			BANG|EXTRA|TRLBAR|CMDWIN),
  EX(CMD_profdel,		"profdel",	ex_breakdel,
! 			EXTRA|TRLBAR|CMDWIN),
  EX(CMD_psearch,		"psearch",	ex_psearch,
! 			BANG|RANGE|WHOLEFOLD|DFLALL|EXTRA),
  EX(CMD_ptag,		"ptag",		ex_ptag,
! 			RANGE|NOTADR|BANG|WORD1|TRLBAR|ZEROR),
  EX(CMD_ptNext,		"ptNext",	ex_ptag,
! 			RANGE|NOTADR|BANG|TRLBAR|ZEROR),
  EX(CMD_ptfirst,		"ptfirst",	ex_ptag,
! 			RANGE|NOTADR|BANG|TRLBAR|ZEROR),
  EX(CMD_ptjump,		"ptjump",	ex_ptag,
! 			BANG|TRLBAR|WORD1),
  EX(CMD_ptlast,		"ptlast",	ex_ptag,
! 			BANG|TRLBAR),
  EX(CMD_ptnext,		"ptnext",	ex_ptag,
! 			RANGE|NOTADR|BANG|TRLBAR|ZEROR),
  EX(CMD_ptprevious,	"ptprevious",	ex_ptag,
! 			RANGE|NOTADR|BANG|TRLBAR|ZEROR),
  EX(CMD_ptrewind,	"ptrewind",	ex_ptag,
! 			RANGE|NOTADR|BANG|TRLBAR|ZEROR),
  EX(CMD_ptselect,	"ptselect",	ex_ptag,
! 			BANG|TRLBAR|WORD1),
  EX(CMD_put,		"put",		ex_put,
! 			RANGE|WHOLEFOLD|BANG|REGSTR|TRLBAR|ZEROR|CMDWIN|MODIFY),
  EX(CMD_pwd,		"pwd",		ex_pwd,
! 			TRLBAR|CMDWIN),
  EX(CMD_python,		"python",	ex_python,
! 			RANGE|EXTRA|NEEDARG|CMDWIN),
  EX(CMD_pydo,		"pydo",		ex_pydo,
! 			RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN),
  EX(CMD_pyfile,		"pyfile",	ex_pyfile,
! 			RANGE|FILE1|NEEDARG|CMDWIN),
  EX(CMD_py3,		"py3",		ex_py3,
! 			RANGE|EXTRA|NEEDARG|CMDWIN),
  EX(CMD_py3do,		"py3do",	ex_py3do,
! 			RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN),
  EX(CMD_python3,		"python3",	ex_py3,
! 			RANGE|EXTRA|NEEDARG|CMDWIN),
  EX(CMD_py3file,		"py3file",	ex_py3file,
! 			RANGE|FILE1|NEEDARG|CMDWIN),
  EX(CMD_quit,		"quit",		ex_quit,
! 			BANG|TRLBAR|CMDWIN),
  EX(CMD_quitall,		"quitall",	ex_quit_all,
! 			BANG|TRLBAR),
  EX(CMD_qall,		"qall",		ex_quit_all,
! 			BANG|TRLBAR|CMDWIN),
  EX(CMD_read,		"read",		ex_read,
! 			BANG|RANGE|WHOLEFOLD|FILE1|ARGOPT|TRLBAR|ZEROR|CMDWIN|MODIFY),
  EX(CMD_recover,		"recover",	ex_recover,
! 			BANG|FILE1|TRLBAR),
  EX(CMD_redo,		"redo",		ex_redo,
! 			TRLBAR|CMDWIN),
  EX(CMD_redir,		"redir",	ex_redir,
! 			BANG|FILES|TRLBAR|CMDWIN),
  EX(CMD_redraw,		"redraw",	ex_redraw,
! 			BANG|TRLBAR|CMDWIN),
  EX(CMD_redrawstatus,	"redrawstatus",	ex_redrawstatus,
! 			BANG|TRLBAR|CMDWIN),
  EX(CMD_registers,	"registers",	ex_display,
! 			EXTRA|NOTRLCOM|TRLBAR|CMDWIN),
  EX(CMD_resize,		"resize",	ex_resize,
! 			RANGE|NOTADR|TRLBAR|WORD1),
  EX(CMD_retab,		"retab",	ex_retab,
! 			TRLBAR|RANGE|WHOLEFOLD|DFLALL|BANG|WORD1|CMDWIN|MODIFY),
  EX(CMD_return,		"return",	ex_return,
! 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN),
  EX(CMD_rewind,		"rewind",	ex_rewind,
! 			EXTRA|BANG|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_right,		"right",	ex_align,
! 			TRLBAR|RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY),
  EX(CMD_rightbelow,	"rightbelow",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM),
  EX(CMD_runtime,		"runtime",	ex_runtime,
! 			BANG|NEEDARG|FILES|TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_ruby,		"ruby",		ex_ruby,
! 			RANGE|EXTRA|NEEDARG|CMDWIN),
  EX(CMD_rubydo,		"rubydo",	ex_rubydo,
! 			RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN),
  EX(CMD_rubyfile,	"rubyfile",	ex_rubyfile,
! 			RANGE|FILE1|NEEDARG|CMDWIN),
  EX(CMD_rundo,		"rundo",	ex_rundo,
! 			NEEDARG|FILE1),
  EX(CMD_rviminfo,	"rviminfo",	ex_viminfo,
! 			BANG|FILE1|TRLBAR|CMDWIN),
  EX(CMD_substitute,	"substitute",	do_sub,
! 			RANGE|WHOLEFOLD|EXTRA|CMDWIN),
  EX(CMD_sNext,		"sNext",	ex_previous,
! 			EXTRA|RANGE|NOTADR|COUNT|BANG|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_sargument,	"sargument",	ex_argument,
! 			BANG|RANGE|NOTADR|COUNT|EXTRA|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_sall,		"sall",		ex_all,
! 			BANG|RANGE|NOTADR|COUNT|TRLBAR),
  EX(CMD_sandbox,		"sandbox",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM),
  EX(CMD_saveas,		"saveas",	ex_write,
! 			BANG|DFLALL|FILE1|ARGOPT|CMDWIN|TRLBAR),
  EX(CMD_sbuffer,		"sbuffer",	ex_buffer,
! 			BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|EDITCMD|TRLBAR),
  EX(CMD_sbNext,		"sbNext",	ex_bprevious,
! 			RANGE|NOTADR|COUNT|EDITCMD|TRLBAR),
  EX(CMD_sball,		"sball",	ex_buffer_all,
! 			RANGE|NOTADR|COUNT|EDITCMD|TRLBAR),
  EX(CMD_sbfirst,		"sbfirst",	ex_brewind,
! 			EDITCMD|TRLBAR),
  EX(CMD_sblast,		"sblast",	ex_blast,
! 			EDITCMD|TRLBAR),
  EX(CMD_sbmodified,	"sbmodified",	ex_bmodified,
! 			RANGE|NOTADR|COUNT|EDITCMD|TRLBAR),
  EX(CMD_sbnext,		"sbnext",	ex_bnext,
! 			RANGE|NOTADR|COUNT|EDITCMD|TRLBAR),
  EX(CMD_sbprevious,	"sbprevious",	ex_bprevious,
! 			RANGE|NOTADR|COUNT|EDITCMD|TRLBAR),
  EX(CMD_sbrewind,	"sbrewind",	ex_brewind,
! 			EDITCMD|TRLBAR),
  EX(CMD_scriptnames,	"scriptnames",	ex_scriptnames,
! 			TRLBAR|CMDWIN),
  EX(CMD_scriptencoding,	"scriptencoding", ex_scriptencoding,
! 			WORD1|TRLBAR|CMDWIN),
  EX(CMD_scscope,		"scscope",	do_scscope,
! 			EXTRA|NOTRLCOM),
  EX(CMD_set,		"set",		ex_set,
! 			TRLBAR|EXTRA|CMDWIN|SBOXOK),
  EX(CMD_setfiletype,	"setfiletype",	ex_setfiletype,
! 			TRLBAR|EXTRA|NEEDARG|CMDWIN),
  EX(CMD_setglobal,	"setglobal",	ex_set,
! 			TRLBAR|EXTRA|CMDWIN|SBOXOK),
  EX(CMD_setlocal,	"setlocal",	ex_set,
! 			TRLBAR|EXTRA|CMDWIN|SBOXOK),
  EX(CMD_sfind,		"sfind",	ex_splitview,
! 			BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_sfirst,		"sfirst",	ex_rewind,
! 			EXTRA|BANG|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_shell,		"shell",	ex_shell,
! 			TRLBAR|CMDWIN),
  EX(CMD_simalt,		"simalt",	ex_simalt,
! 			NEEDARG|WORD1|TRLBAR|CMDWIN),
  EX(CMD_sign,		"sign",		ex_sign,
! 			NEEDARG|RANGE|NOTADR|EXTRA|CMDWIN),
  EX(CMD_silent,		"silent",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|BANG|NOTRLCOM|SBOXOK|CMDWIN),
  EX(CMD_sleep,		"sleep",	ex_sleep,
! 			RANGE|NOTADR|COUNT|EXTRA|TRLBAR|CMDWIN),
  EX(CMD_slast,		"slast",	ex_last,
! 			EXTRA|BANG|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_smagic,		"smagic",	ex_submagic,
! 			RANGE|WHOLEFOLD|EXTRA|CMDWIN),
  EX(CMD_smap,		"smap",		ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_smapclear,	"smapclear",	ex_mapclear,
! 			EXTRA|TRLBAR|CMDWIN),
  EX(CMD_smenu,		"smenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_snext,		"snext",	ex_next,
! 			RANGE|NOTADR|BANG|FILES|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_sniff,		"sniff",	ex_sniff,
! 			EXTRA|TRLBAR),
  EX(CMD_snomagic,	"snomagic",	ex_submagic,
! 			RANGE|WHOLEFOLD|EXTRA|CMDWIN),
  EX(CMD_snoremap,	"snoremap",	ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_snoremenu,	"snoremenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_source,		"source",	ex_source,
! 			BANG|FILE1|TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_sort,		"sort",		ex_sort,
! 			RANGE|DFLALL|WHOLEFOLD|BANG|EXTRA|NOTRLCOM|MODIFY),
  EX(CMD_split,		"split",	ex_splitview,
! 			BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_spellgood,	"spellgood",	ex_spell,
! 			BANG|RANGE|NOTADR|NEEDARG|EXTRA|TRLBAR),
  EX(CMD_spelldump,	"spelldump",	ex_spelldump,
! 			BANG|TRLBAR),
  EX(CMD_spellinfo,	"spellinfo",	ex_spellinfo,
! 			TRLBAR),
  EX(CMD_spellrepall,	"spellrepall",	ex_spellrepall,
! 			TRLBAR),
  EX(CMD_spellundo,	"spellundo",	ex_spell,
! 			BANG|RANGE|NOTADR|NEEDARG|EXTRA|TRLBAR),
  EX(CMD_spellwrong,	"spellwrong",	ex_spell,
! 			BANG|RANGE|NOTADR|NEEDARG|EXTRA|TRLBAR),
  EX(CMD_sprevious,	"sprevious",	ex_previous,
! 			EXTRA|RANGE|NOTADR|COUNT|BANG|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_srewind,		"srewind",	ex_rewind,
! 			EXTRA|BANG|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_stop,		"stop",		ex_stop,
! 			TRLBAR|BANG|CMDWIN),
  EX(CMD_stag,		"stag",		ex_stag,
! 			RANGE|NOTADR|BANG|WORD1|TRLBAR|ZEROR),
  EX(CMD_startinsert,	"startinsert",	ex_startinsert,
! 			BANG|TRLBAR|CMDWIN),
  EX(CMD_startgreplace,	"startgreplace", ex_startinsert,
! 			BANG|TRLBAR|CMDWIN),
  EX(CMD_startreplace,	"startreplace",	ex_startinsert,
! 			BANG|TRLBAR|CMDWIN),
  EX(CMD_stopinsert,	"stopinsert",	ex_stopinsert,
! 			BANG|TRLBAR|CMDWIN),
  EX(CMD_stjump,		"stjump",	ex_stag,
! 			BANG|TRLBAR|WORD1),
  EX(CMD_stselect,	"stselect",	ex_stag,
! 			BANG|TRLBAR|WORD1),
  EX(CMD_sunhide,		"sunhide",	ex_buffer_all,
! 			RANGE|NOTADR|COUNT|TRLBAR),
  EX(CMD_sunmap,		"sunmap",	ex_unmap,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_sunmenu,		"sunmenu",	ex_menu,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_suspend,		"suspend",	ex_stop,
! 			TRLBAR|BANG|CMDWIN),
  EX(CMD_sview,		"sview",	ex_splitview,
! 			BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_swapname,	"swapname",	ex_swapname,
! 			TRLBAR|CMDWIN),
  EX(CMD_syntax,		"syntax",	ex_syntax,
! 			EXTRA|NOTRLCOM|CMDWIN),
  EX(CMD_syntime,		"syntime",	ex_syntime,
! 			NEEDARG|WORD1|TRLBAR|CMDWIN),
  EX(CMD_syncbind,	"syncbind",	ex_syncbind,
! 			TRLBAR),
  EX(CMD_t,		"t",		ex_copymove,
! 			RANGE|WHOLEFOLD|EXTRA|TRLBAR|CMDWIN|MODIFY),
  EX(CMD_tNext,		"tNext",	ex_tag,
! 			RANGE|NOTADR|BANG|TRLBAR|ZEROR),
  EX(CMD_tag,		"tag",		ex_tag,
! 			RANGE|NOTADR|BANG|WORD1|TRLBAR|ZEROR),
  EX(CMD_tags,		"tags",		do_tags,
! 			TRLBAR|CMDWIN),
  EX(CMD_tab,		"tab",		ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM),
  EX(CMD_tabclose,	"tabclose",	ex_tabclose,
! 			RANGE|NOTADR|COUNT|BANG|TRLBAR|CMDWIN),
  EX(CMD_tabdo,		"tabdo",	ex_listdo,
! 			NEEDARG|EXTRA|NOTRLCOM),
  EX(CMD_tabedit,		"tabedit",	ex_splitview,
! 			BANG|FILE1|RANGE|NOTADR|ZEROR|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_tabfind,		"tabfind",	ex_splitview,
! 			BANG|FILE1|RANGE|NOTADR|ZEROR|EDITCMD|ARGOPT|NEEDARG|TRLBAR),
  EX(CMD_tabfirst,	"tabfirst",	ex_tabnext,
! 			TRLBAR),
  EX(CMD_tabmove,		"tabmove",	ex_tabmove,
! 			RANGE|NOTADR|ZEROR|EXTRA|NOSPC|TRLBAR),
  EX(CMD_tablast,		"tablast",	ex_tabnext,
! 			TRLBAR),
  EX(CMD_tabnext,		"tabnext",	ex_tabnext,
! 			RANGE|NOTADR|COUNT|TRLBAR),
  EX(CMD_tabnew,		"tabnew",	ex_splitview,
! 			BANG|FILE1|RANGE|NOTADR|ZEROR|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_tabonly,		"tabonly",	ex_tabonly,
! 			BANG|TRLBAR|CMDWIN),
  EX(CMD_tabprevious,	"tabprevious",	ex_tabnext,
! 			RANGE|NOTADR|COUNT|TRLBAR),
  EX(CMD_tabNext,		"tabNext",	ex_tabnext,
! 			RANGE|NOTADR|COUNT|TRLBAR),
  EX(CMD_tabrewind,	"tabrewind",	ex_tabnext,
! 			TRLBAR),
  EX(CMD_tabs,		"tabs",		ex_tabs,
! 			TRLBAR|CMDWIN),
  EX(CMD_tcl,		"tcl",		ex_tcl,
! 			RANGE|EXTRA|NEEDARG|CMDWIN),
  EX(CMD_tcldo,		"tcldo",	ex_tcldo,
! 			RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN),
  EX(CMD_tclfile,		"tclfile",	ex_tclfile,
! 			RANGE|FILE1|NEEDARG|CMDWIN),
  EX(CMD_tearoff,		"tearoff",	ex_tearoff,
! 			NEEDARG|EXTRA|TRLBAR|NOTRLCOM|CMDWIN),
  EX(CMD_tfirst,		"tfirst",	ex_tag,
! 			RANGE|NOTADR|BANG|TRLBAR|ZEROR),
  EX(CMD_throw,		"throw",	ex_throw,
! 			EXTRA|NEEDARG|SBOXOK|CMDWIN),
  EX(CMD_tjump,		"tjump",	ex_tag,
! 			BANG|TRLBAR|WORD1),
  EX(CMD_tlast,		"tlast",	ex_tag,
! 			BANG|TRLBAR),
  EX(CMD_tmenu,		"tmenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_tnext,		"tnext",	ex_tag,
! 			RANGE|NOTADR|BANG|TRLBAR|ZEROR),
  EX(CMD_topleft,		"topleft",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM),
  EX(CMD_tprevious,	"tprevious",	ex_tag,
! 			RANGE|NOTADR|BANG|TRLBAR|ZEROR),
  EX(CMD_trewind,		"trewind",	ex_tag,
! 			RANGE|NOTADR|BANG|TRLBAR|ZEROR),
  EX(CMD_try,		"try",		ex_try,
! 			TRLBAR|SBOXOK|CMDWIN),
  EX(CMD_tselect,		"tselect",	ex_tag,
! 			BANG|TRLBAR|WORD1),
  EX(CMD_tunmenu,		"tunmenu",	ex_menu,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_undo,		"undo",		ex_undo,
! 			RANGE|NOTADR|COUNT|ZEROR|TRLBAR|CMDWIN),
  EX(CMD_undojoin,	"undojoin",	ex_undojoin,
! 			TRLBAR|CMDWIN),
  EX(CMD_undolist,	"undolist",	ex_undolist,
! 			TRLBAR|CMDWIN),
  EX(CMD_unabbreviate,	"unabbreviate",	ex_abbreviate,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_unhide,		"unhide",	ex_buffer_all,
! 			RANGE|NOTADR|COUNT|TRLBAR),
  EX(CMD_unlet,		"unlet",	ex_unlet,
! 			BANG|EXTRA|NEEDARG|SBOXOK|CMDWIN),
  EX(CMD_unlockvar,	"unlockvar",	ex_lockvar,
! 			BANG|EXTRA|NEEDARG|SBOXOK|CMDWIN),
  EX(CMD_unmap,		"unmap",	ex_unmap,
! 			BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_unmenu,		"unmenu",	ex_menu,
! 			BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_unsilent,	"unsilent",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM|SBOXOK|CMDWIN),
  EX(CMD_update,		"update",	ex_update,
! 			RANGE|WHOLEFOLD|BANG|FILE1|ARGOPT|DFLALL|TRLBAR),
  EX(CMD_vglobal,		"vglobal",	ex_global,
! 			RANGE|WHOLEFOLD|EXTRA|DFLALL|CMDWIN),
  EX(CMD_version,		"version",	ex_version,
! 			EXTRA|TRLBAR|CMDWIN),
  EX(CMD_verbose,		"verbose",	ex_wrongmodifier,
! 			NEEDARG|RANGE|NOTADR|EXTRA|NOTRLCOM|SBOXOK|CMDWIN),
  EX(CMD_vertical,	"vertical",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM),
  EX(CMD_visual,		"visual",	ex_edit,
! 			BANG|FILE1|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_view,		"view",		ex_edit,
! 			BANG|FILE1|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_vimgrep,		"vimgrep",	ex_vimgrep,
! 			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE),
  EX(CMD_vimgrepadd,	"vimgrepadd",	ex_vimgrep,
! 			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE),
  EX(CMD_viusage,		"viusage",	ex_viusage,
! 			TRLBAR),
  EX(CMD_vmap,		"vmap",		ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_vmapclear,	"vmapclear",	ex_mapclear,
! 			EXTRA|TRLBAR|CMDWIN),
  EX(CMD_vmenu,		"vmenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_vnoremap,	"vnoremap",	ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_vnew,		"vnew",		ex_splitview,
! 			BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_vnoremenu,	"vnoremenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_vsplit,		"vsplit",	ex_splitview,
! 			BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_vunmap,		"vunmap",	ex_unmap,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_vunmenu,		"vunmenu",	ex_menu,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_write,		"write",	ex_write,
! 			RANGE|WHOLEFOLD|BANG|FILE1|ARGOPT|DFLALL|TRLBAR|CMDWIN),
  EX(CMD_wNext,		"wNext",	ex_wnext,
! 			RANGE|WHOLEFOLD|NOTADR|BANG|FILE1|ARGOPT|TRLBAR),
  EX(CMD_wall,		"wall",		do_wqall,
! 			BANG|TRLBAR|CMDWIN),
  EX(CMD_while,		"while",	ex_while,
! 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN),
  EX(CMD_winsize,		"winsize",	ex_winsize,
! 			EXTRA|NEEDARG|TRLBAR),
  EX(CMD_wincmd,		"wincmd",	ex_wincmd,
! 			NEEDARG|WORD1|RANGE|NOTADR),
  EX(CMD_windo,		"windo",	ex_listdo,
! 			BANG|NEEDARG|EXTRA|NOTRLCOM),
  EX(CMD_winpos,		"winpos",	ex_winpos,
! 			EXTRA|TRLBAR|CMDWIN),
  EX(CMD_wnext,		"wnext",	ex_wnext,
! 			RANGE|NOTADR|BANG|FILE1|ARGOPT|TRLBAR),
  EX(CMD_wprevious,	"wprevious",	ex_wnext,
! 			RANGE|NOTADR|BANG|FILE1|ARGOPT|TRLBAR),
  EX(CMD_wq,		"wq",		ex_exit,
! 			RANGE|WHOLEFOLD|BANG|FILE1|ARGOPT|DFLALL|TRLBAR),
  EX(CMD_wqall,		"wqall",	do_wqall,
! 			BANG|FILE1|ARGOPT|DFLALL|TRLBAR),
  EX(CMD_wsverb,		"wsverb",	ex_wsverb,
! 			EXTRA|NOTADR|NEEDARG),
  EX(CMD_wundo,		"wundo",	ex_wundo,
! 			BANG|NEEDARG|FILE1),
  EX(CMD_wviminfo,	"wviminfo",	ex_viminfo,
! 			BANG|FILE1|TRLBAR|CMDWIN),
  EX(CMD_xit,		"xit",		ex_exit,
! 			RANGE|WHOLEFOLD|BANG|FILE1|ARGOPT|DFLALL|TRLBAR|CMDWIN),
  EX(CMD_xall,		"xall",		do_wqall,
! 			BANG|TRLBAR),
  EX(CMD_xmap,		"xmap",		ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_xmapclear,	"xmapclear",	ex_mapclear,
! 			EXTRA|TRLBAR|CMDWIN),
  EX(CMD_xmenu,		"xmenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_xnoremap,	"xnoremap",	ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_xnoremenu,	"xnoremenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_xunmap,		"xunmap",	ex_unmap,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_xunmenu,		"xunmenu",	ex_menu,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
  EX(CMD_yank,		"yank",		ex_operators,
! 			RANGE|WHOLEFOLD|REGSTR|COUNT|TRLBAR|CMDWIN),
  EX(CMD_z,		"z",		ex_z,
! 			RANGE|WHOLEFOLD|EXTRA|EXFLAGS|TRLBAR|CMDWIN),
  
  /* commands that don't start with a lowercase letter */
  EX(CMD_bang,		"!",		ex_bang,
! 			RANGE|WHOLEFOLD|BANG|FILES|CMDWIN),
  EX(CMD_pound,		"#",		ex_print,
! 			RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN),
  EX(CMD_and,		"&",		do_sub,
! 			RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY),
  EX(CMD_star,		"*",		ex_at,
! 			RANGE|WHOLEFOLD|EXTRA|TRLBAR|CMDWIN),
  EX(CMD_lshift,		"<",		ex_operators,
! 			RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN|MODIFY),
  EX(CMD_equal,		"=",		ex_equal,
! 			RANGE|TRLBAR|DFLALL|EXFLAGS|CMDWIN),
  EX(CMD_rshift,		">",		ex_operators,
! 			RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN|MODIFY),
  EX(CMD_at,		"@",		ex_at,
! 			RANGE|WHOLEFOLD|EXTRA|TRLBAR|CMDWIN),
  EX(CMD_Next,		"Next",		ex_previous,
! 			EXTRA|RANGE|NOTADR|COUNT|BANG|EDITCMD|ARGOPT|TRLBAR),
  EX(CMD_Print,		"Print",	ex_print,
! 			RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN),
  EX(CMD_X,		"X",		ex_X,
! 			TRLBAR),
  EX(CMD_tilde,		"~",		do_sub,
! 			RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY),
  
  #ifndef DO_DECLARE_EXCMD
  #ifdef FEAT_USR_CMDS
--- 91,1678 ----
      char_u	*cmd_name;	/* name of the command */
      ex_func_T   cmd_func;	/* function for this command */
      long_u	cmd_argt;	/* flags declared above */
+     int		cmd_addr_type;	/* flag for address type */
  }
  # if defined(FEAT_GUI_W16)
  _far
  # endif
  cmdnames[] =
  #else
! # define EX(a, b, c, d, e)  a
  enum CMD_index
  #endif
  {
  EX(CMD_append,		"append",	ex_append,
! 			BANG|RANGE|ZEROR|TRLBAR|CMDWIN|MODIFY,
! 			ADDR_LINES),
  EX(CMD_abbreviate,	"abbreviate",	ex_abbreviate,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_abclear,		"abclear",	ex_abclear,
! 			EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_aboveleft,	"aboveleft",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM,
! 			ADDR_LINES),
  EX(CMD_all,		"all",		ex_all,
! 			BANG|RANGE|NOTADR|COUNT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_amenu,		"amenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_anoremenu,	"anoremenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_args,		"args",		ex_args,
! 			BANG|FILES|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_argadd,		"argadd",	ex_argadd,
! 			BANG|NEEDARG|RANGE|NOTADR|ZEROR|FILES|TRLBAR,
! 			ADDR_ARGUMENTS),
  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),
  EX(CMD_argedit,		"argedit",	ex_argedit,
! 			BANG|NEEDARG|RANGE|NOTADR|FILE1|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_ARGUMENTS),
  EX(CMD_argglobal,	"argglobal",	ex_args,
! 			BANG|FILES|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_arglocal,	"arglocal",	ex_args,
! 			BANG|FILES|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_argument,	"argument",	ex_argument,
! 			BANG|RANGE|NOTADR|COUNT|EXTRA|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_ARGUMENTS),
  EX(CMD_ascii,		"ascii",	do_ascii,
! 			TRLBAR|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_autocmd,		"autocmd",	ex_autocmd,
! 			BANG|EXTRA|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_augroup,		"augroup",	ex_autocmd,
! 			BANG|WORD1|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_aunmenu,		"aunmenu",	ex_menu,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_buffer,		"buffer",	ex_buffer,
! 			BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|EDITCMD|TRLBAR,
! 			ADDR_UNLOADED_BUFFERS),
  EX(CMD_bNext,		"bNext",	ex_bprevious,
! 			BANG|RANGE|NOTADR|COUNT|EDITCMD|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_ball,		"ball",		ex_buffer_all,
! 			RANGE|NOTADR|COUNT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_badd,		"badd",		ex_edit,
! 			NEEDARG|FILE1|EDITCMD|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_bdelete,		"bdelete",	ex_bunload,
! 			BANG|RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR,
! 			ADDR_LOADED_BUFFERS),
  EX(CMD_behave,		"behave",	ex_behave,
! 			NEEDARG|WORD1|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_belowright,	"belowright",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM,
! 			ADDR_LINES),
  EX(CMD_bfirst,		"bfirst",	ex_brewind,
! 			BANG|RANGE|NOTADR|EDITCMD|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_blast,		"blast",	ex_blast,
! 			BANG|RANGE|NOTADR|EDITCMD|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_bmodified,	"bmodified",	ex_bmodified,
! 			BANG|RANGE|NOTADR|COUNT|EDITCMD|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_bnext,		"bnext",	ex_bnext,
! 			BANG|RANGE|NOTADR|COUNT|EDITCMD|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_botright,	"botright",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM,
! 			ADDR_LINES),
  EX(CMD_bprevious,	"bprevious",	ex_bprevious,
! 			BANG|RANGE|NOTADR|COUNT|EDITCMD|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_brewind,		"brewind",	ex_brewind,
! 			BANG|RANGE|NOTADR|EDITCMD|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_break,		"break",	ex_break,
! 			TRLBAR|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_breakadd,	"breakadd",	ex_breakadd,
! 			EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_breakdel,	"breakdel",	ex_breakdel,
! 			EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_breaklist,	"breaklist",	ex_breaklist,
! 			EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_browse,		"browse",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_buffers,		"buffers",	buflist_list,
! 			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),
  EX(CMD_bwipeout,	"bwipeout",	ex_bunload,
! 			BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|TRLBAR,
! 			ADDR_UNLOADED_BUFFERS),
  EX(CMD_change,		"change",	ex_change,
! 			BANG|WHOLEFOLD|RANGE|COUNT|TRLBAR|CMDWIN|MODIFY,
! 			ADDR_LINES),
  EX(CMD_cNext,		"cNext",	ex_cnext,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG,
! 			ADDR_LINES),
  EX(CMD_cNfile,		"cNfile",	ex_cnext,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG,
! 			ADDR_LINES),
  EX(CMD_cabbrev,		"cabbrev",	ex_abbreviate,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_cabclear,	"cabclear",	ex_abclear,
! 			EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_caddbuffer,	"caddbuffer",	ex_cbuffer,
! 			RANGE|NOTADR|WORD1|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_caddexpr,	"caddexpr",	ex_cexpr,
! 			NEEDARG|WORD1|NOTRLCOM|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_caddfile,	"caddfile",	ex_cfile,
! 			TRLBAR|FILE1,
! 			ADDR_LINES),
  EX(CMD_call,		"call",		ex_call,
! 			RANGE|NEEDARG|EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_catch,		"catch",	ex_catch,
! 			EXTRA|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_cbuffer,		"cbuffer",	ex_cbuffer,
! 			BANG|RANGE|NOTADR|WORD1|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_cc,		"cc",		ex_cc,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG,
! 			ADDR_LINES),
  EX(CMD_cclose,		"cclose",	ex_cclose,
! 			RANGE|NOTADR|COUNT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_cd,		"cd",		ex_cd,
! 			BANG|FILE1|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_center,		"center",	ex_align,
! 			TRLBAR|RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY,
! 			ADDR_LINES),
  EX(CMD_cexpr,		"cexpr",	ex_cexpr,
! 			NEEDARG|WORD1|NOTRLCOM|TRLBAR|BANG,
! 			ADDR_LINES),
  EX(CMD_cfile,		"cfile",	ex_cfile,
! 			TRLBAR|FILE1|BANG,
! 			ADDR_LINES),
  EX(CMD_cfirst,		"cfirst",	ex_cc,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG,
! 			ADDR_LINES),
  EX(CMD_cgetfile,	"cgetfile",	ex_cfile,
! 			TRLBAR|FILE1,
! 			ADDR_LINES),
  EX(CMD_cgetbuffer,	"cgetbuffer",	ex_cbuffer,
! 			RANGE|NOTADR|WORD1|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_cgetexpr,	"cgetexpr",	ex_cexpr,
! 			NEEDARG|WORD1|NOTRLCOM|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_chdir,		"chdir",	ex_cd,
! 			BANG|FILE1|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_changes,		"changes",	ex_changes,
! 			TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_checkpath,	"checkpath",	ex_checkpath,
! 			TRLBAR|BANG|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_checktime,	"checktime",	ex_checktime,
! 			RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_clist,		"clist",	qf_list,
! 			BANG|EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_clast,		"clast",	ex_cc,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG,
! 			ADDR_LINES),
  EX(CMD_close,		"close",	ex_close,
! 			BANG|RANGE|NOTADR|COUNT|TRLBAR|CMDWIN,
! 			ADDR_WINDOWS),
  EX(CMD_cmap,		"cmap",		ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_cmapclear,	"cmapclear",	ex_mapclear,
! 			EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_cmenu,		"cmenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_cnext,		"cnext",	ex_cnext,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG,
! 			ADDR_LINES),
  EX(CMD_cnewer,		"cnewer",	qf_age,
! 			RANGE|NOTADR|COUNT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_cnfile,		"cnfile",	ex_cnext,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG,
! 			ADDR_LINES),
  EX(CMD_cnoremap,	"cnoremap",	ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_cnoreabbrev,	"cnoreabbrev",	ex_abbreviate,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_cnoremenu,	"cnoremenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_copy,		"copy",		ex_copymove,
! 			RANGE|WHOLEFOLD|EXTRA|TRLBAR|CMDWIN|MODIFY,
! 			ADDR_LINES),
  EX(CMD_colder,		"colder",	qf_age,
! 			RANGE|NOTADR|COUNT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_colorscheme,	"colorscheme",	ex_colorscheme,
! 			WORD1|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_command,		"command",	ex_command,
! 			EXTRA|BANG|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_comclear,	"comclear",	ex_comclear,
! 			TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_compiler,	"compiler",	ex_compiler,
! 			BANG|TRLBAR|WORD1|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_continue,	"continue",	ex_continue,
! 			TRLBAR|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_confirm,		"confirm",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_copen,		"copen",	ex_copen,
! 			RANGE|NOTADR|COUNT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_cprevious,	"cprevious",	ex_cnext,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG,
! 			ADDR_LINES),
  EX(CMD_cpfile,		"cpfile",	ex_cnext,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG,
! 			ADDR_LINES),
  EX(CMD_cquit,		"cquit",	ex_cquit,
! 			TRLBAR|BANG,
! 			ADDR_LINES),
  EX(CMD_crewind,		"crewind",	ex_cc,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG,
! 			ADDR_LINES),
  EX(CMD_cscope,		"cscope",	do_cscope,
! 			EXTRA|NOTRLCOM|XFILE,
! 			ADDR_LINES),
  EX(CMD_cstag,		"cstag",	do_cstag,
! 			BANG|TRLBAR|WORD1,
! 			ADDR_LINES),
  EX(CMD_cunmap,		"cunmap",	ex_unmap,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_cunabbrev,	"cunabbrev",	ex_abbreviate,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_cunmenu,		"cunmenu",	ex_menu,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_cwindow,		"cwindow",	ex_cwindow,
! 			RANGE|NOTADR|COUNT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_delete,		"delete",	ex_operators,
! 			RANGE|WHOLEFOLD|REGSTR|COUNT|TRLBAR|CMDWIN|MODIFY,
! 			ADDR_LINES),
  EX(CMD_delmarks,	"delmarks",	ex_delmarks,
! 			BANG|EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_debug,		"debug",	ex_debug,
! 			NEEDARG|EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_debuggreedy,	"debuggreedy",	ex_debuggreedy,
! 			RANGE|NOTADR|ZEROR|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_delcommand,	"delcommand",	ex_delcommand,
! 			NEEDARG|WORD1|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_delfunction,	"delfunction",	ex_delfunction,
! 			NEEDARG|WORD1|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_display,		"display",	ex_display,
! 			EXTRA|NOTRLCOM|TRLBAR|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_diffupdate,	"diffupdate",	ex_diffupdate,
! 			BANG|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_diffget,		"diffget",	ex_diffgetput,
! 			RANGE|EXTRA|TRLBAR|MODIFY,
! 			ADDR_LINES),
  EX(CMD_diffoff,		"diffoff",	ex_diffoff,
! 			BANG|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_diffpatch,	"diffpatch",	ex_diffpatch,
! 			EXTRA|FILE1|TRLBAR|MODIFY,
! 			ADDR_LINES),
  EX(CMD_diffput,		"diffput",	ex_diffgetput,
! 			RANGE|EXTRA|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_diffsplit,	"diffsplit",	ex_diffsplit,
! 			EXTRA|FILE1|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_diffthis,	"diffthis",	ex_diffthis,
! 			TRLBAR,
! 			ADDR_LINES),
  EX(CMD_digraphs,	"digraphs",	ex_digraphs,
! 			EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_djump,		"djump",	ex_findpat,
! 			BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA,
! 			ADDR_LINES),
  EX(CMD_dlist,		"dlist",	ex_findpat,
! 			BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_doautocmd,	"doautocmd",	ex_doautocmd,
! 			EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_doautoall,	"doautoall",	ex_doautoall,
! 			EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_drop,		"drop",		ex_drop,
! 			FILES|EDITCMD|NEEDARG|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_dsearch,		"dsearch",	ex_findpat,
! 			BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_dsplit,		"dsplit",	ex_findpat,
! 			BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA,
! 			ADDR_LINES),
  EX(CMD_edit,		"edit",		ex_edit,
! 			BANG|FILE1|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_earlier,		"earlier",	ex_later,
! 			TRLBAR|EXTRA|NOSPC|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_echo,		"echo",		ex_echo,
! 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_echoerr,		"echoerr",	ex_execute,
! 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_echohl,		"echohl",	ex_echohl,
! 			EXTRA|TRLBAR|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_echomsg,		"echomsg",	ex_execute,
! 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_echon,		"echon",	ex_echo,
! 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_else,		"else",		ex_else,
! 			TRLBAR|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_elseif,		"elseif",	ex_else,
! 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_emenu,		"emenu",	ex_emenu,
! 			NEEDARG|EXTRA|TRLBAR|NOTRLCOM|RANGE|NOTADR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_endif,		"endif",	ex_endif,
! 			TRLBAR|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_endfunction,	"endfunction",	ex_endfunction,
! 			TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_endfor,		"endfor",	ex_endwhile,
! 			TRLBAR|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_endtry,		"endtry",	ex_endtry,
! 			TRLBAR|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_endwhile,	"endwhile",	ex_endwhile,
! 			TRLBAR|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_enew,		"enew",		ex_edit,
! 			BANG|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_ex,		"ex",		ex_edit,
! 			BANG|FILE1|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_execute,		"execute",	ex_execute,
! 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_exit,		"exit",		ex_exit,
! 			RANGE|WHOLEFOLD|BANG|FILE1|ARGOPT|DFLALL|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_exusage,		"exusage",	ex_exusage,
! 			TRLBAR,
! 			ADDR_LINES),
  EX(CMD_file,		"file",		ex_file,
! 			RANGE|NOTADR|ZEROR|BANG|FILE1|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_files,		"files",	buflist_list,
! 			BANG|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_filetype,	"filetype",	ex_filetype,
! 			EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_find,		"find",		ex_find,
! 			RANGE|NOTADR|BANG|FILE1|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_finally,		"finally",	ex_finally,
! 			TRLBAR|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_finish,		"finish",	ex_finish,
! 			TRLBAR|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_first,		"first",	ex_rewind,
! 			EXTRA|BANG|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_fixdel,		"fixdel",	do_fixdel,
! 			TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_fold,		"fold",		ex_fold,
! 			RANGE|WHOLEFOLD|TRLBAR|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_foldclose,	"foldclose",	ex_foldopen,
! 			RANGE|BANG|WHOLEFOLD|TRLBAR|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_folddoopen,	"folddoopen",	ex_folddo,
! 			RANGE|DFLALL|NEEDARG|EXTRA|NOTRLCOM,
! 			ADDR_LINES),
  EX(CMD_folddoclosed,	"folddoclosed",	ex_folddo,
! 			RANGE|DFLALL|NEEDARG|EXTRA|NOTRLCOM,
! 			ADDR_LINES),
  EX(CMD_foldopen,	"foldopen",	ex_foldopen,
! 			RANGE|BANG|WHOLEFOLD|TRLBAR|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_for,		"for",		ex_while,
! 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_function,	"function",	ex_function,
! 			EXTRA|BANG|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_global,		"global",	ex_global,
! 			RANGE|WHOLEFOLD|BANG|EXTRA|DFLALL|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_goto,		"goto",		ex_goto,
! 			RANGE|NOTADR|COUNT|TRLBAR|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_grep,		"grep",		ex_make,
! 			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
! 			ADDR_LINES),
  EX(CMD_grepadd,		"grepadd",	ex_make,
! 			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
! 			ADDR_LINES),
  EX(CMD_gui,		"gui",		ex_gui,
! 			BANG|FILES|EDITCMD|ARGOPT|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_gvim,		"gvim",		ex_gui,
! 			BANG|FILES|EDITCMD|ARGOPT|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_help,		"help",		ex_help,
! 			BANG|EXTRA|NOTRLCOM,
! 			ADDR_LINES),
  EX(CMD_helpclose,	"helpclose",	ex_helpclose,
! 			RANGE|NOTADR|COUNT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_helpfind,	"helpfind",	ex_helpfind,
! 			EXTRA|NOTRLCOM,
! 			ADDR_LINES),
  EX(CMD_helpgrep,	"helpgrep",	ex_helpgrep,
! 			EXTRA|NOTRLCOM|NEEDARG,
! 			ADDR_LINES),
  EX(CMD_helptags,	"helptags",	ex_helptags,
! 			NEEDARG|FILES|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_hardcopy,	"hardcopy",	ex_hardcopy,
! 			RANGE|COUNT|EXTRA|TRLBAR|DFLALL|BANG,
! 			ADDR_LINES),
  EX(CMD_highlight,	"highlight",	ex_highlight,
! 			BANG|EXTRA|TRLBAR|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_hide,		"hide",		ex_hide,
! 			BANG|RANGE|NOTADR|COUNT|EXTRA|NOTRLCOM,
! 			ADDR_WINDOWS),
  EX(CMD_history,		"history",	ex_history,
! 			EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_insert,		"insert",	ex_append,
! 			BANG|RANGE|TRLBAR|CMDWIN|MODIFY,
! 			ADDR_LINES),
  EX(CMD_iabbrev,		"iabbrev",	ex_abbreviate,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_iabclear,	"iabclear",	ex_abclear,
! 			EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_if,		"if",		ex_if,
! 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_ijump,		"ijump",	ex_findpat,
! 			BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA,
! 			ADDR_LINES),
  EX(CMD_ilist,		"ilist",	ex_findpat,
! 			BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_imap,		"imap",		ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_imapclear,	"imapclear",	ex_mapclear,
! 			EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_imenu,		"imenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_inoremap,	"inoremap",	ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_inoreabbrev,	"inoreabbrev",	ex_abbreviate,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_inoremenu,	"inoremenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_intro,		"intro",	ex_intro,
! 			TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_isearch,		"isearch",	ex_findpat,
! 			BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_isplit,		"isplit",	ex_findpat,
! 			BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA,
! 			ADDR_LINES),
  EX(CMD_iunmap,		"iunmap",	ex_unmap,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_iunabbrev,	"iunabbrev",	ex_abbreviate,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_iunmenu,		"iunmenu",	ex_menu,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_join,		"join",		ex_join,
! 			BANG|RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN|MODIFY,
! 			ADDR_LINES),
  EX(CMD_jumps,		"jumps",	ex_jumps,
! 			TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_k,		"k",		ex_mark,
! 			RANGE|WORD1|TRLBAR|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_keepmarks,	"keepmarks",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM,
! 			ADDR_LINES),
  EX(CMD_keepjumps,	"keepjumps",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM,
! 			ADDR_LINES),
  EX(CMD_keeppatterns,	"keeppatterns",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM,
! 			ADDR_LINES),
  EX(CMD_keepalt,		"keepalt",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM,
! 			ADDR_LINES),
  EX(CMD_list,		"list",		ex_print,
! 			RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_lNext,		"lNext",	ex_cnext,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG,
! 			ADDR_LINES),
  EX(CMD_lNfile,		"lNfile",	ex_cnext,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG,
! 			ADDR_LINES),
  EX(CMD_last,		"last",		ex_last,
! 			EXTRA|BANG|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_language,	"language",	ex_language,
! 			EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_laddexpr,	"laddexpr",	ex_cexpr,
! 			NEEDARG|WORD1|NOTRLCOM|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_laddbuffer,	"laddbuffer",	ex_cbuffer,
! 			RANGE|NOTADR|WORD1|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_laddfile,	"laddfile",	ex_cfile,
! 			TRLBAR|FILE1,
! 			ADDR_LINES),
  EX(CMD_later,		"later",	ex_later,
! 			TRLBAR|EXTRA|NOSPC|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_lbuffer,		"lbuffer",	ex_cbuffer,
! 			BANG|RANGE|NOTADR|WORD1|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_lcd,		"lcd",		ex_cd,
! 			BANG|FILE1|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_lchdir,		"lchdir",	ex_cd,
! 			BANG|FILE1|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_lclose,		"lclose",	ex_cclose,
! 			RANGE|NOTADR|COUNT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_lcscope,		"lcscope",	do_cscope,
! 			EXTRA|NOTRLCOM|XFILE,
! 			ADDR_LINES),
  EX(CMD_left,		"left",		ex_align,
! 			TRLBAR|RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY,
! 			ADDR_LINES),
  EX(CMD_leftabove,	"leftabove",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM,
! 			ADDR_LINES),
  EX(CMD_let,		"let",		ex_let,
! 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_lexpr,		"lexpr",	ex_cexpr,
! 			NEEDARG|WORD1|NOTRLCOM|TRLBAR|BANG,
! 			ADDR_LINES),
  EX(CMD_lfile,		"lfile",	ex_cfile,
! 			TRLBAR|FILE1|BANG,
! 			ADDR_LINES),
  EX(CMD_lfirst,		"lfirst",	ex_cc,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG,
! 			ADDR_LINES),
  EX(CMD_lgetfile,	"lgetfile",	ex_cfile,
! 			TRLBAR|FILE1,
! 			ADDR_LINES),
  EX(CMD_lgetbuffer,	"lgetbuffer",	ex_cbuffer,
! 			RANGE|NOTADR|WORD1|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_lgetexpr,	"lgetexpr",	ex_cexpr,
! 			NEEDARG|WORD1|NOTRLCOM|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_lgrep,		"lgrep",	ex_make,
! 			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
! 			ADDR_LINES),
  EX(CMD_lgrepadd,	"lgrepadd",	ex_make,
! 			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
! 			ADDR_LINES),
  EX(CMD_lhelpgrep,	"lhelpgrep",	ex_helpgrep,
! 			EXTRA|NOTRLCOM|NEEDARG,
! 			ADDR_LINES),
  EX(CMD_ll,		"ll",		ex_cc,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG,
! 			ADDR_LINES),
  EX(CMD_llast,		"llast",	ex_cc,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG,
! 			ADDR_LINES),
  EX(CMD_llist,		"llist",	qf_list,
! 			BANG|EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_lmap,		"lmap",		ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_lmapclear,	"lmapclear",	ex_mapclear,
! 			EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_lmake,		"lmake",	ex_make,
! 			BANG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
! 			ADDR_LINES),
  EX(CMD_lnoremap,	"lnoremap",	ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_lnext,		"lnext",	ex_cnext,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG,
! 			ADDR_LINES),
  EX(CMD_lnewer,		"lnewer",	qf_age,
! 			RANGE|NOTADR|COUNT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_lnfile,		"lnfile",	ex_cnext,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG,
! 			ADDR_LINES),
  EX(CMD_loadview,	"loadview",	ex_loadview,
! 			FILE1|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_loadkeymap,	"loadkeymap",	ex_loadkeymap,
! 			CMDWIN,
! 			ADDR_LINES),
  EX(CMD_lockmarks,	"lockmarks",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM,
! 			ADDR_LINES),
  EX(CMD_lockvar,		"lockvar",	ex_lockvar,
! 			BANG|EXTRA|NEEDARG|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_lolder,		"lolder",	qf_age,
! 			RANGE|NOTADR|COUNT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_lopen,		"lopen",	ex_copen,
! 			RANGE|NOTADR|COUNT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_lprevious,	"lprevious",	ex_cnext,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG,
! 			ADDR_LINES),
  EX(CMD_lpfile,		"lpfile",	ex_cnext,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG,
! 			ADDR_LINES),
  EX(CMD_lrewind,		"lrewind",	ex_cc,
! 			RANGE|NOTADR|COUNT|TRLBAR|BANG,
! 			ADDR_LINES),
  EX(CMD_ltag,		"ltag",	ex_tag,
! 			NOTADR|TRLBAR|BANG|WORD1,
! 			ADDR_LINES),
  EX(CMD_lunmap,		"lunmap",	ex_unmap,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_lua,		"lua",		ex_lua,
! 			RANGE|EXTRA|NEEDARG|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_luado,		"luado",	ex_luado,
! 			RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_luafile,		"luafile",	ex_luafile,
! 			RANGE|FILE1|NEEDARG|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_lvimgrep,	"lvimgrep",	ex_vimgrep,
! 			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
! 			ADDR_LINES),
  EX(CMD_lvimgrepadd,	"lvimgrepadd",	ex_vimgrep,
! 			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
! 			ADDR_LINES),
  EX(CMD_lwindow,		"lwindow",	ex_cwindow,
! 			RANGE|NOTADR|COUNT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_ls,		"ls",		buflist_list,
! 			BANG|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_move,		"move",		ex_copymove,
! 			RANGE|WHOLEFOLD|EXTRA|TRLBAR|CMDWIN|MODIFY,
! 			ADDR_LINES),
  EX(CMD_mark,		"mark",		ex_mark,
! 			RANGE|WORD1|TRLBAR|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_make,		"make",		ex_make,
! 			BANG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
! 			ADDR_LINES),
  EX(CMD_map,		"map",		ex_map,
! 			BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_mapclear,	"mapclear",	ex_mapclear,
! 			EXTRA|BANG|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_marks,		"marks",	do_marks,
! 			EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_match,		"match",	ex_match,
! 			RANGE|NOTADR|EXTRA|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_menu,		"menu",		ex_menu,
! 			RANGE|NOTADR|ZEROR|BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_menutranslate,	"menutranslate", ex_menutranslate,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_messages,	"messages",	ex_messages,
! 			TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_mkexrc,		"mkexrc",	ex_mkrc,
! 			BANG|FILE1|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_mksession,	"mksession",	ex_mkrc,
! 			BANG|FILE1|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_mkspell,		"mkspell",	ex_mkspell,
! 			BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
! 			ADDR_LINES),
  EX(CMD_mkvimrc,		"mkvimrc",	ex_mkrc,
! 			BANG|FILE1|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_mkview,		"mkview",	ex_mkrc,
! 			BANG|FILE1|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_mode,		"mode",		ex_mode,
! 			WORD1|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_mzscheme,	"mzscheme",	ex_mzscheme,
! 			RANGE|EXTRA|DFLALL|NEEDARG|CMDWIN|SBOXOK,
! 			ADDR_LINES),
  EX(CMD_mzfile,		"mzfile",	ex_mzfile,
! 			RANGE|FILE1|NEEDARG|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_next,		"next",		ex_next,
! 			RANGE|NOTADR|BANG|FILES|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_nbkey,		"nbkey",	ex_nbkey,
! 			EXTRA|NOTADR|NEEDARG,
! 			ADDR_LINES),
  EX(CMD_nbclose,		"nbclose",	ex_nbclose,
! 			TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_nbstart,		"nbstart",	ex_nbstart,
! 			WORD1|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_new,		"new",		ex_splitview,
! 			BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_nmap,		"nmap",		ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_nmapclear,	"nmapclear",	ex_mapclear,
! 			EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_nmenu,		"nmenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_nnoremap,	"nnoremap",	ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_nnoremenu,	"nnoremenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_noremap,		"noremap",	ex_map,
! 			BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_noautocmd,	"noautocmd",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM,
! 			ADDR_LINES),
  EX(CMD_nohlsearch,	"nohlsearch",	ex_nohlsearch,
! 			TRLBAR|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_noreabbrev,	"noreabbrev",	ex_abbreviate,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_noremenu,	"noremenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_noswapfile,	"noswapfile",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM,
! 			ADDR_LINES),
  EX(CMD_normal,		"normal",	ex_normal,
! 			RANGE|BANG|EXTRA|NEEDARG|NOTRLCOM|USECTRLV|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_number,		"number",	ex_print,
! 			RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_nunmap,		"nunmap",	ex_unmap,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_nunmenu,		"nunmenu",	ex_menu,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_open,		"open",		ex_open,
! 			RANGE|BANG|EXTRA,
! 			ADDR_LINES),
  EX(CMD_oldfiles,	"oldfiles",	ex_oldfiles,
! 			BANG|TRLBAR|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_omap,		"omap",		ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_omapclear,	"omapclear",	ex_mapclear,
! 			EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_omenu,		"omenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_only,		"only",		ex_only,
! 			BANG|NOTADR|RANGE|COUNT|TRLBAR,
! 			ADDR_WINDOWS),
  EX(CMD_onoremap,	"onoremap",	ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_onoremenu,	"onoremenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_options,		"options",	ex_options,
! 			TRLBAR,
! 			ADDR_LINES),
  EX(CMD_ounmap,		"ounmap",	ex_unmap,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_ounmenu,		"ounmenu",	ex_menu,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_ownsyntax,	"ownsyntax",	ex_ownsyntax,
! 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_print,		"print",	ex_print,
! 			RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN|SBOXOK,
! 			ADDR_LINES),
  EX(CMD_pclose,		"pclose",	ex_pclose,
! 			BANG|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_perl,		"perl",		ex_perl,
! 			RANGE|EXTRA|DFLALL|NEEDARG|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_perldo,		"perldo",	ex_perldo,
! 			RANGE|EXTRA|DFLALL|NEEDARG|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_pedit,		"pedit",	ex_pedit,
! 			BANG|FILE1|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_pop,		"pop",		ex_tag,
! 			RANGE|NOTADR|BANG|COUNT|TRLBAR|ZEROR,
! 			ADDR_LINES),
  EX(CMD_popup,		"popup",	ex_popup,
! 			NEEDARG|EXTRA|BANG|TRLBAR|NOTRLCOM|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_ppop,		"ppop",		ex_ptag,
! 			RANGE|NOTADR|BANG|COUNT|TRLBAR|ZEROR,
! 			ADDR_LINES),
  EX(CMD_preserve,	"preserve",	ex_preserve,
! 			TRLBAR,
! 			ADDR_LINES),
  EX(CMD_previous,	"previous",	ex_previous,
! 			EXTRA|RANGE|NOTADR|COUNT|BANG|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_promptfind,	"promptfind",	gui_mch_find_dialog,
! 			EXTRA|NOTRLCOM|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_promptrepl,	"promptrepl",	gui_mch_replace_dialog,
! 			EXTRA|NOTRLCOM|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_profile,		"profile",	ex_profile,
! 			BANG|EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_profdel,		"profdel",	ex_breakdel,
! 			EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_psearch,		"psearch",	ex_psearch,
! 			BANG|RANGE|WHOLEFOLD|DFLALL|EXTRA,
! 			ADDR_LINES),
  EX(CMD_ptag,		"ptag",		ex_ptag,
! 			RANGE|NOTADR|BANG|WORD1|TRLBAR|ZEROR,
! 			ADDR_LINES),
  EX(CMD_ptNext,		"ptNext",	ex_ptag,
! 			RANGE|NOTADR|BANG|TRLBAR|ZEROR,
! 			ADDR_LINES),
  EX(CMD_ptfirst,		"ptfirst",	ex_ptag,
! 			RANGE|NOTADR|BANG|TRLBAR|ZEROR,
! 			ADDR_LINES),
  EX(CMD_ptjump,		"ptjump",	ex_ptag,
! 			BANG|TRLBAR|WORD1,
! 			ADDR_LINES),
  EX(CMD_ptlast,		"ptlast",	ex_ptag,
! 			BANG|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_ptnext,		"ptnext",	ex_ptag,
! 			RANGE|NOTADR|BANG|TRLBAR|ZEROR,
! 			ADDR_LINES),
  EX(CMD_ptprevious,	"ptprevious",	ex_ptag,
! 			RANGE|NOTADR|BANG|TRLBAR|ZEROR,
! 			ADDR_LINES),
  EX(CMD_ptrewind,	"ptrewind",	ex_ptag,
! 			RANGE|NOTADR|BANG|TRLBAR|ZEROR,
! 			ADDR_LINES),
  EX(CMD_ptselect,	"ptselect",	ex_ptag,
! 			BANG|TRLBAR|WORD1,
! 			ADDR_LINES),
  EX(CMD_put,		"put",		ex_put,
! 			RANGE|WHOLEFOLD|BANG|REGSTR|TRLBAR|ZEROR|CMDWIN|MODIFY,
! 			ADDR_LINES),
  EX(CMD_pwd,		"pwd",		ex_pwd,
! 			TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_python,		"python",	ex_python,
! 			RANGE|EXTRA|NEEDARG|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_pydo,		"pydo",		ex_pydo,
! 			RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_pyfile,		"pyfile",	ex_pyfile,
! 			RANGE|FILE1|NEEDARG|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_py3,		"py3",		ex_py3,
! 			RANGE|EXTRA|NEEDARG|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_py3do,		"py3do",	ex_py3do,
! 			RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_python3,		"python3",	ex_py3,
! 			RANGE|EXTRA|NEEDARG|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_py3file,		"py3file",	ex_py3file,
! 			RANGE|FILE1|NEEDARG|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_quit,		"quit",		ex_quit,
! 			BANG|RANGE|COUNT|NOTADR|TRLBAR|CMDWIN,
! 			ADDR_WINDOWS),
  EX(CMD_quitall,		"quitall",	ex_quit_all,
! 			BANG|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_qall,		"qall",		ex_quit_all,
! 			BANG|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_read,		"read",		ex_read,
! 			BANG|RANGE|WHOLEFOLD|FILE1|ARGOPT|TRLBAR|ZEROR|CMDWIN|MODIFY,
! 			ADDR_LINES),
  EX(CMD_recover,		"recover",	ex_recover,
! 			BANG|FILE1|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_redo,		"redo",		ex_redo,
! 			TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_redir,		"redir",	ex_redir,
! 			BANG|FILES|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_redraw,		"redraw",	ex_redraw,
! 			BANG|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_redrawstatus,	"redrawstatus",	ex_redrawstatus,
! 			BANG|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_registers,	"registers",	ex_display,
! 			EXTRA|NOTRLCOM|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_resize,		"resize",	ex_resize,
! 			RANGE|NOTADR|TRLBAR|WORD1,
! 			ADDR_LINES),
  EX(CMD_retab,		"retab",	ex_retab,
! 			TRLBAR|RANGE|WHOLEFOLD|DFLALL|BANG|WORD1|CMDWIN|MODIFY,
! 			ADDR_LINES),
  EX(CMD_return,		"return",	ex_return,
! 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_rewind,		"rewind",	ex_rewind,
! 			EXTRA|BANG|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_right,		"right",	ex_align,
! 			TRLBAR|RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY,
! 			ADDR_LINES),
  EX(CMD_rightbelow,	"rightbelow",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM,
! 			ADDR_LINES),
  EX(CMD_runtime,		"runtime",	ex_runtime,
! 			BANG|NEEDARG|FILES|TRLBAR|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_ruby,		"ruby",		ex_ruby,
! 			RANGE|EXTRA|NEEDARG|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_rubydo,		"rubydo",	ex_rubydo,
! 			RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_rubyfile,	"rubyfile",	ex_rubyfile,
! 			RANGE|FILE1|NEEDARG|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_rundo,		"rundo",	ex_rundo,
! 			NEEDARG|FILE1,
! 			ADDR_LINES),
  EX(CMD_rviminfo,	"rviminfo",	ex_viminfo,
! 			BANG|FILE1|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_substitute,	"substitute",	do_sub,
! 			RANGE|WHOLEFOLD|EXTRA|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_sNext,		"sNext",	ex_previous,
! 			EXTRA|RANGE|NOTADR|COUNT|BANG|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_sargument,	"sargument",	ex_argument,
! 			BANG|RANGE|NOTADR|COUNT|EXTRA|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_ARGUMENTS),
  EX(CMD_sall,		"sall",		ex_all,
! 			BANG|RANGE|NOTADR|COUNT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_sandbox,		"sandbox",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM,
! 			ADDR_LINES),
  EX(CMD_saveas,		"saveas",	ex_write,
! 			BANG|DFLALL|FILE1|ARGOPT|CMDWIN|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_sbuffer,		"sbuffer",	ex_buffer,
! 			BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|EDITCMD|TRLBAR,
! 			ADDR_UNLOADED_BUFFERS),
  EX(CMD_sbNext,		"sbNext",	ex_bprevious,
! 			RANGE|NOTADR|COUNT|EDITCMD|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_sball,		"sball",	ex_buffer_all,
! 			RANGE|NOTADR|COUNT|EDITCMD|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_sbfirst,		"sbfirst",	ex_brewind,
! 			EDITCMD|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_sblast,		"sblast",	ex_blast,
! 			EDITCMD|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_sbmodified,	"sbmodified",	ex_bmodified,
! 			RANGE|NOTADR|COUNT|EDITCMD|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_sbnext,		"sbnext",	ex_bnext,
! 			RANGE|NOTADR|COUNT|EDITCMD|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_sbprevious,	"sbprevious",	ex_bprevious,
! 			RANGE|NOTADR|COUNT|EDITCMD|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_sbrewind,	"sbrewind",	ex_brewind,
! 			EDITCMD|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_scriptnames,	"scriptnames",	ex_scriptnames,
! 			TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_scriptencoding,	"scriptencoding", ex_scriptencoding,
! 			WORD1|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_scscope,		"scscope",	do_scscope,
! 			EXTRA|NOTRLCOM,
! 			ADDR_LINES),
  EX(CMD_set,		"set",		ex_set,
! 			TRLBAR|EXTRA|CMDWIN|SBOXOK,
! 			ADDR_LINES),
  EX(CMD_setfiletype,	"setfiletype",	ex_setfiletype,
! 			TRLBAR|EXTRA|NEEDARG|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_setglobal,	"setglobal",	ex_set,
! 			TRLBAR|EXTRA|CMDWIN|SBOXOK,
! 			ADDR_LINES),
  EX(CMD_setlocal,	"setlocal",	ex_set,
! 			TRLBAR|EXTRA|CMDWIN|SBOXOK,
! 			ADDR_LINES),
  EX(CMD_sfind,		"sfind",	ex_splitview,
! 			BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_sfirst,		"sfirst",	ex_rewind,
! 			EXTRA|BANG|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_shell,		"shell",	ex_shell,
! 			TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_simalt,		"simalt",	ex_simalt,
! 			NEEDARG|WORD1|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_sign,		"sign",		ex_sign,
! 			NEEDARG|RANGE|NOTADR|EXTRA|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_silent,		"silent",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|BANG|NOTRLCOM|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_sleep,		"sleep",	ex_sleep,
! 			RANGE|NOTADR|COUNT|EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_slast,		"slast",	ex_last,
! 			EXTRA|BANG|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_smagic,		"smagic",	ex_submagic,
! 			RANGE|WHOLEFOLD|EXTRA|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_smap,		"smap",		ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_smapclear,	"smapclear",	ex_mapclear,
! 			EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_smenu,		"smenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_snext,		"snext",	ex_next,
! 			RANGE|NOTADR|BANG|FILES|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_sniff,		"sniff",	ex_sniff,
! 			EXTRA|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_snomagic,	"snomagic",	ex_submagic,
! 			RANGE|WHOLEFOLD|EXTRA|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_snoremap,	"snoremap",	ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_snoremenu,	"snoremenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_source,		"source",	ex_source,
! 			BANG|FILE1|TRLBAR|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_sort,		"sort",		ex_sort,
! 			RANGE|DFLALL|WHOLEFOLD|BANG|EXTRA|NOTRLCOM|MODIFY,
! 			ADDR_LINES),
  EX(CMD_split,		"split",	ex_splitview,
! 			BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_spellgood,	"spellgood",	ex_spell,
! 			BANG|RANGE|NOTADR|NEEDARG|EXTRA|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_spelldump,	"spelldump",	ex_spelldump,
! 			BANG|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_spellinfo,	"spellinfo",	ex_spellinfo,
! 			TRLBAR,
! 			ADDR_LINES),
  EX(CMD_spellrepall,	"spellrepall",	ex_spellrepall,
! 			TRLBAR,
! 			ADDR_LINES),
  EX(CMD_spellundo,	"spellundo",	ex_spell,
! 			BANG|RANGE|NOTADR|NEEDARG|EXTRA|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_spellwrong,	"spellwrong",	ex_spell,
! 			BANG|RANGE|NOTADR|NEEDARG|EXTRA|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_sprevious,	"sprevious",	ex_previous,
! 			EXTRA|RANGE|NOTADR|COUNT|BANG|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_srewind,		"srewind",	ex_rewind,
! 			EXTRA|BANG|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_stop,		"stop",		ex_stop,
! 			TRLBAR|BANG|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_stag,		"stag",		ex_stag,
! 			RANGE|NOTADR|BANG|WORD1|TRLBAR|ZEROR,
! 			ADDR_LINES),
  EX(CMD_startinsert,	"startinsert",	ex_startinsert,
! 			BANG|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_startgreplace,	"startgreplace", ex_startinsert,
! 			BANG|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_startreplace,	"startreplace",	ex_startinsert,
! 			BANG|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_stopinsert,	"stopinsert",	ex_stopinsert,
! 			BANG|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_stjump,		"stjump",	ex_stag,
! 			BANG|TRLBAR|WORD1,
! 			ADDR_LINES),
  EX(CMD_stselect,	"stselect",	ex_stag,
! 			BANG|TRLBAR|WORD1,
! 			ADDR_LINES),
  EX(CMD_sunhide,		"sunhide",	ex_buffer_all,
! 			RANGE|NOTADR|COUNT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_sunmap,		"sunmap",	ex_unmap,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_sunmenu,		"sunmenu",	ex_menu,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_suspend,		"suspend",	ex_stop,
! 			TRLBAR|BANG|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_sview,		"sview",	ex_splitview,
! 			BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_swapname,	"swapname",	ex_swapname,
! 			TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_syntax,		"syntax",	ex_syntax,
! 			EXTRA|NOTRLCOM|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_syntime,		"syntime",	ex_syntime,
! 			NEEDARG|WORD1|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_syncbind,	"syncbind",	ex_syncbind,
! 			TRLBAR,
! 			ADDR_LINES),
  EX(CMD_t,		"t",		ex_copymove,
! 			RANGE|WHOLEFOLD|EXTRA|TRLBAR|CMDWIN|MODIFY,
! 			ADDR_LINES),
  EX(CMD_tNext,		"tNext",	ex_tag,
! 			RANGE|NOTADR|BANG|TRLBAR|ZEROR,
! 			ADDR_LINES),
  EX(CMD_tag,		"tag",		ex_tag,
! 			RANGE|NOTADR|BANG|WORD1|TRLBAR|ZEROR,
! 			ADDR_LINES),
  EX(CMD_tags,		"tags",		do_tags,
! 			TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_tab,		"tab",		ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM,
! 			ADDR_LINES),
  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),
  EX(CMD_tabedit,		"tabedit",	ex_splitview,
! 			BANG|FILE1|RANGE|NOTADR|ZEROR|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_TABS),
  EX(CMD_tabfind,		"tabfind",	ex_splitview,
! 			BANG|FILE1|RANGE|NOTADR|ZEROR|EDITCMD|ARGOPT|NEEDARG|TRLBAR,
! 			ADDR_TABS),
  EX(CMD_tabfirst,	"tabfirst",	ex_tabnext,
! 			TRLBAR,
! 			ADDR_LINES),
  EX(CMD_tabmove,		"tabmove",	ex_tabmove,
! 			RANGE|NOTADR|ZEROR|EXTRA|NOSPC|TRLBAR,
! 			ADDR_TABS),
  EX(CMD_tablast,		"tablast",	ex_tabnext,
! 			TRLBAR,
! 			ADDR_LINES),
  EX(CMD_tabnext,		"tabnext",	ex_tabnext,
! 			RANGE|NOTADR|COUNT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_tabnew,		"tabnew",	ex_splitview,
! 			BANG|FILE1|RANGE|NOTADR|ZEROR|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_TABS),
  EX(CMD_tabonly,		"tabonly",	ex_tabonly,
! 			BANG|RANGE|NOTADR|TRLBAR|CMDWIN,
! 			ADDR_TABS),
  EX(CMD_tabprevious,	"tabprevious",	ex_tabnext,
! 			RANGE|NOTADR|COUNT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_tabNext,		"tabNext",	ex_tabnext,
! 			RANGE|NOTADR|COUNT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_tabrewind,	"tabrewind",	ex_tabnext,
! 			TRLBAR,
! 			ADDR_LINES),
  EX(CMD_tabs,		"tabs",		ex_tabs,
! 			TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_tcl,		"tcl",		ex_tcl,
! 			RANGE|EXTRA|NEEDARG|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_tcldo,		"tcldo",	ex_tcldo,
! 			RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_tclfile,		"tclfile",	ex_tclfile,
! 			RANGE|FILE1|NEEDARG|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_tearoff,		"tearoff",	ex_tearoff,
! 			NEEDARG|EXTRA|TRLBAR|NOTRLCOM|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_tfirst,		"tfirst",	ex_tag,
! 			RANGE|NOTADR|BANG|TRLBAR|ZEROR,
! 			ADDR_LINES),
  EX(CMD_throw,		"throw",	ex_throw,
! 			EXTRA|NEEDARG|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_tjump,		"tjump",	ex_tag,
! 			BANG|TRLBAR|WORD1,
! 			ADDR_LINES),
  EX(CMD_tlast,		"tlast",	ex_tag,
! 			BANG|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_tmenu,		"tmenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_tnext,		"tnext",	ex_tag,
! 			RANGE|NOTADR|BANG|TRLBAR|ZEROR,
! 			ADDR_LINES),
  EX(CMD_topleft,		"topleft",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM,
! 			ADDR_LINES),
  EX(CMD_tprevious,	"tprevious",	ex_tag,
! 			RANGE|NOTADR|BANG|TRLBAR|ZEROR,
! 			ADDR_LINES),
  EX(CMD_trewind,		"trewind",	ex_tag,
! 			RANGE|NOTADR|BANG|TRLBAR|ZEROR,
! 			ADDR_LINES),
  EX(CMD_try,		"try",		ex_try,
! 			TRLBAR|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_tselect,		"tselect",	ex_tag,
! 			BANG|TRLBAR|WORD1,
! 			ADDR_LINES),
  EX(CMD_tunmenu,		"tunmenu",	ex_menu,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_undo,		"undo",		ex_undo,
! 			RANGE|NOTADR|COUNT|ZEROR|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_undojoin,	"undojoin",	ex_undojoin,
! 			TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_undolist,	"undolist",	ex_undolist,
! 			TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_unabbreviate,	"unabbreviate",	ex_abbreviate,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_unhide,		"unhide",	ex_buffer_all,
! 			RANGE|NOTADR|COUNT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_unlet,		"unlet",	ex_unlet,
! 			BANG|EXTRA|NEEDARG|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_unlockvar,	"unlockvar",	ex_lockvar,
! 			BANG|EXTRA|NEEDARG|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_unmap,		"unmap",	ex_unmap,
! 			BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_unmenu,		"unmenu",	ex_menu,
! 			BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_unsilent,	"unsilent",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_update,		"update",	ex_update,
! 			RANGE|WHOLEFOLD|BANG|FILE1|ARGOPT|DFLALL|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_vglobal,		"vglobal",	ex_global,
! 			RANGE|WHOLEFOLD|EXTRA|DFLALL|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_version,		"version",	ex_version,
! 			EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_verbose,		"verbose",	ex_wrongmodifier,
! 			NEEDARG|RANGE|NOTADR|EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_vertical,	"vertical",	ex_wrongmodifier,
! 			NEEDARG|EXTRA|NOTRLCOM,
! 			ADDR_LINES),
  EX(CMD_visual,		"visual",	ex_edit,
! 			BANG|FILE1|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_view,		"view",		ex_edit,
! 			BANG|FILE1|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_vimgrep,		"vimgrep",	ex_vimgrep,
! 			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
! 			ADDR_LINES),
  EX(CMD_vimgrepadd,	"vimgrepadd",	ex_vimgrep,
! 			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
! 			ADDR_LINES),
  EX(CMD_viusage,		"viusage",	ex_viusage,
! 			TRLBAR,
! 			ADDR_LINES),
  EX(CMD_vmap,		"vmap",		ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_vmapclear,	"vmapclear",	ex_mapclear,
! 			EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_vmenu,		"vmenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_vnoremap,	"vnoremap",	ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_vnew,		"vnew",		ex_splitview,
! 			BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_vnoremenu,	"vnoremenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_vsplit,		"vsplit",	ex_splitview,
! 			BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_vunmap,		"vunmap",	ex_unmap,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_vunmenu,		"vunmenu",	ex_menu,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_write,		"write",	ex_write,
! 			RANGE|WHOLEFOLD|BANG|FILE1|ARGOPT|DFLALL|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_wNext,		"wNext",	ex_wnext,
! 			RANGE|WHOLEFOLD|NOTADR|BANG|FILE1|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_wall,		"wall",		do_wqall,
! 			BANG|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_while,		"while",	ex_while,
! 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_winsize,		"winsize",	ex_winsize,
! 			EXTRA|NEEDARG|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_wincmd,		"wincmd",	ex_wincmd,
! 			NEEDARG|WORD1|RANGE|NOTADR,
! 			ADDR_LINES),
  EX(CMD_windo,		"windo",	ex_listdo,
! 			BANG|NEEDARG|EXTRA|NOTRLCOM,
! 			ADDR_LINES),
  EX(CMD_winpos,		"winpos",	ex_winpos,
! 			EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_wnext,		"wnext",	ex_wnext,
! 			RANGE|NOTADR|BANG|FILE1|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_wprevious,	"wprevious",	ex_wnext,
! 			RANGE|NOTADR|BANG|FILE1|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_wq,		"wq",		ex_exit,
! 			RANGE|WHOLEFOLD|BANG|FILE1|ARGOPT|DFLALL|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_wqall,		"wqall",	do_wqall,
! 			BANG|FILE1|ARGOPT|DFLALL|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_wsverb,		"wsverb",	ex_wsverb,
! 			EXTRA|NOTADR|NEEDARG,
! 			ADDR_LINES),
  EX(CMD_wundo,		"wundo",	ex_wundo,
! 			BANG|NEEDARG|FILE1,
! 			ADDR_LINES),
  EX(CMD_wviminfo,	"wviminfo",	ex_viminfo,
! 			BANG|FILE1|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_xit,		"xit",		ex_exit,
! 			RANGE|WHOLEFOLD|BANG|FILE1|ARGOPT|DFLALL|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_xall,		"xall",		do_wqall,
! 			BANG|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_xmap,		"xmap",		ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_xmapclear,	"xmapclear",	ex_mapclear,
! 			EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_xmenu,		"xmenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_xnoremap,	"xnoremap",	ex_map,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_xnoremenu,	"xnoremenu",	ex_menu,
! 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_xunmap,		"xunmap",	ex_unmap,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_xunmenu,		"xunmenu",	ex_menu,
! 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_yank,		"yank",		ex_operators,
! 			RANGE|WHOLEFOLD|REGSTR|COUNT|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_z,		"z",		ex_z,
! 			RANGE|WHOLEFOLD|EXTRA|EXFLAGS|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  
  /* commands that don't start with a lowercase letter */
  EX(CMD_bang,		"!",		ex_bang,
! 			RANGE|WHOLEFOLD|BANG|FILES|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_pound,		"#",		ex_print,
! 			RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_and,		"&",		do_sub,
! 			RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY,
! 			ADDR_LINES),
  EX(CMD_star,		"*",		ex_at,
! 			RANGE|WHOLEFOLD|EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_lshift,		"<",		ex_operators,
! 			RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN|MODIFY,
! 			ADDR_LINES),
  EX(CMD_equal,		"=",		ex_equal,
! 			RANGE|TRLBAR|DFLALL|EXFLAGS|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_rshift,		">",		ex_operators,
! 			RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN|MODIFY,
! 			ADDR_LINES),
  EX(CMD_at,		"@",		ex_at,
! 			RANGE|WHOLEFOLD|EXTRA|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_Next,		"Next",		ex_previous,
! 			EXTRA|RANGE|NOTADR|COUNT|BANG|EDITCMD|ARGOPT|TRLBAR,
! 			ADDR_LINES),
  EX(CMD_Print,		"Print",	ex_print,
! 			RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN,
! 			ADDR_LINES),
  EX(CMD_X,		"X",		ex_X,
! 			TRLBAR,
! 			ADDR_LINES),
  EX(CMD_tilde,		"~",		do_sub,
! 			RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY,
! 			ADDR_LINES),
  
  #ifndef DO_DECLARE_EXCMD
  #ifdef FEAT_USR_CMDS
***************
*** 1172,1177 ****
--- 1704,1710 ----
      int		addr_count;	/* the number of addresses given */
      linenr_T	line1;		/* the first line number */
      linenr_T	line2;		/* the second line number or count */
+     int		addr_type;	/* type of the count/range */
      int		flags;		/* extra flags after count: EXFLAG_ */
      char_u	*do_ecmd_cmd;	/* +command arg to be used in edited file */
      linenr_T	do_ecmd_lnum;	/* the line number in an edited file */
*** ../vim-7.4.529/src/ex_docmd.c	2014-11-12 15:15:34.975882161 +0100
--- src/ex_docmd.c	2014-11-27 15:26:52.667097859 +0100
***************
*** 60,65 ****
--- 60,66 ----
  # define IS_USER_CMDIDX(idx) (FALSE)
  #endif
  
+ static int compute_buffer_local_count __ARGS((int addr_type, int lnum, int local));
  #ifdef FEAT_EVAL
  static char_u	*do_one_cmd __ARGS((char_u **, int, struct condstack *, char_u *(*fgetline)(int, void *, int), void *cookie));
  #else
***************
*** 133,139 ****
  #endif
  
  static int	check_more __ARGS((int, int));
! static linenr_T get_address __ARGS((char_u **, int skip, int to_other_file));
  static void	get_flags __ARGS((exarg_T *eap));
  #if !defined(FEAT_PERL) \
  	|| !defined(FEAT_PYTHON) || !defined(FEAT_PYTHON3) \
--- 134,140 ----
  #endif
  
  static int	check_more __ARGS((int, int));
! static linenr_T get_address __ARGS((char_u **, int addr_type, int skip, int to_other_file));
  static void	get_flags __ARGS((exarg_T *eap));
  #if !defined(FEAT_PERL) \
  	|| !defined(FEAT_PYTHON) || !defined(FEAT_PYTHON3) \
***************
*** 1680,1685 ****
--- 1681,1719 ----
  }
  #endif
  
+ 
+ /*
+  * Helper function to apply an offset for buffer commands, i.e. ":bdelete",
+  * ":bwipeout", etc.
+  * Returns the buffer number.
+  */
+     static int
+ compute_buffer_local_count(addr_type, lnum, offset)
+     int	    addr_type;
+     int	    lnum;
+     int	    offset;
+ {
+     buf_T   *buf;
+     int     count = offset;
+ 
+     buf = firstbuf;
+     while (buf->b_next != NULL && buf->b_fnum < lnum)
+ 	buf = buf->b_next;
+     while (count != 0)
+     {
+ 	count += (count < 0) ? 1 : -1;
+ 	if (buf->b_prev == NULL)
+ 	    break;
+ 	buf = (count < 0) ? buf->b_prev : buf->b_next;
+ 	if (addr_type == ADDR_LOADED_BUFFERS)
+ 	    /* skip over unloaded buffers */
+ 	    while (buf->b_prev != NULL && buf->b_ml.ml_mfp == NULL)
+ 		buf = (count < 0) ? buf->b_prev : buf->b_next;
+     }
+     return buf->b_fnum;
+ }
+ 
+ 
  /*
   * Execute one Ex command.
   *
***************
*** 1687,1696 ****
   *
   * 1. skip comment lines and leading space
   * 2. handle command modifiers
!  * 3. parse range
!  * 4. parse command
!  * 5. parse arguments
!  * 6. switch on command name
   *
   * Note: "fgetline" can be NULL.
   *
--- 1721,1730 ----
   *
   * 1. skip comment lines and leading space
   * 2. handle command modifiers
!  * 3. parse command
!  * 4. parse range
!  * 6. parse arguments
!  * 7. switch on command name
   *
   * Note: "fgetline" can be NULL.
   *
***************
*** 1730,1735 ****
--- 1764,1772 ----
  #endif
      cmdmod_T		save_cmdmod;
      int			ni;			/* set when Not Implemented */
+     win_T		*wp;
+     tabpage_T		*tp;
+     char_u		*cmd;
  
      vim_memset(&ea, 0, sizeof(ea));
      ea.line1 = 1;
***************
*** 1769,1775 ****
      for (;;)
      {
  /*
!  * 1. skip comment lines and leading white space and colons
   */
  	while (*ea.cmd == ' ' || *ea.cmd == '\t' || *ea.cmd == ':')
  	    ++ea.cmd;
--- 1806,1812 ----
      for (;;)
      {
  /*
!  * 1. Skip comment lines and leading white space and colons.
   */
  	while (*ea.cmd == ' ' || *ea.cmd == '\t' || *ea.cmd == ':')
  	    ++ea.cmd;
***************
*** 1794,1800 ****
  	}
  
  /*
!  * 2. handle command modifiers.
   */
  	p = ea.cmd;
  	if (VIM_ISDIGIT(*ea.cmd))
--- 1831,1837 ----
  	}
  
  /*
!  * 2. Handle command modifiers.
   */
  	p = ea.cmd;
  	if (VIM_ISDIGIT(*ea.cmd))
***************
*** 2003,2009 ****
  #endif
  
  /*
!  * 3. parse a range specifier of the form: addr [,addr] [;addr] ..
   *
   * where 'addr' is:
   *
--- 2040,2057 ----
  #endif
  
  /*
!  * 3. Skip over the range to find the command.  Let "p" point to after it.
!  *
!  * We need the command to know what kind of range it uses.
!  */
!     cmd = ea.cmd;
!     ea.cmd = skip_range(ea.cmd, NULL);
!     if (*ea.cmd == '*' && vim_strchr(p_cpo, CPO_STAR) == NULL)
! 	ea.cmd = skipwhite(ea.cmd + 1);
!     p = find_command(&ea, NULL);
! 
! /*
!  * 4. parse a range specifier of the form: addr [,addr] [;addr] ..
   *
   * where 'addr' is:
   *
***************
*** 2019,2031 ****
   * is equal to the lower.
   */
  
      /* repeat for all ',' or ';' separated addresses */
      for (;;)
      {
  	ea.line1 = ea.line2;
! 	ea.line2 = curwin->w_cursor.lnum;   /* default is current line number */
  	ea.cmd = skipwhite(ea.cmd);
! 	lnum = get_address(&ea.cmd, ea.skip, ea.addr_count == 0);
  	if (ea.cmd == NULL)		    /* error detected */
  	    goto doend;
  	if (lnum == MAXLNUM)
--- 2067,2118 ----
   * is equal to the lower.
   */
  
+     if (ea.cmdidx != CMD_SIZE)
+ 	ea.addr_type = cmdnames[(int)ea.cmdidx].cmd_addr_type;
+     else
+ 	ea.addr_type = ADDR_LINES;
+     ea.cmd = cmd;
+ 
      /* repeat for all ',' or ';' separated addresses */
      for (;;)
      {
  	ea.line1 = ea.line2;
! 	switch (ea.addr_type)
! 	{
! 	    case ADDR_LINES:
! 		/* default is current line number */
! 		ea.line2 = curwin->w_cursor.lnum;
! 		break;
! 	    case ADDR_WINDOWS:
! 		lnum = 0;
! 		for (wp = firstwin; wp != NULL; wp = wp->w_next)
! 		{
! 		    lnum++;
! 		    if (wp == curwin)
! 			break;
! 		}
! 		ea.line2 = lnum;
! 		break;
! 	    case ADDR_ARGUMENTS:
! 		ea.line2 = curwin->w_arg_idx + 1;
! 		break;
! 	    case ADDR_LOADED_BUFFERS:
! 	    case ADDR_UNLOADED_BUFFERS:
! 		ea.line2 = curbuf->b_fnum;
! 		break;
! 	    case ADDR_TABS:
! 		lnum = 0;
! 		for(tp = first_tabpage; tp != NULL; tp = tp->tp_next)
! 		{
! 		    lnum++;
! 		    if (tp == curtab)
! 			break;
! 		}
! 		ea.line2 = lnum;
! 		break;
! 	}
  	ea.cmd = skipwhite(ea.cmd);
! 	lnum = get_address(&ea.cmd, ea.addr_type, ea.skip, ea.addr_count == 0);
  	if (ea.cmd == NULL)		    /* error detected */
  	    goto doend;
  	if (lnum == MAXLNUM)
***************
*** 2033,2040 ****
  	    if (*ea.cmd == '%')		    /* '%' - all lines */
  	    {
  		++ea.cmd;
! 		ea.line1 = 1;
! 		ea.line2 = curbuf->b_ml.ml_line_count;
  		++ea.addr_count;
  	    }
  					    /* '*' - visual area */
--- 2120,2143 ----
  	    if (*ea.cmd == '%')		    /* '%' - all lines */
  	    {
  		++ea.cmd;
! 		switch (ea.addr_type)
! 		{
! 		    case ADDR_LINES:
! 			ea.line1 = 1;
! 			ea.line2 = curbuf->b_ml.ml_line_count;
! 			break;
! 		    case ADDR_WINDOWS:
! 		    case ADDR_LOADED_BUFFERS:
! 		    case ADDR_UNLOADED_BUFFERS:
! 		    case ADDR_TABS:
! 			errormsg = (char_u *)_(e_invrange);
! 			goto doend;
! 			break;
! 		    case ADDR_ARGUMENTS:
! 			ea.line1 = 1;
! 			ea.line2 = ARGCOUNT;
! 			break;
! 		}
  		++ea.addr_count;
  	    }
  					    /* '*' - visual area */
***************
*** 2042,2047 ****
--- 2145,2156 ----
  	    {
  		pos_T	    *fp;
  
+ 		if (ea.addr_type != ADDR_LINES)
+ 		{
+ 		    errormsg = (char_u *)_(e_invrange);
+ 		    goto doend;
+ 		}
+ 
  		++ea.cmd;
  		if (!ea.skip)
  		{
***************
*** 2084,2090 ****
      check_cursor_lnum();
  
  /*
!  * 4. parse command
   */
  
      /*
--- 2193,2199 ----
      check_cursor_lnum();
  
  /*
!  * 5. Parse the command.
   */
  
      /*
***************
*** 2098,2105 ****
       * If we got a line, but no command, then go to the line.
       * If we find a '|' or '\n' we set ea.nextcmd.
       */
!     if (*ea.cmd == NUL || *ea.cmd == '"' ||
! 			       (ea.nextcmd = check_nextcmd(ea.cmd)) != NULL)
      {
  	/*
  	 * strange vi behaviour:
--- 2207,2214 ----
       * If we got a line, but no command, then go to the line.
       * If we find a '|' or '\n' we set ea.nextcmd.
       */
!     if (*ea.cmd == NUL || *ea.cmd == '"'
! 			      || (ea.nextcmd = check_nextcmd(ea.cmd)) != NULL)
      {
  	/*
  	 * strange vi behaviour:
***************
*** 2145,2153 ****
  	goto doend;
      }
  
-     /* Find the command and let "p" point to after it. */
-     p = find_command(&ea, NULL);
- 
  #ifdef FEAT_AUTOCMD
      /* If this looks like an undefined user command and there are CmdUndefined
       * autocommands defined, trigger the matching autocommands. */
--- 2254,2259 ----
***************
*** 2229,2235 ****
  	ea.forceit = FALSE;
  
  /*
!  * 5. parse arguments
   */
      if (!IS_USER_CMDIDX(ea.cmdidx))
  	ea.argt = (long)cmdnames[(int)ea.cmdidx].cmd_argt;
--- 2335,2341 ----
  	ea.forceit = FALSE;
  
  /*
!  * 5. Parse arguments.
   */
      if (!IS_USER_CMDIDX(ea.cmdidx))
  	ea.argt = (long)cmdnames[(int)ea.cmdidx].cmd_argt;
***************
*** 2676,2682 ****
  #endif
  
  /*
!  * 6. switch on command name
   *
   * The "ea" structure holds the arguments that can be used.
   */
--- 2782,2788 ----
  #endif
  
  /*
!  * 6. Switch on command name.
   *
   * The "ea" structure holds the arguments that can be used.
   */
***************
*** 4082,4089 ****
   * Return MAXLNUM when no Ex address was found.
   */
      static linenr_T
! get_address(ptr, skip, to_other_file)
      char_u	**ptr;
      int		skip;	    /* only skip the address, don't use it */
      int		to_other_file;  /* flag: may jump to other file */
  {
--- 4188,4196 ----
   * Return MAXLNUM when no Ex address was found.
   */
      static linenr_T
! get_address(ptr, addr_type, skip, to_other_file)
      char_u	**ptr;
+     int		addr_type;  /* flag: one of ADDR_LINES, ... */
      int		skip;	    /* only skip the address, don't use it */
      int		to_other_file;  /* flag: may jump to other file */
  {
***************
*** 4094,4099 ****
--- 4201,4208 ----
      pos_T	pos;
      pos_T	*fp;
      linenr_T	lnum;
+     win_T	*wp;
+     tabpage_T	*tp;
  
      cmd = skipwhite(*ptr);
      lnum = MAXLNUM;
***************
*** 4102,4238 ****
  	switch (*cmd)
  	{
  	    case '.':			    /* '.' - Cursor position */
! 			++cmd;
  			lnum = curwin->w_cursor.lnum;
  			break;
  
  	    case '$':			    /* '$' - last line */
! 			++cmd;
  			lnum = curbuf->b_ml.ml_line_count;
  			break;
  
  	    case '\'':			    /* ''' - mark */
! 			if (*++cmd == NUL)
  			{
  			    cmd = NULL;
  			    goto error;
  			}
! 			if (skip)
! 			    ++cmd;
! 			else
! 			{
! 			    /* Only accept a mark in another file when it is
! 			     * used by itself: ":'M". */
! 			    fp = getmark(*cmd, to_other_file && cmd[1] == NUL);
! 			    ++cmd;
! 			    if (fp == (pos_T *)-1)
! 				/* Jumped to another file. */
! 				lnum = curwin->w_cursor.lnum;
! 			    else
! 			    {
! 				if (check_mark(fp) == FAIL)
! 				{
! 				    cmd = NULL;
! 				    goto error;
! 				}
! 				lnum = fp->lnum;
! 			    }
! 			}
! 			break;
  
  	    case '/':
  	    case '?':			/* '/' or '?' - search */
! 			c = *cmd++;
! 			if (skip)	/* skip "/pat/" */
! 			{
! 			    cmd = skip_regexp(cmd, c, (int)p_magic, NULL);
! 			    if (*cmd == c)
! 				++cmd;
! 			}
! 			else
! 			{
! 			    pos = curwin->w_cursor; /* save curwin->w_cursor */
! 			    /*
! 			     * When '/' or '?' follows another address, start
! 			     * from there.
! 			     */
! 			    if (lnum != MAXLNUM)
! 				curwin->w_cursor.lnum = lnum;
! 			    /*
! 			     * Start a forward search at the end of the line.
! 			     * Start a backward search at the start of the line.
! 			     * This makes sure we never match in the current
! 			     * line, and can match anywhere in the
! 			     * next/previous line.
! 			     */
! 			    if (c == '/')
! 				curwin->w_cursor.col = MAXCOL;
! 			    else
! 				curwin->w_cursor.col = 0;
! 			    searchcmdlen = 0;
! 			    if (!do_search(NULL, c, cmd, 1L,
! 					       SEARCH_HIS | SEARCH_MSG, NULL))
! 			    {
! 				curwin->w_cursor = pos;
! 				cmd = NULL;
! 				goto error;
! 			    }
! 			    lnum = curwin->w_cursor.lnum;
! 			    curwin->w_cursor = pos;
! 			    /* adjust command string pointer */
! 			    cmd += searchcmdlen;
! 			}
! 			break;
  
  	    case '\\':		    /* "\?", "\/" or "\&", repeat search */
! 			++cmd;
! 			if (*cmd == '&')
! 			    i = RE_SUBST;
! 			else if (*cmd == '?' || *cmd == '/')
! 			    i = RE_SEARCH;
! 			else
! 			{
! 			    EMSG(_(e_backslash));
! 			    cmd = NULL;
! 			    goto error;
! 			}
  
! 			if (!skip)
! 			{
! 			    /*
! 			     * When search follows another address, start from
! 			     * there.
! 			     */
! 			    if (lnum != MAXLNUM)
! 				pos.lnum = lnum;
! 			    else
! 				pos.lnum = curwin->w_cursor.lnum;
  
! 			    /*
! 			     * Start the search just like for the above
! 			     * do_search().
! 			     */
! 			    if (*cmd != '?')
! 				pos.col = MAXCOL;
! 			    else
! 				pos.col = 0;
! 			    if (searchit(curwin, curbuf, &pos,
! 					*cmd == '?' ? BACKWARD : FORWARD,
! 					(char_u *)"", 1L, SEARCH_MSG,
! 						i, (linenr_T)0, NULL) != FAIL)
! 				lnum = pos.lnum;
! 			    else
! 			    {
! 				cmd = NULL;
! 				goto error;
! 			    }
! 			}
! 			++cmd;
! 			break;
  
  	    default:
! 			if (VIM_ISDIGIT(*cmd))	/* absolute line number */
! 			    lnum = getdigits(&cmd);
  	}
  
  	for (;;)
--- 4211,4414 ----
  	switch (*cmd)
  	{
  	    case '.':			    /* '.' - Cursor position */
! 		++cmd;
! 		switch (addr_type)
! 		{
! 		    case ADDR_LINES:
  			lnum = curwin->w_cursor.lnum;
  			break;
+ 		    case ADDR_WINDOWS:
+ 			lnum = 0;
+ 			for (wp = firstwin; wp != NULL; wp = wp->w_next)
+ 			{
+ 			    lnum++;
+ 			    if (wp == curwin)
+ 				break;
+ 			}
+ 			break;
+ 		    case ADDR_ARGUMENTS:
+ 			lnum = curwin->w_arg_idx + 1;
+ 			break;
+ 		    case ADDR_LOADED_BUFFERS:
+ 		    case ADDR_UNLOADED_BUFFERS:
+ 			lnum = curbuf->b_fnum;
+ 			break;
+ 		    case ADDR_TABS:
+ 			lnum = 0;
+ 			for(tp = first_tabpage; tp != NULL; tp = tp->tp_next)
+ 			{
+ 			    lnum++;
+ 			    if (tp == curtab)
+ 				break;
+ 			}
+ 			break;
+ 		}
+ 		break;
  
  	    case '$':			    /* '$' - last line */
! 		++cmd;
! 		switch (addr_type)
! 		{
! 		    case ADDR_LINES:
  			lnum = curbuf->b_ml.ml_line_count;
  			break;
+ 		    case ADDR_WINDOWS:
+ 			lnum = 0;
+ 			for (wp = firstwin; wp != NULL; wp = wp->w_next)
+ 			    lnum++;
+ 			break;
+ 		    case ADDR_ARGUMENTS:
+ 			lnum = ARGCOUNT;
+ 			break;
+ 		    case ADDR_LOADED_BUFFERS:
+ 		    case ADDR_UNLOADED_BUFFERS:
+ 			lnum = lastbuf->b_fnum;
+ 			break;
+ 		    case ADDR_TABS:
+ 			lnum = 0;
+ 			for(tp = first_tabpage; tp != NULL; tp = tp->tp_next)
+ 			    lnum++;
+ 			break;
+ 		}
+ 		break;
  
  	    case '\'':			    /* ''' - mark */
! 		if (*++cmd == NUL)
! 		{
! 		    cmd = NULL;
! 		    goto error;
! 		}
! 		if (addr_type != ADDR_LINES)
! 		{
! 		    EMSG(_(e_invaddr));
! 		    goto error;
! 		}
! 		if (skip)
! 		    ++cmd;
! 		else
! 		{
! 		    /* Only accept a mark in another file when it is
! 		     * used by itself: ":'M". */
! 		    fp = getmark(*cmd, to_other_file && cmd[1] == NUL);
! 		    ++cmd;
! 		    if (fp == (pos_T *)-1)
! 			/* Jumped to another file. */
! 			lnum = curwin->w_cursor.lnum;
! 		    else
! 		    {
! 			if (check_mark(fp) == FAIL)
  			{
  			    cmd = NULL;
  			    goto error;
  			}
! 			lnum = fp->lnum;
! 		    }
! 		}
! 		break;
  
  	    case '/':
  	    case '?':			/* '/' or '?' - search */
! 		c = *cmd++;
! 		if (addr_type != ADDR_LINES)
! 		{
! 		    EMSG(_(e_invaddr));
! 		    goto error;
! 		}
! 		if (skip)	/* skip "/pat/" */
! 		{
! 		    cmd = skip_regexp(cmd, c, (int)p_magic, NULL);
! 		    if (*cmd == c)
! 			++cmd;
! 		}
! 		else
! 		{
! 		    pos = curwin->w_cursor; /* save curwin->w_cursor */
! 		    /*
! 		     * When '/' or '?' follows another address, start
! 		     * from there.
! 		     */
! 		    if (lnum != MAXLNUM)
! 			curwin->w_cursor.lnum = lnum;
! 		    /*
! 		     * Start a forward search at the end of the line.
! 		     * Start a backward search at the start of the line.
! 		     * This makes sure we never match in the current
! 		     * line, and can match anywhere in the
! 		     * next/previous line.
! 		     */
! 		    if (c == '/')
! 			curwin->w_cursor.col = MAXCOL;
! 		    else
! 			curwin->w_cursor.col = 0;
! 		    searchcmdlen = 0;
! 		    if (!do_search(NULL, c, cmd, 1L,
! 				       SEARCH_HIS | SEARCH_MSG, NULL))
! 		    {
! 			curwin->w_cursor = pos;
! 			cmd = NULL;
! 			goto error;
! 		    }
! 		    lnum = curwin->w_cursor.lnum;
! 		    curwin->w_cursor = pos;
! 		    /* adjust command string pointer */
! 		    cmd += searchcmdlen;
! 		}
! 		break;
  
  	    case '\\':		    /* "\?", "\/" or "\&", repeat search */
! 		++cmd;
! 		if (addr_type != ADDR_LINES)
! 		{
! 		    EMSG(_(e_invaddr));
! 		    goto error;
! 		}
! 		if (*cmd == '&')
! 		    i = RE_SUBST;
! 		else if (*cmd == '?' || *cmd == '/')
! 		    i = RE_SEARCH;
! 		else
! 		{
! 		    EMSG(_(e_backslash));
! 		    cmd = NULL;
! 		    goto error;
! 		}
  
! 		if (!skip)
! 		{
! 		    /*
! 		     * When search follows another address, start from
! 		     * there.
! 		     */
! 		    if (lnum != MAXLNUM)
! 			pos.lnum = lnum;
! 		    else
! 			pos.lnum = curwin->w_cursor.lnum;
  
! 		    /*
! 		     * Start the search just like for the above
! 		     * do_search().
! 		     */
! 		    if (*cmd != '?')
! 			pos.col = MAXCOL;
! 		    else
! 			pos.col = 0;
! 		    if (searchit(curwin, curbuf, &pos,
! 				*cmd == '?' ? BACKWARD : FORWARD,
! 				(char_u *)"", 1L, SEARCH_MSG,
! 					i, (linenr_T)0, NULL) != FAIL)
! 			lnum = pos.lnum;
! 		    else
! 		    {
! 			cmd = NULL;
! 			goto error;
! 		    }
! 		}
! 		++cmd;
! 		break;
  
  	    default:
! 		if (VIM_ISDIGIT(*cmd))	/* absolute line number */
! 		    lnum = getdigits(&cmd);
  	}
  
  	for (;;)
***************
*** 4242,4248 ****
  		break;
  
  	    if (lnum == MAXLNUM)
! 		lnum = curwin->w_cursor.lnum;	/* "+1" is same as ".+1" */
  	    if (VIM_ISDIGIT(*cmd))
  		i = '+';		/* "number" is same as "+number" */
  	    else
--- 4418,4457 ----
  		break;
  
  	    if (lnum == MAXLNUM)
! 	    {
! 		switch (addr_type)
! 		{
! 		    case ADDR_LINES:
! 			lnum = curwin->w_cursor.lnum;	/* "+1" is same as ".+1" */
! 			break;
! 		    case ADDR_WINDOWS:
! 			lnum = 0;
! 			for (wp = firstwin; wp != NULL; wp = wp->w_next)
! 			{
! 			    lnum++;
! 			    if (wp == curwin)
! 				break;
! 			}
! 			break;
! 		    case ADDR_ARGUMENTS:
! 			lnum = curwin->w_arg_idx + 1;
! 			break;
! 		    case ADDR_LOADED_BUFFERS:
! 		    case ADDR_UNLOADED_BUFFERS:
! 			lnum = curbuf->b_fnum;
! 			break;
! 		    case ADDR_TABS:
! 			lnum = 0;
! 			for(tp = first_tabpage; tp != NULL; tp = tp->tp_next)
! 			{
! 			    lnum++;
! 			    if (tp == curtab)
! 				break;
! 			}
! 			break;
! 		}
! 	    }
! 
  	    if (VIM_ISDIGIT(*cmd))
  		i = '+';		/* "number" is same as "+number" */
  	    else
***************
*** 4251,4260 ****
  		n = 1;
  	    else
  		n = getdigits(&cmd);
! 	    if (i == '-')
  		lnum -= n;
  	    else
  		lnum += n;
  	}
      } while (*cmd == '/' || *cmd == '?');
  
--- 4460,4518 ----
  		n = 1;
  	    else
  		n = getdigits(&cmd);
! 	    if (addr_type == ADDR_LOADED_BUFFERS
! 		    || addr_type == ADDR_UNLOADED_BUFFERS)
! 		lnum = compute_buffer_local_count(addr_type, lnum, n);
! 	    else if (i == '-')
  		lnum -= n;
  	    else
  		lnum += n;
+ 
+ 	    switch (addr_type)
+ 	    {
+ 		case ADDR_LINES:
+ 		    break;
+ 		case ADDR_ARGUMENTS:
+ 		    if (lnum < 0)
+ 			lnum = 0;
+ 		    else if (lnum >= ARGCOUNT)
+ 			lnum = ARGCOUNT;
+ 		    break;
+ 		case ADDR_TABS:
+ 		    if (lnum < 0)
+ 		    {
+ 			lnum = 0;
+ 			break;
+ 		    }
+ 		    c = 0;
+ 		    for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
+ 			c++;
+ 		    if (lnum >= c)
+ 			lnum = c;
+ 		    break;
+ 		case ADDR_WINDOWS:
+ 		    if (lnum < 0)
+ 		    {
+ 			lnum = 0;
+ 			break;
+ 		    }
+ 		    c = 0;
+ 		    for (wp = firstwin; wp != NULL; wp = wp->w_next)
+ 			c++;
+ 		    if (lnum > c)
+ 			lnum = c;
+ 		    break;
+ 		case ADDR_LOADED_BUFFERS:
+ 		case ADDR_UNLOADED_BUFFERS:
+ 		    if (lnum < firstbuf->b_fnum)
+ 		    {
+ 			lnum = firstbuf->b_fnum;
+ 			break;
+ 		    }
+ 		    if (lnum > lastbuf->b_fnum)
+ 			lnum = lastbuf->b_fnum;
+ 		    break;
+ 	    }
  	}
      } while (*cmd == '/' || *cmd == '?');
  
***************
*** 6556,6561 ****
--- 6814,6823 ----
  ex_quit(eap)
      exarg_T	*eap;
  {
+     win_T	*wp;
+     buf_T	*buf;
+     int		wnr;
+ 
  #ifdef FEAT_CMDWIN
      if (cmdwin_type != 0)
      {
***************
*** 6569,6579 ****
  	text_locked_msg();
  	return;
      }
  #ifdef FEAT_AUTOCMD
      apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
      /* Refuse to quit when locked or when the buffer in the last window is
       * being closed (can only happen in autocommands). */
!     if (curbuf_locked() || (curbuf->b_nwindows == 1 && curbuf->b_closing))
  	return;
  #endif
  
--- 6831,6858 ----
  	text_locked_msg();
  	return;
      }
+     if (eap->addr_count > 0)
+     {
+ 	wnr = eap->line2;
+ 	for (wp = firstwin; --wnr > 0; )
+ 	{
+ 	    if (wp->w_next == NULL)
+ 		break;
+ 	    else
+ 		wp = wp->w_next;
+ 	}
+ 	buf = wp->w_buffer;
+     }
+     else
+     {
+ 	wp = curwin;
+ 	buf = curbuf;
+     }
  #ifdef FEAT_AUTOCMD
      apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
      /* Refuse to quit when locked or when the buffer in the last window is
       * being closed (can only happen in autocommands). */
!     if (curbuf_locked() || (buf->b_nwindows == 1 && buf->b_closing))
  	return;
  #endif
  
***************
*** 6606,6612 ****
  	need_mouse_correct = TRUE;
  # endif
  	/* close window; may free buffer */
! 	win_close(curwin, !P_HID(curwin->w_buffer) || eap->forceit);
  #endif
      }
  }
--- 6885,6891 ----
  	need_mouse_correct = TRUE;
  # endif
  	/* close window; may free buffer */
! 	win_close(wp, !P_HID(wp->w_buffer) || eap->forceit);
  #endif
      }
  }
***************
*** 6668,6673 ****
--- 6947,6954 ----
  ex_close(eap)
      exarg_T	*eap;
  {
+     win_T	*win;
+     int		winnr = 0;
  # ifdef FEAT_CMDWIN
      if (cmdwin_type != 0)
  	cmdwin_result = Ctrl_C;
***************
*** 6678,6684 ****
  		&& !curbuf_locked()
  #endif
  		)
! 	    ex_win_close(eap->forceit, curwin, NULL);
  }
  
  # ifdef FEAT_QUICKFIX
--- 6959,6979 ----
  		&& !curbuf_locked()
  #endif
  		)
! 	{
! 	    if (eap->addr_count == 0)
! 		ex_win_close(eap->forceit, curwin, NULL);
! 	    else {
! 		for (win = firstwin; win != NULL; win = win->w_next)
! 		{
! 		    winnr++;
! 		    if (winnr == eap->line2)
! 			break;
! 		}
! 		if (win == NULL)
! 		    win = lastwin;
! 		ex_win_close(eap->forceit, win, NULL);
! 	    }
! 	}
  }
  
  # ifdef FEAT_QUICKFIX
***************
*** 6804,6809 ****
--- 7099,7106 ----
  	    MSG(_("Already only one tab page"));
  	else
  	{
+ 	    if (eap->addr_count > 0)
+ 		goto_tabpage(eap->line2);
  	    /* Repeat this up to a 1000 times, because autocommands may mess
  	     * up the lists. */
  	    for (done = 0; done < 1000; ++done)
***************
*** 6882,6890 ****
--- 7179,7201 ----
  ex_only(eap)
      exarg_T	*eap;
  {
+     win_T   *wp;
+     int	    wnr;
  # ifdef FEAT_GUI
      need_mouse_correct = TRUE;
  # endif
+     if (eap->addr_count > 0)
+     {
+ 	wnr = eap->line2;
+ 	for (wp = firstwin; --wnr > 0; )
+ 	{
+ 	    if (wp->w_next == NULL)
+ 		break;
+ 	    else
+ 		wp = wp->w_next;
+ 	}
+ 	win_goto(wp);
+     }
      close_others(TRUE, eap->forceit);
  }
  
***************
*** 6906,6911 ****
--- 7217,7225 ----
  ex_hide(eap)
      exarg_T	*eap;
  {
+     win_T	*win;
+     int		winnr = 0;
+ 
      if (*eap->arg != NUL && check_nextcmd(eap->arg) == NULL)
  	eap->errmsg = e_invarg;
      else
***************
*** 6918,6924 ****
  # ifdef FEAT_GUI
  	    need_mouse_correct = TRUE;
  # endif
! 	    win_close(curwin, FALSE);	/* don't free buffer */
  	}
  #endif
      }
--- 7232,7250 ----
  # ifdef FEAT_GUI
  	    need_mouse_correct = TRUE;
  # endif
! 	    if (eap->addr_count == 0)
! 		win_close(curwin, FALSE);	/* don't free buffer */
! 	    else {
! 		for (win = firstwin; win != NULL; win = win->w_next)
! 		{
! 		    winnr++;
! 		    if (winnr == eap->line2)
! 			break;
! 		}
! 		if (win == NULL)
! 		    win = lastwin;
! 		win_close(win, FALSE);
! 	    }
  	}
  #endif
      }
***************
*** 8652,8658 ****
  {
      long	n;
  
!     n = get_address(&eap->arg, FALSE, FALSE);
      if (eap->arg == NULL)	    /* error detected */
      {
  	eap->nextcmd = NULL;
--- 8978,8984 ----
  {
      long	n;
  
!     n = get_address(&eap->arg, eap->addr_type, FALSE, FALSE);
      if (eap->arg == NULL)	    /* error detected */
      {
  	eap->nextcmd = NULL;
*** ../vim-7.4.529/src/testdir/Make_amiga.mak	2014-10-21 20:57:11.534295006 +0200
--- src/testdir/Make_amiga.mak	2014-11-27 14:26:52.158639284 +0100
***************
*** 36,44 ****
--- 36,46 ----
  		test94.out test95.out test96.out test97.out test98.out \
  		test99.out test100.out test101.out test102.out test103.out \
  		test104.out test105.out test106.out test107.out \
+ 		test_argument_count.out \
  		test_autoformat_join.out \
  		test_breakindent.out \
  		test_changelist.out \
+ 		test_close_count.out \
  		test_eval.out \
  		test_insertcount.out \
  		test_listlbr.out \
***************
*** 171,179 ****
--- 173,183 ----
  test105.out: test105.in
  test106.out: test106.in
  test107.out: test107.in
+ test_argument_count.out: test_argument_count.in
  test_autoformat_join.out: test_autoformat_join.in
  test_breakindent.out: test_breakindent.in
  test_changelist.out: test_changelist.in
+ test_close_count.out: test_close_count.in
  test_eval.out: test_eval.in
  test_insertcount.out: test_insertcount.in
  test_listlbr.out: test_listlbr.in
*** ../vim-7.4.529/src/testdir/Make_dos.mak	2014-11-05 15:46:06.212643292 +0100
--- src/testdir/Make_dos.mak	2014-11-27 14:26:56.750588700 +0100
***************
*** 35,43 ****
--- 35,45 ----
  		test94.out test95.out test96.out test98.out test99.out \
  		test100.out test101.out test102.out test103.out test104.out \
  		test105.out test106.out  test107.out\
+ 		test_argument_count.out \
  		test_autoformat_join.out \
  		test_breakindent.out \
  		test_changelist.out \
+ 		test_close_count.out \
  		test_eval.out \
  		test_insertcount.out \
  		test_listlbr.out \
*** ../vim-7.4.529/src/testdir/Make_ming.mak	2014-11-05 14:26:30.764758363 +0100
--- src/testdir/Make_ming.mak	2014-11-27 14:26:59.638556887 +0100
***************
*** 57,65 ****
--- 57,67 ----
  		test94.out test95.out test96.out test98.out test99.out \
  		test100.out test101.out test102.out test103.out test104.out \
  		test105.out test106.out test107.out \
+ 		test_argument_count.out \
  		test_autoformat_join.out \
  		test_breakindent.out \
  		test_changelist.out \
+ 		test_close_count.out \
  		test_eval.out \
  		test_insertcount.out \
  		test_listlbr.out \
*** ../vim-7.4.529/src/testdir/Make_os2.mak	2014-11-05 14:26:30.764758363 +0100
--- src/testdir/Make_os2.mak	2014-11-27 14:27:02.438526044 +0100
***************
*** 37,45 ****
--- 37,47 ----
  		test94.out test95.out test96.out test98.out test99.out \
  		test100.out test101.out test102.out test103.out test104.out \
  		test105.out test106.out test107.out \
+ 		test_argument_count.out \
  		test_autoformat_join.out \
  		test_breakindent.out \
  		test_changelist.out \
+ 		test_close_count.out \
  		test_eval.out \
  		test_insertcount.out \
  		test_listlbr.out \
*** ../vim-7.4.529/src/testdir/Make_vms.mms	2014-10-21 20:57:11.538295006 +0200
--- src/testdir/Make_vms.mms	2014-11-27 14:27:08.046464270 +0100
***************
*** 4,10 ****
  # Authors:	Zoltan Arpadffy, <arpadffy@polarhome.com>
  #		Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
  #
! # Last change:  2014 Aug 16
  #
  # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
  # Edit the lines in the Configuration section below to select.
--- 4,10 ----
  # Authors:	Zoltan Arpadffy, <arpadffy@polarhome.com>
  #		Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
  #
! # Last change:  2014 Nov 27
  #
  # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
  # Edit the lines in the Configuration section below to select.
***************
*** 45,51 ****
  # It fails because VMS does not support this feature yet.
  # WANT_MZSCH = YES
  
! # Comment out if you have ODS-5 file system                                                                                                                 
  # HAVE_ODS5 = YES
  
  # Comment out if you have gzip on your system
--- 45,51 ----
  # It fails because VMS does not support this feature yet.
  # WANT_MZSCH = YES
  
! # Comment out if you have ODS-5 file system
  # HAVE_ODS5 = YES
  
  # Comment out if you have gzip on your system
***************
*** 54,63 ****
  # Comment out if you have GNU compatible diff on your system
  # HAVE_GDIFF = YES
  
! # Comment out if you have GNU compatible cksum on your system                                                                                                  
  # HAVE_CKSUM = YES
  
! # Comment out if you have ICONV support                                                                                                  
  # HAVE_ICONV = YES
  
  # Comment out if you have LUA support
--- 54,63 ----
  # Comment out if you have GNU compatible diff on your system
  # HAVE_GDIFF = YES
  
! # Comment out if you have GNU compatible cksum on your system
  # HAVE_CKSUM = YES
  
! # Comment out if you have ICONV support
  # HAVE_ICONV = YES
  
  # Comment out if you have LUA support
***************
*** 96,104 ****
--- 96,106 ----
  	 test95.out test96.out test98.out test99.out \
  	 test100.out test101.out test103.out test104.out \
  	 test105.out test106.out test107.out \
+ 	 test_argument_count.out \
  	 test_autoformat_join.out \
  	 test_breakindent.out \
  	 test_changelist.out \
+ 	 test_close_count.out \
  	 test_eval.out \
  	 test_insertcount.out \
  	 test_listlbr.out \
*** ../vim-7.4.529/src/testdir/Makefile	2014-11-05 14:26:30.764758363 +0100
--- src/testdir/Makefile	2014-11-27 14:27:27.670248103 +0100
***************
*** 33,41 ****
--- 33,43 ----
  		test94.out test95.out test96.out test97.out test98.out \
  		test99.out test100.out test101.out test102.out test103.out \
  		test104.out test105.out test106.out test107.out \
+ 		test_argument_count.out \
  		test_autoformat_join.out \
  		test_breakindent.out \
  		test_changelist.out \
+ 		test_close_count.out \
  		test_eval.out \
  		test_insertcount.out \
  		test_listlbr.out \
*** ../vim-7.4.529/src/testdir/test_argument_count.in	2014-11-27 16:17:51.473604272 +0100
--- src/testdir/test_argument_count.in	2014-11-27 14:21:34.394139791 +0100
***************
*** 0 ****
--- 1,47 ----
+ Tests for :[count]argument! and :[count]argdelete     vim: set ft=vim :
+ 
+ STARTTEST
+ :%argd
+ :argadd a b c d
+ :set hidden
+ :let buffers = []
+ :augroup TEST
+ :au BufEnter * call add(buffers, expand('%:t'))
+ :augroup END
+ :$argu
+ :$-argu
+ :-argu
+ :1argu
+ :+2argu
+ :augroup TEST
+ :au!
+ :augroup END
+ :let arglists = []
+ :.argd
+ :call add(arglists, argv())
+ :-argd
+ :call add(arglists, argv())
+ :$argd
+ :call add(arglists, argv())
+ :1arga c
+ :1arga b
+ :$argu
+ :+arga d
+ :$arga x
+ :call add(arglists, argv())
+ :$-10arga Y
+ :call add(arglists, argv())
+ :%argd
+ :call add(arglists, argv())
+ :arga a b c d e f
+ :2,$-argd
+ :call add(arglists, argv())
+ :e! test.out
+ :call append(0, buffers)
+ :let lnr = line('$')
+ :call append(lnr, map(copy(arglists), 'join(v:val, " ")'))
+ :w
+ :qa!
+ ENDTEST
+ 
+ 
*** ../vim-7.4.529/src/testdir/test_argument_count.ok	2014-11-27 16:17:51.477604229 +0100
--- src/testdir/test_argument_count.ok	2014-11-27 14:21:34.394139791 +0100
***************
*** 0 ****
--- 1,13 ----
+ d
+ c
+ b
+ a
+ c
+ 
+ a b d
+ a d
+ a
+ a b c d x
+ Y a b c d x
+ 
+ a f
*** ../vim-7.4.529/src/testdir/test_close_count.in	2014-11-27 16:17:51.485604140 +0100
--- src/testdir/test_close_count.in	2014-11-27 14:21:34.394139791 +0100
***************
*** 0 ****
--- 1,156 ----
+ Tests for :[count]close! and :[count]hide     vim: set ft=vim :
+ 
+ STARTTEST
+ :let tests = []
+ :so tiny.vim
+ :for i in range(5)
+ :new
+ :endfor
+ :4wincmd w
+ :close!
+ :let buffers = []
+ :windo call add(buffers, bufnr('%'))
+ :call add(tests, buffers)
+ :1close!
+ :let buffers = []
+ :windo call add(buffers, bufnr('%'))
+ :call add(tests, buffers)
+ :$close!
+ :let buffers = []
+ :windo call add(buffers, bufnr('%'))
+ :call add(tests, buffers)
+ :1wincmd w
+ :2close!
+ :let buffers = []
+ :windo call add(buffers, bufnr('%'))
+ :call add(tests, buffers)
+ :1wincmd w
+ :new
+ :new
+ :2wincmd w
+ :-2close!
+ :let buffers = []
+ :windo call add(buffers, bufnr('%'))
+ :call add(tests, buffers)
+ :2wincmd w
+ :+1close!
+ :let buffers = []
+ :windo call add(buffers, bufnr('%'))
+ :call add(tests, buffers)
+ :e! test.out
+ :call append(0, map(copy(tests), 'join(v:val, " ")'))
+ :w
+ :only!
+ :b1
+ ENDTEST
+ 
+ STARTTEST
+ :let tests = []
+ :so tiny.vim
+ :for i in range(5)
+ :new
+ :endfor
+ :let buffers = []
+ :windo call add(buffers, bufnr('%'))
+ :call add(tests, buffers)
+ :4wincmd w
+ :.hide
+ :let buffers = []
+ :windo call add(buffers, bufnr('%'))
+ :call add(tests, buffers)
+ :1hide
+ :let buffers = []
+ :windo call add(buffers, bufnr('%'))
+ :call add(tests, buffers)
+ :9hide
+ :let buffers = []
+ :windo call add(buffers, bufnr('%'))
+ :call add(tests, buffers)
+ :1wincmd w
+ :2hide
+ :let buffers = []
+ :windo call add(buffers, bufnr('%'))
+ :call add(tests, buffers)
+ :1wincmd w
+ :new
+ :new
+ :3wincmd w
+ :-hide
+ :let buffers = []
+ :windo call add(buffers, bufnr('%'))
+ :call add(tests, buffers)
+ :2wincmd w
+ :+hide
+ :let buffers = []
+ :windo call add(buffers, bufnr('%'))
+ :call add(tests, buffers)
+ :e! test.out
+ :call append(line('$'), map(copy(tests), 'join(v:val, " ")'))
+ Go
+ :w
+ :only!
+ :b1
+ ENDTEST
+ 
+ STARTTEST
+ :let tests = []
+ :so tiny.vim
+ :set hidden
+ :for i in range(5)
+ :new
+ :endfor
+ :1wincmd w
+ :$ hide
+ :let buffers = []
+ :windo call add(buffers, bufnr('%'))
+ :call add(tests, buffers)
+ :$-1 close!
+ :let buffers = []
+ :windo call add(buffers, bufnr('%'))
+ :call add(tests, buffers)
+ :1wincmd w
+ :.+close!
+ :let buffers = []
+ :windo call add(buffers, bufnr('%'))
+ :call add(tests, buffers)
+ :e! test.out
+ :call append(line('$'), map(copy(tests), 'join(v:val, " ")'))
+ Go
+ :w
+ :only!
+ :b1
+ ENDTEST
+ 
+ STARTTEST
+ :let tests = []
+ :so tiny.vim
+ :set hidden
+ :for i in range(5)
+ :new
+ :endfor
+ :4wincmd w
+ c
+ :let buffers = []
+ :windo call add(buffers, bufnr('%'))
+ :call add(tests, buffers)
+ 1c
+ :let buffers = []
+ :windo call add(buffers, bufnr('%'))
+ :call add(tests, buffers)
+ 9c
+ :let buffers = []
+ :windo call add(buffers, bufnr('%'))
+ :call add(tests, buffers)
+ :1wincmd w
+ 2c
+ :let buffers = []
+ :windo call add(buffers, bufnr('%'))
+ :call add(tests, buffers)
+ :only!
+ :e! test.out
+ :call append(line('$'), map(copy(tests), 'join(v:val, " ")'))
+ :w
+ :qa!
+ ENDTEST
+ 
+ 
*** ../vim-7.4.529/src/testdir/test_close_count.ok	2014-11-27 16:17:51.489604097 +0100
--- src/testdir/test_close_count.ok	2014-11-27 14:21:34.394139791 +0100
***************
*** 0 ****
--- 1,23 ----
+ 6 5 4 2 1
+ 5 4 2 1
+ 5 4 2
+ 5 2
+ 7 5 2
+ 7 5
+ 
+ 13 12 11 10 9 1
+ 13 12 11 9 1
+ 12 11 9 1
+ 12 11 9
+ 12 9
+ 15 12 9
+ 15 12
+ 
+ 20 19 18 17 16
+ 20 19 18 16
+ 20 18 16
+ 
+ 25 24 23 21 1
+ 24 23 21 1
+ 24 23 21
+ 24 21
*** ../vim-7.4.529/src/window.c	2014-11-19 13:40:04.903715962 +0100
--- src/window.c	2014-11-27 14:21:34.394139791 +0100
***************
*** 199,212 ****
      case Ctrl_Q:
      case 'q':
  		reset_VIsual_and_resel();	/* stop Visual mode */
! 		do_cmdline_cmd((char_u *)"quit");
  		break;
  
  /* close current window */
      case Ctrl_C:
      case 'c':
  		reset_VIsual_and_resel();	/* stop Visual mode */
! 		do_cmdline_cmd((char_u *)"close");
  		break;
  
  #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
--- 199,220 ----
      case Ctrl_Q:
      case 'q':
  		reset_VIsual_and_resel();	/* stop Visual mode */
! 		STRCPY(cbuf, "quit");
! 		if (Prenum)
! 		    vim_snprintf((char *)cbuf + 4, sizeof(cbuf) - 5,
! 							    "%ld", Prenum);
! 		do_cmdline_cmd(cbuf);
  		break;
  
  /* close current window */
      case Ctrl_C:
      case 'c':
  		reset_VIsual_and_resel();	/* stop Visual mode */
! 		STRCPY(cbuf, "close");
! 		if (Prenum)
! 		    vim_snprintf((char *)cbuf + 5, sizeof(cbuf) - 5,
! 							       "%ld", Prenum);
! 		do_cmdline_cmd(cbuf);
  		break;
  
  #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
***************
*** 235,241 ****
      case 'o':
  		CHECK_CMDWIN
  		reset_VIsual_and_resel();	/* stop Visual mode */
! 		do_cmdline_cmd((char_u *)"only");
  		break;
  
  /* cursor to next window with wrap around */
--- 243,253 ----
      case 'o':
  		CHECK_CMDWIN
  		reset_VIsual_and_resel();	/* stop Visual mode */
! 		STRCPY(cbuf, "only");
! 		if (Prenum > 0)
! 		    vim_snprintf((char *)cbuf + 4, sizeof(cbuf) - 4,
! 								"%ld", Prenum);
! 		do_cmdline_cmd(cbuf);
  		break;
  
  /* cursor to next window with wrap around */
*** ../vim-7.4.529/src/version.c	2014-11-27 14:09:09.490354943 +0100
--- src/version.c	2014-11-27 14:21:15.250350688 +0100
***************
*** 743,744 ****
--- 743,746 ----
  {   /* Add new patch number below this line */
+ /**/
+     530,
  /**/

-- 
A fool must search for a greater fool to find admiration.

 /// 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    ///
