view src/ex_cmds.h @ 34394:a400c8f9506f v9.1.0123

patch 9.1.0123: MS-Windows: system() may deadlock Commit: https://github.com/vim/vim/commit/52ecc76c7fa1865603f27bc838efaeaa03cad77c Author: GuyBrush <miguel.barro@live.com> Date: Wed Feb 21 20:16:38 2024 +0100 patch 9.1.0123: MS-Windows: system() may deadlock Problem: MS-Windows: system() may deadlock when calling binaries that expect stdin Solution: Ignore the SHELL_EXPAND flag (GuyBrush) This happens on binaries that expect stdin. For example: :echo system("xxd") will cause a deadlock. SHELL_EXPAND is a flag devoted to support the linux implementation of the backtick-expansion mechanism. On linux backtic-expansion relies in the function mch_expand_wildchars() (os_unix.c) that delegates on each specific shell (bash, sh, csh, zsh) the expansion. Basically it composes a shell command that does the expansion and redirects the output to a file and call_shell() it. On windows backtick-expansion is performed by Vim itself. On linux SHELL_EXPAND modifies how mch_call_shell_fork() (os_unix.c) works. This function: - relies on posix fork() to spawn a child process to execute a external command. - Child and parent process communicate using pipes (or pseudoterminal if available). User input (type ahead content) is processed in a loop only if !(SHELL_EXPAND || SHELL_COOKED). Though signals are used to detect Ctrl-C in all cases (the input loop is not necessary to interrupt the function). In the backtick-expansion the external command is the shell command that provides the expansion. For the child redirection: - SHELL_EXPAND replaces stdin, stdout & stderr to /dev/null. This is why the shell command composed includes redirection (otherwise output would be lost). - !SHELL_EXPAND replaces stdin, stdout & stderr with the parent created pipes (or pseudoterminal). Note that the use of SIGINT signal prevents mch_call_shell_fork() from hanging vim. On Windows mch_system_piped() (os_win32.c) (which is only used when the GUI is running) mimics mch_call_shell_fork() (os_unix.c). Win32 lacks fork() and relies on CreateProcessW() and only has pipe support (not pseudoterminal) which makes the implementation much different. But, the key idea is that windows lacks signals, the OS provides support for console apps but gvim is not one. The only way of detecting a Ctrl-C is actually processing user input (type ahead content). By ignoring the user input under SHELL_EXPAND the function can hang gvim. Ignoring SHELL_EXPAND flag has no consequence in Windows because as mentioned above it is only meaningful in linux. closes: #13988 Signed-off-by: GuyBrush <miguel.barro@live.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Wed, 21 Feb 2024 20:30:02 +0100
parents 7c30841c60a0
children dd8f5311cee5
line wrap: on
line source

/* vi:set ts=8 sts=4 sw=4 noet:
 *
 * VIM - Vi IMproved	by Bram Moolenaar
 *
 * Do ":help uganda"  in Vim to read copying and usage conditions.
 * Do ":help credits" in Vim to see a list of people who contributed.
 */

/*
 * This file defines the Ex commands.
 * When DO_DECLARE_EXCMD is defined, the table with ex command names and
 * options results.
 * When DO_DECLARE_EXCMD is NOT defined, the enum with all the Ex commands
 * results.
 * This clever trick was invented by Ron Aaron.
 */

/*
 * When adding an Ex command:
 * 1. Add an entry in the table below.  Keep it sorted on the shortest
 *    version of the command name that works.  If it doesn't start with a
 *    lower case letter, add it at the end.
 * 2. Run "make cmdidxs" to re-generate ex_cmdidxs.h.
 * 3. Add a "case: CMD_xxx" in the big switch in ex_docmd.c.
 * 4. Add an entry in the index for Ex commands at ":help ex-cmd-index".
 * 5. Add documentation in ../doc/xxx.txt.  Add a tag for both the short and
 *    long name of the command.
 */

#define EX_RANGE	0x001	// allow a linespecs
#define EX_BANG		0x002	// allow a ! after the command name
#define EX_EXTRA	0x004	// allow extra args after command name
#define EX_XFILE	0x008	// expand wildcards in extra part
#define EX_NOSPC	0x010	// no spaces allowed in the extra part
#define	EX_DFLALL	0x020	// default file range is 1,$
#define EX_WHOLEFOLD	0x040	// extend range to include whole fold also
				// when less than two numbers given
#define EX_NEEDARG	0x080	// argument required
#define EX_TRLBAR	0x100	// check for trailing vertical bar
#define EX_REGSTR	0x200	// allow "x for register designation
#define EX_COUNT	0x400	// allow count in argument, after command
#define EX_NOTRLCOM	0x800	// no trailing comment allowed
#define EX_ZEROR       0x1000	// zero line number allowed
#define EX_CTRLV       0x2000	// do not remove CTRL-V from argument
#define EX_CMDARG      0x4000	// allow "+command" argument
#define EX_BUFNAME     0x8000	// accepts buffer name
#define EX_BUFUNL     0x10000	// accepts unlisted buffer too
#define EX_ARGOPT     0x20000	// allow "++opt=val" argument
#define EX_SBOXOK     0x40000	// allowed in the sandbox
#define EX_CMDWIN     0x80000	// allowed in cmdline window
#define EX_MODIFY    0x100000	// forbidden in non-'modifiable' buffer
#define EX_FLAGS     0x200000	// allow flags after count in argument
#define EX_RESTRICT  0x400000	// forbidden in restricted mode
#define EX_EXPAND    0x800000	// expands wildcards later
#define EX_LOCK_OK  0x1000000	// command can be executed when textlock is
				// set; when missing disallows editing another
				// buffer when curbuf_lock is set
#define EX_NONWHITE_OK 0x2000000  // command can be followed by non-white
#define EX_KEEPSCRIPT  0x4000000  // keep sctx of where command was invoked
#define EX_EXPR_ARG    0x8000000  // argument is an expression
#define EX_WHOLE      0x10000000  // command name cannot be shortened in Vim9
#define EX_EXPORT     0x20000000  // command can be used after :export

#define EX_FILES (EX_XFILE | EX_EXTRA)	// multiple extra files allowed
#define EX_FILE1 (EX_FILES | EX_NOSPC)	// 1 file, defaults to current file
#define EX_WORD1 (EX_EXTRA | EX_NOSPC)	// one extra word allowed

#ifndef DO_DECLARE_EXCMD
/*
 * values for cmd_addr_type
 */
typedef enum {
    ADDR_LINES,		 // buffer line numbers
    ADDR_WINDOWS,	 // window number
    ADDR_ARGUMENTS,	 // argument number
    ADDR_LOADED_BUFFERS, // buffer number of loaded buffer
    ADDR_BUFFERS,	 // buffer number
    ADDR_TABS,		 // tab page number
    ADDR_TABS_RELATIVE,	 // Tab page that only relative
    ADDR_QUICKFIX_VALID, // quickfix list valid entry number
    ADDR_QUICKFIX,	 // quickfix list entry number
    ADDR_UNSIGNED,	 // positive count or zero, defaults to 1
    ADDR_OTHER,		 // something else, use line number for '$', '%', etc.
    ADDR_NONE		 // no range used
} cmd_addr_T;
#endif

#ifndef DO_DECLARE_EXCMD
typedef struct exarg exarg_T;
#endif

/*
 * This array maps ex command names to command codes.
 * The order in which command names are listed below is significant --
 * ambiguous abbreviations are always resolved to be the first possible match
 * (e.g. "r" is taken to mean "read", not "rewind", because "read" comes
 * before "rewind").
 * Not supported commands are included to avoid ambiguities.
 */
#ifdef DO_DECLARE_EXCMD
# define EXCMD(a, b, c, d, e) \
	{(char_u *)b, c, (long_u)(d), e}

typedef void (*ex_func_T) (exarg_T *eap);

static struct cmdname
{
    char_u	*cmd_name;	// name of the command
    ex_func_T   cmd_func;	// function for this command
    long_u	cmd_argt;	// flags declared above
    cmd_addr_T	cmd_addr_type;	// flag for address type
} cmdnames[] =
#else
# define EXCMD(a, b, c, d, e)  a
enum CMD_index
#endif
{
EXCMD(CMD_append,	"append",	ex_append,
	EX_BANG|EX_RANGE|EX_ZEROR|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_MODIFY,
	ADDR_LINES),
EXCMD(CMD_abbreviate,	"abbreviate",	ex_abbreviate,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_abclear,	"abclear",	ex_abclear,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_aboveleft,	"aboveleft",	ex_wrongmodifier,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM,
	ADDR_NONE),
EXCMD(CMD_abstract,	"abstract",	ex_class,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_EXPORT,
	ADDR_NONE),
EXCMD(CMD_all,		"all",		ex_all,
	EX_BANG|EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_amenu,	"amenu",	ex_menu,
	EX_RANGE|EX_ZEROR|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_anoremenu,	"anoremenu",	ex_menu,
	EX_RANGE|EX_ZEROR|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_args,		"args",		ex_args,
	EX_BANG|EX_FILES|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_argadd,	"argadd",	ex_argadd,
	EX_BANG|EX_RANGE|EX_ZEROR|EX_FILES|EX_TRLBAR,
	ADDR_ARGUMENTS),
EXCMD(CMD_argdelete,	"argdelete",	ex_argdelete,
	EX_BANG|EX_RANGE|EX_FILES|EX_TRLBAR,
	ADDR_ARGUMENTS),
EXCMD(CMD_argdo,	"argdo",	ex_listdo,
	EX_BANG|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_RANGE|EX_DFLALL|EX_EXPAND,
	ADDR_ARGUMENTS),
EXCMD(CMD_argdedupe,	"argdedupe",	ex_argdedupe,
	EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_argedit,	"argedit",	ex_argedit,
	EX_BANG|EX_NEEDARG|EX_RANGE|EX_ZEROR|EX_FILES|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_ARGUMENTS),
EXCMD(CMD_argglobal,	"argglobal",	ex_args,
	EX_BANG|EX_FILES|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_arglocal,	"arglocal",	ex_args,
	EX_BANG|EX_FILES|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_argument,	"argument",	ex_argument,
	EX_BANG|EX_RANGE|EX_COUNT|EX_EXTRA|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_ARGUMENTS),
EXCMD(CMD_ascii,	"ascii",	do_ascii,
	EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_autocmd,	"autocmd",	ex_autocmd,
	EX_BANG|EX_EXTRA|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_augroup,	"augroup",	ex_autocmd,
	EX_BANG|EX_WORD1|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_aunmenu,	"aunmenu",	ex_menu,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_buffer,	"buffer",	ex_buffer,
	EX_BANG|EX_RANGE|EX_BUFNAME|EX_BUFUNL|EX_COUNT|EX_EXTRA|EX_CMDARG|EX_TRLBAR,
	ADDR_BUFFERS),
EXCMD(CMD_bNext,	"bNext",	ex_bprevious,
	EX_BANG|EX_RANGE|EX_COUNT|EX_CMDARG|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_ball,		"ball",		ex_buffer_all,
	EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_badd,		"badd",		ex_edit,
	EX_NEEDARG|EX_FILE1|EX_CMDARG|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_balt,		"balt",		ex_edit,
	EX_NEEDARG|EX_FILE1|EX_CMDARG|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_bdelete,	"bdelete",	ex_bunload,
	EX_BANG|EX_RANGE|EX_BUFNAME|EX_COUNT|EX_EXTRA|EX_TRLBAR,
	ADDR_BUFFERS),
EXCMD(CMD_behave,	"behave",	ex_behave,
	EX_BANG|EX_NEEDARG|EX_WORD1|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_belowright,	"belowright",	ex_wrongmodifier,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM,
	ADDR_NONE),
EXCMD(CMD_bfirst,	"bfirst",	ex_brewind,
	EX_BANG|EX_RANGE|EX_CMDARG|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_blast,	"blast",	ex_blast,
	EX_BANG|EX_RANGE|EX_CMDARG|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_bmodified,	"bmodified",	ex_bmodified,
	EX_BANG|EX_RANGE|EX_COUNT|EX_CMDARG|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_bnext,	"bnext",	ex_bnext,
	EX_BANG|EX_RANGE|EX_COUNT|EX_CMDARG|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_botright,	"botright",	ex_wrongmodifier,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM,
	ADDR_NONE),
EXCMD(CMD_bprevious,	"bprevious",	ex_bprevious,
	EX_BANG|EX_RANGE|EX_COUNT|EX_CMDARG|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_brewind,	"brewind",	ex_brewind,
	EX_BANG|EX_RANGE|EX_CMDARG|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_break,	"break",	ex_break,
	EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE,
	ADDR_NONE),
EXCMD(CMD_breakadd,	"breakadd",	ex_breakadd,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_breakdel,	"breakdel",	ex_breakdel,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_breaklist,	"breaklist",	ex_breaklist,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_browse,	"browse",	ex_wrongmodifier,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_buffers,	"buffers",	buflist_list,
	EX_BANG|EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_bufdo,	"bufdo",	ex_listdo,
	EX_BANG|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_RANGE|EX_DFLALL|EX_EXPAND,
	ADDR_BUFFERS),
EXCMD(CMD_bunload,	"bunload",	ex_bunload,
	EX_BANG|EX_RANGE|EX_BUFNAME|EX_COUNT|EX_EXTRA|EX_TRLBAR,
	ADDR_LOADED_BUFFERS),
EXCMD(CMD_bwipeout,	"bwipeout",	ex_bunload,
	EX_BANG|EX_RANGE|EX_BUFNAME|EX_BUFUNL|EX_COUNT|EX_EXTRA|EX_TRLBAR,
	ADDR_BUFFERS),
EXCMD(CMD_change,	"change",	ex_change,
	EX_BANG|EX_WHOLEFOLD|EX_RANGE|EX_COUNT|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_MODIFY,
	ADDR_LINES),
EXCMD(CMD_cNext,	"cNext",	ex_cnext,
	EX_RANGE|EX_COUNT|EX_TRLBAR|EX_BANG,
	ADDR_UNSIGNED),
EXCMD(CMD_cNfile,	"cNfile",	ex_cnext,
	EX_RANGE|EX_COUNT|EX_TRLBAR|EX_BANG,
	ADDR_UNSIGNED),
EXCMD(CMD_cabbrev,	"cabbrev",	ex_abbreviate,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_cabclear,	"cabclear",	ex_abclear,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_cabove,	"cabove",	ex_cbelow,
	EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_UNSIGNED),
EXCMD(CMD_caddbuffer,	"caddbuffer",	ex_cbuffer,
	EX_RANGE|EX_WORD1|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_caddexpr,	"caddexpr",	ex_cexpr,
	EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_EXPR_ARG,
	ADDR_NONE),
EXCMD(CMD_caddfile,	"caddfile",	ex_cfile,
	EX_TRLBAR|EX_FILE1,
	ADDR_NONE),
EXCMD(CMD_cafter,	"cafter",	ex_cbelow,
	EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_UNSIGNED),
EXCMD(CMD_call,		"call",		ex_call,
	EX_RANGE|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_LINES),
EXCMD(CMD_catch,	"catch",	ex_catch,
	EX_EXTRA|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE,
	ADDR_NONE),
EXCMD(CMD_cbuffer,	"cbuffer",	ex_cbuffer,
	EX_BANG|EX_RANGE|EX_WORD1|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_cbefore,	"cbefore",	ex_cbelow,
	EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_UNSIGNED),
EXCMD(CMD_cbelow,	"cbelow",	ex_cbelow,
	EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_UNSIGNED),
EXCMD(CMD_cbottom,	"cbottom",	ex_cbottom,
	EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_cc,		"cc",		ex_cc,
	EX_RANGE|EX_COUNT|EX_TRLBAR|EX_BANG,
	ADDR_QUICKFIX),
EXCMD(CMD_cclose,	"cclose",	ex_cclose,
	EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_cd,		"cd",		ex_cd,
	EX_BANG|EX_FILE1|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_cdo,		"cdo",		ex_listdo,
	EX_BANG|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_RANGE|EX_DFLALL|EX_EXPAND,
	ADDR_QUICKFIX_VALID),
EXCMD(CMD_center,	"center",	ex_align,
	EX_TRLBAR|EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_MODIFY,
	ADDR_LINES),
EXCMD(CMD_cexpr,	"cexpr",	ex_cexpr,
	EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_EXPR_ARG|EX_BANG,
	ADDR_NONE),
EXCMD(CMD_cfile,	"cfile",	ex_cfile,
	EX_TRLBAR|EX_FILE1|EX_BANG,
	ADDR_NONE),
EXCMD(CMD_cfdo,		"cfdo",		ex_listdo,
	EX_BANG|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_RANGE|EX_DFLALL|EX_EXPAND,
	ADDR_QUICKFIX_VALID),
EXCMD(CMD_cfirst,	"cfirst",	ex_cc,
	EX_RANGE|EX_COUNT|EX_TRLBAR|EX_BANG,
	ADDR_UNSIGNED),
EXCMD(CMD_cgetfile,	"cgetfile",	ex_cfile,
	EX_TRLBAR|EX_FILE1,
	ADDR_NONE),
EXCMD(CMD_cgetbuffer,	"cgetbuffer",	ex_cbuffer,
	EX_RANGE|EX_WORD1|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_cgetexpr,	"cgetexpr",	ex_cexpr,
	EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_EXPR_ARG,
	ADDR_NONE),
EXCMD(CMD_chdir,	"chdir",	ex_cd,
	EX_BANG|EX_FILE1|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_changes,	"changes",	ex_changes,
	EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_checkpath,	"checkpath",	ex_checkpath,
	EX_TRLBAR|EX_BANG|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_checktime,	"checktime",	ex_checktime,
	EX_RANGE|EX_BUFNAME|EX_COUNT|EX_EXTRA|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_chistory,	"chistory",	qf_history,
	EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_UNSIGNED),
EXCMD(CMD_clist,	"clist",	qf_list,
	EX_BANG|EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_clast,	"clast",	ex_cc,
	EX_RANGE|EX_COUNT|EX_TRLBAR|EX_BANG,
	ADDR_UNSIGNED),
EXCMD(CMD_class,	"class",	ex_class,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_EXPORT,
	ADDR_NONE),
EXCMD(CMD_close,	"close",	ex_close,
	EX_BANG|EX_RANGE|EX_COUNT|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_WINDOWS),
EXCMD(CMD_clearjumps,	"clearjumps",	ex_clearjumps,
	EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_cmap,		"cmap",		ex_map,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_cmapclear,	"cmapclear",	ex_mapclear,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_cmenu,	"cmenu",	ex_menu,
	EX_RANGE|EX_ZEROR|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_cnext,	"cnext",	ex_cnext,
	EX_RANGE|EX_COUNT|EX_TRLBAR|EX_BANG,
	ADDR_UNSIGNED),
EXCMD(CMD_cnewer,	"cnewer",	qf_age,
	EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_UNSIGNED),
EXCMD(CMD_cnfile,	"cnfile",	ex_cnext,
	EX_RANGE|EX_COUNT|EX_TRLBAR|EX_BANG,
	ADDR_UNSIGNED),
EXCMD(CMD_cnoremap,	"cnoremap",	ex_map,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_cnoreabbrev,	"cnoreabbrev",	ex_abbreviate,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_cnoremenu,	"cnoremenu",	ex_menu,
	EX_RANGE|EX_ZEROR|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_copy,		"copy",		ex_copymove,
	EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_MODIFY,
	ADDR_LINES),
EXCMD(CMD_colder,	"colder",	qf_age,
	EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_UNSIGNED),
EXCMD(CMD_colorscheme,	"colorscheme",	ex_colorscheme,
	EX_WORD1|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_command,	"command",	ex_command,
	EX_EXTRA|EX_BANG|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_comclear,	"comclear",	ex_comclear,
	EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_compiler,	"compiler",	ex_compiler,
	EX_BANG|EX_TRLBAR|EX_WORD1|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_continue,	"continue",	ex_continue,
	EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE,
	ADDR_NONE),
EXCMD(CMD_confirm,	"confirm",	ex_wrongmodifier,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_const,	"const",	ex_let,
	EX_EXTRA|EX_BANG|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE|EX_EXPORT,
	ADDR_NONE),
EXCMD(CMD_copen,	"copen",	ex_copen,
	EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_cprevious,	"cprevious",	ex_cnext,
	EX_RANGE|EX_COUNT|EX_TRLBAR|EX_BANG,
	ADDR_UNSIGNED),
EXCMD(CMD_cpfile,	"cpfile",	ex_cnext,
	EX_RANGE|EX_COUNT|EX_TRLBAR|EX_BANG,
	ADDR_OTHER),
EXCMD(CMD_cquit,	"cquit",	ex_cquit,
	EX_RANGE|EX_COUNT|EX_ZEROR|EX_TRLBAR|EX_BANG,
	ADDR_UNSIGNED),
EXCMD(CMD_crewind,	"crewind",	ex_cc,
	EX_RANGE|EX_COUNT|EX_TRLBAR|EX_BANG,
	ADDR_UNSIGNED),
EXCMD(CMD_cscope,	"cscope",	ex_cscope,
	EX_EXTRA|EX_NOTRLCOM|EX_XFILE,
	ADDR_NONE),
EXCMD(CMD_cstag,	"cstag",	ex_cstag,
	EX_BANG|EX_TRLBAR|EX_WORD1,
	ADDR_NONE),
EXCMD(CMD_cunmap,	"cunmap",	ex_unmap,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_cunabbrev,	"cunabbrev",	ex_abbreviate,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_cunmenu,	"cunmenu",	ex_menu,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_cwindow,	"cwindow",	ex_cwindow,
	EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_delete,	"delete",	ex_operators,
	EX_RANGE|EX_WHOLEFOLD|EX_REGSTR|EX_COUNT|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_MODIFY,
	ADDR_LINES),
EXCMD(CMD_delmarks,	"delmarks",	ex_delmarks,
	EX_BANG|EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_debug,	"debug",	ex_debug,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_debuggreedy,	"debuggreedy",	ex_debuggreedy,
	EX_RANGE|EX_ZEROR|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_def,		"def",		ex_function,
	EX_EXTRA|EX_BANG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK|EX_EXPORT,
	ADDR_NONE),
EXCMD(CMD_defcompile,	"defcompile",	ex_defcompile,
	EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK|EX_TRLBAR|EX_EXTRA,
	ADDR_NONE),
EXCMD(CMD_defer,	"defer",	ex_call,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_delcommand,	"delcommand",	ex_delcommand,
	EX_NEEDARG|EX_WORD1|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_delfunction,	"delfunction",	ex_delfunction,
	EX_BANG|EX_NEEDARG|EX_WORD1|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_display,	"display",	ex_display,
	EX_EXTRA|EX_NOTRLCOM|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_diffupdate,	"diffupdate",	ex_diffupdate,
	EX_BANG|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_diffget,	"diffget",	ex_diffgetput,
	EX_RANGE|EX_EXTRA|EX_TRLBAR|EX_MODIFY,
	ADDR_LINES),
EXCMD(CMD_diffoff,	"diffoff",	ex_diffoff,
	EX_BANG|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_diffpatch,	"diffpatch",	ex_diffpatch,
	EX_EXTRA|EX_FILE1|EX_TRLBAR|EX_MODIFY,
	ADDR_NONE),
EXCMD(CMD_diffput,	"diffput",	ex_diffgetput,
	EX_RANGE|EX_EXTRA|EX_TRLBAR,
	ADDR_LINES),
EXCMD(CMD_diffsplit,	"diffsplit",	ex_diffsplit,
	EX_EXTRA|EX_FILE1|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_diffthis,	"diffthis",	ex_diffthis,
	EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_digraphs,	"digraphs",	ex_digraphs,
	EX_BANG|EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_disassemble,	"disassemble",	ex_disassemble,
	EX_BANG|EX_EXTRA|EX_NEEDARG|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_djump,	"djump",	ex_findpat,
	EX_BANG|EX_RANGE|EX_DFLALL|EX_WHOLEFOLD|EX_EXTRA,
	ADDR_LINES),
EXCMD(CMD_dlist,	"dlist",	ex_findpat,
	EX_BANG|EX_RANGE|EX_DFLALL|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK,
	ADDR_LINES),
EXCMD(CMD_doautocmd,	"doautocmd",	ex_doautocmd,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_doautoall,	"doautoall",	ex_doautoall,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_drop,		"drop",		ex_drop,
	EX_FILES|EX_CMDARG|EX_NEEDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_dsearch,	"dsearch",	ex_findpat,
	EX_BANG|EX_RANGE|EX_DFLALL|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK,
	ADDR_LINES),
EXCMD(CMD_dsplit,	"dsplit",	ex_findpat,
	EX_BANG|EX_RANGE|EX_DFLALL|EX_WHOLEFOLD|EX_EXTRA,
	ADDR_LINES),
EXCMD(CMD_edit,		"edit",		ex_edit,
	EX_BANG|EX_FILE1|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_earlier,	"earlier",	ex_later,
	EX_TRLBAR|EX_EXTRA|EX_NOSPC|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_echo,		"echo",		ex_echo,
	EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_echoerr,	"echoerr",	ex_execute,
	EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_echohl,	"echohl",	ex_echohl,
	EX_EXTRA|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_echomsg,	"echomsg",	ex_execute,
	EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_echoconsole,	"echoconsole",	ex_execute,
	EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_echon,	"echon",	ex_echo,
	EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_echowindow,	"echowindow",	ex_execute,
	EX_RANGE|EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_else,		"else",		ex_else,
	EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE,
	ADDR_NONE),
EXCMD(CMD_elseif,	"elseif",	ex_else,
	EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE,
	ADDR_NONE),
EXCMD(CMD_emenu,	"emenu",	ex_emenu,
	EX_NEEDARG|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_RANGE|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_endif,	"endif",	ex_endif,
	EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE,
	ADDR_NONE),
EXCMD(CMD_endinterface,	"endinterface",	ex_wrongmodifier,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_endclass,	"endclass",	ex_wrongmodifier,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_enddef,	"enddef",	ex_endfunction,
	EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE,
	ADDR_NONE),
EXCMD(CMD_endenum,	"endenum",	ex_wrongmodifier,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_endfunction,	"endfunction",	ex_endfunction,
	EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_endfor,	"endfor",	ex_endwhile,
	EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE,
	ADDR_NONE),
EXCMD(CMD_endtry,	"endtry",	ex_endtry,
	EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE,
	ADDR_NONE),
EXCMD(CMD_endwhile,	"endwhile",	ex_endwhile,
	EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE,
	ADDR_NONE),
EXCMD(CMD_enew,		"enew",		ex_edit,
	EX_BANG|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_enum,		"enum",		ex_enum,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_EXPORT,
	ADDR_NONE),
EXCMD(CMD_eval,		"eval",		ex_eval,
	EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_ex,		"ex",		ex_edit,
	EX_BANG|EX_FILE1|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_execute,	"execute",	ex_execute,
	EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_exit,		"exit",		ex_exit,
	EX_RANGE|EX_WHOLEFOLD|EX_BANG|EX_FILE1|EX_ARGOPT|EX_DFLALL|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_LINES),
EXCMD(CMD_export,	"export",	ex_export,
	EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE,
	ADDR_NONE),
EXCMD(CMD_exusage,	"exusage",	ex_exusage,
	EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_file,		"file",		ex_file,
	EX_RANGE|EX_ZEROR|EX_BANG|EX_FILE1|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_files,	"files",	buflist_list,
	EX_BANG|EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_filetype,	"filetype",	ex_filetype,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_filter,	"filter",	ex_wrongmodifier,
	EX_BANG|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM,
	ADDR_NONE),
EXCMD(CMD_find,		"find",		ex_find,
	EX_RANGE|EX_BANG|EX_FILE1|EX_CMDARG|EX_ARGOPT|EX_TRLBAR|EX_NEEDARG,
	ADDR_OTHER),
EXCMD(CMD_final,	"final",	ex_let,
	EX_EXTRA|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE|EX_EXPORT,
	ADDR_NONE),
EXCMD(CMD_finally,	"finally",	ex_finally,
	EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE,
	ADDR_NONE),
EXCMD(CMD_finish,	"finish",	ex_finish,
	EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE,
	ADDR_NONE),
EXCMD(CMD_first,	"first",	ex_rewind,
	EX_EXTRA|EX_BANG|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_fixdel,	"fixdel",	do_fixdel,
	EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_fold,		"fold",		ex_fold,
	EX_RANGE|EX_WHOLEFOLD|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_LINES),
EXCMD(CMD_foldclose,	"foldclose",	ex_foldopen,
	EX_RANGE|EX_BANG|EX_WHOLEFOLD|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_LINES),
EXCMD(CMD_folddoopen,	"folddoopen",	ex_folddo,
	EX_RANGE|EX_DFLALL|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM,
	ADDR_LINES),
EXCMD(CMD_folddoclosed,	"folddoclosed",	ex_folddo,
	EX_RANGE|EX_DFLALL|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM,
	ADDR_LINES),
EXCMD(CMD_foldopen,	"foldopen",	ex_foldopen,
	EX_RANGE|EX_BANG|EX_WHOLEFOLD|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_LINES),
EXCMD(CMD_for,		"for",		ex_while,
	EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_function,	"function",	ex_function,
	EX_EXTRA|EX_BANG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK|EX_EXPORT,
	ADDR_NONE),
EXCMD(CMD_global,	"global",	ex_global,
	EX_RANGE|EX_WHOLEFOLD|EX_BANG|EX_EXTRA|EX_DFLALL|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK|EX_NONWHITE_OK,
	ADDR_LINES),
EXCMD(CMD_goto,		"goto",		ex_goto,
	EX_RANGE|EX_COUNT|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_grep,		"grep",		ex_make,
	EX_RANGE|EX_BANG|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_TRLBAR|EX_XFILE,
	ADDR_OTHER),
EXCMD(CMD_grepadd,	"grepadd",	ex_make,
	EX_RANGE|EX_BANG|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_TRLBAR|EX_XFILE,
	ADDR_OTHER),
EXCMD(CMD_gui,		"gui",		ex_gui,
	EX_BANG|EX_FILES|EX_CMDARG|EX_ARGOPT|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_gvim,		"gvim",		ex_gui,
	EX_BANG|EX_FILES|EX_CMDARG|EX_ARGOPT|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_help,		"help",		ex_help,
	EX_BANG|EX_EXTRA|EX_NOTRLCOM,
	ADDR_NONE),
EXCMD(CMD_helpclose,	"helpclose",	ex_helpclose,
	EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_helpfind,	"helpfind",	ex_helpfind,
	EX_EXTRA|EX_NOTRLCOM,
	ADDR_NONE),
EXCMD(CMD_helpgrep,	"helpgrep",	ex_helpgrep,
	EX_EXTRA|EX_NOTRLCOM|EX_NEEDARG,
	ADDR_NONE),
EXCMD(CMD_helptags,	"helptags",	ex_helptags,
	EX_NEEDARG|EX_FILES|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_hardcopy,	"hardcopy",	ex_hardcopy,
	EX_RANGE|EX_COUNT|EX_EXTRA|EX_EXPAND|EX_TRLBAR|EX_DFLALL|EX_BANG,
	ADDR_LINES),
EXCMD(CMD_highlight,	"highlight",	ex_highlight,
	EX_BANG|EX_EXTRA|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_hide,		"hide",		ex_hide,
	EX_BANG|EX_RANGE|EX_COUNT|EX_EXTRA|EX_TRLBAR,
	ADDR_WINDOWS),
EXCMD(CMD_history,	"history",	ex_history,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_horizontal,	"horizontal",	ex_wrongmodifier,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM,
	ADDR_NONE),
EXCMD(CMD_insert,	"insert",	ex_append,
	EX_BANG|EX_RANGE|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_MODIFY,
	ADDR_LINES),
EXCMD(CMD_iabbrev,	"iabbrev",	ex_abbreviate,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_iabclear,	"iabclear",	ex_abclear,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_if,		"if",		ex_if,
	EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_ijump,	"ijump",	ex_findpat,
	EX_BANG|EX_RANGE|EX_DFLALL|EX_WHOLEFOLD|EX_EXTRA,
	ADDR_LINES),
EXCMD(CMD_ilist,	"ilist",	ex_findpat,
	EX_BANG|EX_RANGE|EX_DFLALL|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK,
	ADDR_LINES),
EXCMD(CMD_imap,		"imap",		ex_map,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_imapclear,	"imapclear",	ex_mapclear,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_imenu,	"imenu",	ex_menu,
	EX_RANGE|EX_ZEROR|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_import,	"import",	ex_import,
	EX_EXTRA|EX_NOTRLCOM|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE,
	ADDR_NONE),
EXCMD(CMD_inoremap,	"inoremap",	ex_map,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_inoreabbrev,	"inoreabbrev",	ex_abbreviate,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_inoremenu,	"inoremenu",	ex_menu,
	EX_RANGE|EX_ZEROR|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_intro,	"intro",	ex_intro,
	EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_interface,	"interface",	ex_class,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_EXPORT,
	ADDR_NONE),
EXCMD(CMD_isearch,	"isearch",	ex_findpat,
	EX_BANG|EX_RANGE|EX_DFLALL|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK,
	ADDR_LINES),
EXCMD(CMD_isplit,	"isplit",	ex_findpat,
	EX_BANG|EX_RANGE|EX_DFLALL|EX_WHOLEFOLD|EX_EXTRA,
	ADDR_LINES),
EXCMD(CMD_iunmap,	"iunmap",	ex_unmap,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_iunabbrev,	"iunabbrev",	ex_abbreviate,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_iunmenu,	"iunmenu",	ex_menu,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_join,		"join",		ex_join,
	EX_BANG|EX_RANGE|EX_WHOLEFOLD|EX_COUNT|EX_FLAGS|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_MODIFY,
	ADDR_LINES),
EXCMD(CMD_jumps,	"jumps",	ex_jumps,
	EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_k,		"k",		ex_mark,
	EX_RANGE|EX_WORD1|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK|EX_NONWHITE_OK,
	ADDR_LINES),
EXCMD(CMD_keepmarks,	"keepmarks",	ex_wrongmodifier,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM,
	ADDR_NONE),
EXCMD(CMD_keepjumps,	"keepjumps",	ex_wrongmodifier,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM,
	ADDR_NONE),
EXCMD(CMD_keeppatterns,	"keeppatterns",	ex_wrongmodifier,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM,
	ADDR_NONE),
EXCMD(CMD_keepalt,	"keepalt",	ex_wrongmodifier,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM,
	ADDR_NONE),
EXCMD(CMD_list,		"list",		ex_print,
	EX_RANGE|EX_WHOLEFOLD|EX_COUNT|EX_FLAGS|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_LINES),
EXCMD(CMD_lNext,	"lNext",	ex_cnext,
	EX_RANGE|EX_COUNT|EX_TRLBAR|EX_BANG,
	ADDR_UNSIGNED),
EXCMD(CMD_lNfile,	"lNfile",	ex_cnext,
	EX_RANGE|EX_COUNT|EX_TRLBAR|EX_BANG,
	ADDR_UNSIGNED),
EXCMD(CMD_last,		"last",		ex_last,
	EX_EXTRA|EX_BANG|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_labove,	"labove",	ex_cbelow,
	EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_UNSIGNED),
EXCMD(CMD_language,	"language",	ex_language,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_laddexpr,	"laddexpr",	ex_cexpr,
	EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_EXPR_ARG,
	ADDR_NONE),
EXCMD(CMD_laddbuffer,	"laddbuffer",	ex_cbuffer,
	EX_RANGE|EX_WORD1|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_laddfile,	"laddfile",	ex_cfile,
	EX_TRLBAR|EX_FILE1,
	ADDR_NONE),
EXCMD(CMD_lafter,	"lafter",	ex_cbelow,
	EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_UNSIGNED),
EXCMD(CMD_later,	"later",	ex_later,
	EX_TRLBAR|EX_EXTRA|EX_NOSPC|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_lbuffer,	"lbuffer",	ex_cbuffer,
	EX_BANG|EX_RANGE|EX_WORD1|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_lbefore,	"lbefore",	ex_cbelow,
	EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_UNSIGNED),
EXCMD(CMD_lbelow,	"lbelow",	ex_cbelow,
	EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_UNSIGNED),
EXCMD(CMD_lbottom,	"lbottom",	ex_cbottom,
	EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_lcd,		"lcd",		ex_cd,
	EX_BANG|EX_FILE1|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_lchdir,	"lchdir",	ex_cd,
	EX_BANG|EX_FILE1|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_lclose,	"lclose",	ex_cclose,
	EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_lcscope,	"lcscope",	ex_cscope,
	EX_EXTRA|EX_NOTRLCOM|EX_XFILE,
	ADDR_NONE),
EXCMD(CMD_ldo,		"ldo",		ex_listdo,
	EX_BANG|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_RANGE|EX_DFLALL|EX_EXPAND,
	ADDR_QUICKFIX_VALID),
EXCMD(CMD_left,		"left",		ex_align,
	EX_TRLBAR|EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_MODIFY,
	ADDR_LINES),
EXCMD(CMD_leftabove,	"leftabove",	ex_wrongmodifier,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM,
	ADDR_NONE),
EXCMD(CMD_let,		"let",		ex_let,
	EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_lexpr,	"lexpr",	ex_cexpr,
	EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_EXPR_ARG|EX_BANG,
	ADDR_NONE),
EXCMD(CMD_legacy,	"legacy",	ex_wrongmodifier,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_lfile,	"lfile",	ex_cfile,
	EX_TRLBAR|EX_FILE1|EX_BANG,
	ADDR_NONE),
EXCMD(CMD_lfdo,		"lfdo",		ex_listdo,
	EX_BANG|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_RANGE|EX_DFLALL|EX_EXPAND,
	ADDR_QUICKFIX_VALID),
EXCMD(CMD_lfirst,	"lfirst",	ex_cc,
	EX_RANGE|EX_COUNT|EX_TRLBAR|EX_BANG,
	ADDR_UNSIGNED),
EXCMD(CMD_lgetfile,	"lgetfile",	ex_cfile,
	EX_TRLBAR|EX_FILE1,
	ADDR_NONE),
EXCMD(CMD_lgetbuffer,	"lgetbuffer",	ex_cbuffer,
	EX_RANGE|EX_WORD1|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_lgetexpr,	"lgetexpr",	ex_cexpr,
	EX_NEEDARG|EX_WORD1|EX_NOTRLCOM|EX_EXPR_ARG,
	ADDR_NONE),
EXCMD(CMD_lgrep,	"lgrep",	ex_make,
	EX_RANGE|EX_BANG|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_TRLBAR|EX_XFILE,
	ADDR_OTHER),
EXCMD(CMD_lgrepadd,	"lgrepadd",	ex_make,
	EX_RANGE|EX_BANG|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_TRLBAR|EX_XFILE,
	ADDR_OTHER),
EXCMD(CMD_lhelpgrep,	"lhelpgrep",	ex_helpgrep,
	EX_EXTRA|EX_NOTRLCOM|EX_NEEDARG,
	ADDR_NONE),
EXCMD(CMD_lhistory,	"lhistory",	qf_history,
	EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_UNSIGNED),
EXCMD(CMD_ll,		"ll",		ex_cc,
	EX_RANGE|EX_COUNT|EX_TRLBAR|EX_BANG,
	ADDR_QUICKFIX),
EXCMD(CMD_llast,	"llast",	ex_cc,
	EX_RANGE|EX_COUNT|EX_TRLBAR|EX_BANG,
	ADDR_UNSIGNED),
EXCMD(CMD_llist,	"llist",	qf_list,
	EX_BANG|EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_lmap,		"lmap",		ex_map,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_lmapclear,	"lmapclear",	ex_mapclear,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_lmake,	"lmake",	ex_make,
	EX_BANG|EX_EXTRA|EX_NOTRLCOM|EX_TRLBAR|EX_XFILE,
	ADDR_NONE),
EXCMD(CMD_lnoremap,	"lnoremap",	ex_map,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_lnext,	"lnext",	ex_cnext,
	EX_RANGE|EX_COUNT|EX_TRLBAR|EX_BANG,
	ADDR_UNSIGNED),
EXCMD(CMD_lnewer,	"lnewer",	qf_age,
	EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_UNSIGNED),
EXCMD(CMD_lnfile,	"lnfile",	ex_cnext,
	EX_RANGE|EX_COUNT|EX_TRLBAR|EX_BANG,
	ADDR_UNSIGNED),
EXCMD(CMD_loadview,	"loadview",	ex_loadview,
	EX_FILE1|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_loadkeymap,	"loadkeymap",	ex_loadkeymap,
	EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_lockmarks,	"lockmarks",	ex_wrongmodifier,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM,
	ADDR_NONE),
EXCMD(CMD_lockvar,	"lockvar",	ex_lockvar,
	EX_BANG|EX_EXTRA|EX_NEEDARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_lolder,	"lolder",	qf_age,
	EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_UNSIGNED),
EXCMD(CMD_lopen,	"lopen",	ex_copen,
	EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_lprevious,	"lprevious",	ex_cnext,
	EX_RANGE|EX_COUNT|EX_TRLBAR|EX_BANG,
	ADDR_UNSIGNED),
EXCMD(CMD_lpfile,	"lpfile",	ex_cnext,
	EX_RANGE|EX_COUNT|EX_TRLBAR|EX_BANG,
	ADDR_OTHER),
EXCMD(CMD_lrewind,	"lrewind",	ex_cc,
	EX_RANGE|EX_COUNT|EX_TRLBAR|EX_BANG,
	ADDR_UNSIGNED),
EXCMD(CMD_ltag,		"ltag",	ex_tag,
	EX_TRLBAR|EX_BANG|EX_WORD1,
	ADDR_NONE),
EXCMD(CMD_lunmap,	"lunmap",	ex_unmap,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_lua,		"lua",		ex_lua,
	EX_RANGE|EX_EXTRA|EX_NEEDARG|EX_CMDWIN|EX_LOCK_OK|EX_RESTRICT,
	ADDR_LINES),
EXCMD(CMD_luado,	"luado",	ex_luado,
	EX_RANGE|EX_DFLALL|EX_EXTRA|EX_NEEDARG|EX_CMDWIN|EX_LOCK_OK|EX_RESTRICT,
	ADDR_LINES),
EXCMD(CMD_luafile,	"luafile",	ex_luafile,
	EX_RANGE|EX_FILE1|EX_NEEDARG|EX_CMDWIN|EX_LOCK_OK|EX_RESTRICT,
	ADDR_LINES),
EXCMD(CMD_lvimgrep,	"lvimgrep",	ex_vimgrep,
	EX_RANGE|EX_BANG|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_TRLBAR|EX_XFILE|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_lvimgrepadd,	"lvimgrepadd",	ex_vimgrep,
	EX_RANGE|EX_BANG|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_TRLBAR|EX_XFILE|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_lwindow,	"lwindow",	ex_cwindow,
	EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_ls,		"ls",		buflist_list,
	EX_BANG|EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_move,		"move",		ex_copymove,
	EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_MODIFY,
	ADDR_LINES),
EXCMD(CMD_mark,		"mark",		ex_mark,
	EX_RANGE|EX_WORD1|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_LINES),
EXCMD(CMD_make,		"make",		ex_make,
	EX_BANG|EX_EXTRA|EX_NOTRLCOM|EX_TRLBAR|EX_XFILE,
	ADDR_NONE),
EXCMD(CMD_map,		"map",		ex_map,
	EX_BANG|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_mapclear,	"mapclear",	ex_mapclear,
	EX_EXTRA|EX_BANG|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_marks,	"marks",	ex_marks,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_match,	"match",	ex_match,
	EX_RANGE|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_menu,		"menu",		ex_menu,
	EX_RANGE|EX_ZEROR|EX_BANG|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_menutranslate, "menutranslate", ex_menutranslate,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_messages,	"messages",	ex_messages,
	EX_EXTRA|EX_TRLBAR|EX_RANGE|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_mkexrc,	"mkexrc",	ex_mkrc,
	EX_BANG|EX_FILE1|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_mksession,	"mksession",	ex_mkrc,
	EX_BANG|EX_FILE1|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_mkspell,	"mkspell",	ex_mkspell,
	EX_BANG|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_TRLBAR|EX_XFILE,
	ADDR_NONE),
EXCMD(CMD_mkvimrc,	"mkvimrc",	ex_mkrc,
	EX_BANG|EX_FILE1|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_mkview,	"mkview",	ex_mkrc,
	EX_BANG|EX_FILE1|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_mode,		"mode",		ex_mode,
	EX_WORD1|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_mzscheme,	"mzscheme",	ex_mzscheme,
	EX_RANGE|EX_EXTRA|EX_DFLALL|EX_NEEDARG|EX_CMDWIN|EX_LOCK_OK|EX_SBOXOK|EX_RESTRICT,
	ADDR_LINES),
EXCMD(CMD_mzfile,	"mzfile",	ex_mzfile,
	EX_RANGE|EX_FILE1|EX_NEEDARG|EX_CMDWIN|EX_LOCK_OK|EX_RESTRICT,
	ADDR_LINES),
EXCMD(CMD_next,		"next",		ex_next,
	EX_RANGE|EX_BANG|EX_FILES|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_nbkey,	"nbkey",	ex_nbkey,
	EX_EXTRA|EX_NEEDARG,
	ADDR_NONE),
EXCMD(CMD_nbclose,	"nbclose",	ex_nbclose,
	EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_nbstart,	"nbstart",	ex_nbstart,
	EX_WORD1|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_new,		"new",		ex_splitview,
	EX_BANG|EX_FILE1|EX_RANGE|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_nmap,		"nmap",		ex_map,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_nmapclear,	"nmapclear",	ex_mapclear,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_nmenu,	"nmenu",	ex_menu,
	EX_RANGE|EX_ZEROR|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_nnoremap,	"nnoremap",	ex_map,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_nnoremenu,	"nnoremenu",	ex_menu,
	EX_RANGE|EX_ZEROR|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_noremap,	"noremap",	ex_map,
	EX_BANG|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_noautocmd,	"noautocmd",	ex_wrongmodifier,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM,
	ADDR_NONE),
EXCMD(CMD_nohlsearch,	"nohlsearch",	ex_nohlsearch,
	EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_noreabbrev,	"noreabbrev",	ex_abbreviate,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_noremenu,	"noremenu",	ex_menu,
	EX_RANGE|EX_ZEROR|EX_BANG|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_noswapfile,	"noswapfile",	ex_wrongmodifier,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM,
	ADDR_NONE),
EXCMD(CMD_normal,	"normal",	ex_normal,
	EX_RANGE|EX_BANG|EX_EXTRA|EX_NEEDARG|EX_NOTRLCOM|EX_CTRLV|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_LINES),
EXCMD(CMD_number,	"number",	ex_print,
	EX_RANGE|EX_WHOLEFOLD|EX_COUNT|EX_FLAGS|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_LINES),
EXCMD(CMD_nunmap,	"nunmap",	ex_unmap,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_nunmenu,	"nunmenu",	ex_menu,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_open,		"open",		ex_open,
	EX_RANGE|EX_BANG|EX_EXTRA,
	ADDR_LINES),
EXCMD(CMD_oldfiles,	"oldfiles",	ex_oldfiles,
	EX_BANG|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_omap,		"omap",		ex_map,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_omapclear,	"omapclear",	ex_mapclear,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_omenu,	"omenu",	ex_menu,
	EX_RANGE|EX_ZEROR|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_only,		"only",		ex_only,
	EX_BANG|EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_WINDOWS),
EXCMD(CMD_onoremap,	"onoremap",	ex_map,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_onoremenu,	"onoremenu",	ex_menu,
	EX_RANGE|EX_ZEROR|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_options,	"options",	ex_options,
	EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_ounmap,	"ounmap",	ex_unmap,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_ounmenu,	"ounmenu",	ex_menu,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_ownsyntax,	"ownsyntax",	ex_ownsyntax,
	EX_EXTRA|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_print,	"print",	ex_print,
	EX_RANGE|EX_WHOLEFOLD|EX_COUNT|EX_FLAGS|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_SBOXOK,
	ADDR_LINES),
EXCMD(CMD_packadd,	"packadd",	ex_packadd,
	EX_BANG|EX_FILE1|EX_NEEDARG|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_packloadall,	"packloadall",	ex_packloadall,
	EX_BANG|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_pclose,	"pclose",	ex_pclose,
	EX_BANG|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_perl,		"perl",		ex_perl,
	EX_RANGE|EX_EXTRA|EX_DFLALL|EX_NEEDARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_LINES),
EXCMD(CMD_perldo,	"perldo",	ex_perldo,
	EX_RANGE|EX_EXTRA|EX_DFLALL|EX_NEEDARG|EX_CMDWIN|EX_LOCK_OK,
	ADDR_LINES),
EXCMD(CMD_pedit,	"pedit",	ex_pedit,
	EX_BANG|EX_FILE1|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_pop,		"pop",		ex_tag,
	EX_RANGE|EX_BANG|EX_COUNT|EX_TRLBAR|EX_ZEROR,
	ADDR_OTHER),
EXCMD(CMD_popup,	"popup",	ex_popup,
	EX_NEEDARG|EX_EXTRA|EX_BANG|EX_TRLBAR|EX_NOTRLCOM|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_ppop,		"ppop",		ex_ptag,
	EX_RANGE|EX_BANG|EX_COUNT|EX_TRLBAR|EX_ZEROR,
	ADDR_OTHER),
EXCMD(CMD_preserve,	"preserve",	ex_preserve,
	EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_previous,	"previous",	ex_previous,
	EX_EXTRA|EX_RANGE|EX_COUNT|EX_BANG|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_promptfind,	"promptfind",	gui_mch_find_dialog,
	EX_EXTRA|EX_NOTRLCOM|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_promptrepl,	"promptrepl",	gui_mch_replace_dialog,
	EX_EXTRA|EX_NOTRLCOM|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_profile,	"profile",	ex_profile,
	EX_BANG|EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_profdel,	"profdel",	ex_breakdel,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_psearch,	"psearch",	ex_psearch,
	EX_BANG|EX_RANGE|EX_WHOLEFOLD|EX_DFLALL|EX_EXTRA,
	ADDR_LINES),
EXCMD(CMD_ptag,		"ptag",		ex_ptag,
	EX_RANGE|EX_BANG|EX_WORD1|EX_TRLBAR|EX_ZEROR,
	ADDR_OTHER),
EXCMD(CMD_ptNext,	"ptNext",	ex_ptag,
	EX_RANGE|EX_BANG|EX_TRLBAR|EX_ZEROR,
	ADDR_OTHER),
EXCMD(CMD_ptfirst,	"ptfirst",	ex_ptag,
	EX_RANGE|EX_BANG|EX_TRLBAR|EX_ZEROR,
	ADDR_OTHER),
EXCMD(CMD_ptjump,	"ptjump",	ex_ptag,
	EX_BANG|EX_TRLBAR|EX_WORD1,
	ADDR_NONE),
EXCMD(CMD_ptlast,	"ptlast",	ex_ptag,
	EX_BANG|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_ptnext,	"ptnext",	ex_ptag,
	EX_RANGE|EX_BANG|EX_TRLBAR|EX_ZEROR,
	ADDR_OTHER),
EXCMD(CMD_ptprevious,	"ptprevious",	ex_ptag,
	EX_RANGE|EX_BANG|EX_TRLBAR|EX_ZEROR,
	ADDR_OTHER),
EXCMD(CMD_ptrewind,	"ptrewind",	ex_ptag,
	EX_RANGE|EX_BANG|EX_TRLBAR|EX_ZEROR,
	ADDR_OTHER),
EXCMD(CMD_ptselect,	"ptselect",	ex_ptag,
	EX_BANG|EX_TRLBAR|EX_WORD1,
	ADDR_NONE),
EXCMD(CMD_put,		"put",		ex_put,
	EX_RANGE|EX_WHOLEFOLD|EX_BANG|EX_REGSTR|EX_TRLBAR|EX_ZEROR|EX_CMDWIN|EX_LOCK_OK|EX_MODIFY,
	ADDR_LINES),
EXCMD(CMD_public,	"public",	ex_wrongmodifier,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_pwd,		"pwd",		ex_pwd,
	EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_python,	"python",	ex_python,
	EX_RANGE|EX_EXTRA|EX_NEEDARG|EX_CMDWIN|EX_LOCK_OK|EX_RESTRICT,
	ADDR_LINES),
EXCMD(CMD_pydo,		"pydo",		ex_pydo,
	EX_RANGE|EX_DFLALL|EX_EXTRA|EX_NEEDARG|EX_CMDWIN|EX_LOCK_OK|EX_RESTRICT,
	ADDR_LINES),
EXCMD(CMD_pyfile,	"pyfile",	ex_pyfile,
	EX_RANGE|EX_FILE1|EX_NEEDARG|EX_CMDWIN|EX_LOCK_OK|EX_RESTRICT,
	ADDR_LINES),
EXCMD(CMD_py3,		"py3",		ex_py3,
	EX_RANGE|EX_EXTRA|EX_NEEDARG|EX_CMDWIN|EX_LOCK_OK|EX_RESTRICT,
	ADDR_LINES),
EXCMD(CMD_py3do,	"py3do",	ex_py3do,
	EX_RANGE|EX_DFLALL|EX_EXTRA|EX_NEEDARG|EX_CMDWIN|EX_LOCK_OK|EX_RESTRICT,
	ADDR_LINES),
EXCMD(CMD_python3,	"python3",	ex_py3,
	EX_RANGE|EX_EXTRA|EX_NEEDARG|EX_CMDWIN|EX_LOCK_OK|EX_RESTRICT,
	ADDR_LINES),
EXCMD(CMD_py3file,	"py3file",	ex_py3file,
	EX_RANGE|EX_FILE1|EX_NEEDARG|EX_CMDWIN|EX_LOCK_OK|EX_RESTRICT,
	ADDR_LINES),
EXCMD(CMD_pyx,		"pyx",		ex_pyx,
	EX_RANGE|EX_EXTRA|EX_NEEDARG|EX_CMDWIN|EX_LOCK_OK|EX_RESTRICT,
	ADDR_LINES),
EXCMD(CMD_pyxdo,	"pyxdo",	ex_pyxdo,
	EX_RANGE|EX_DFLALL|EX_EXTRA|EX_NEEDARG|EX_CMDWIN|EX_LOCK_OK|EX_RESTRICT,
	ADDR_LINES),
EXCMD(CMD_pythonx,	"pythonx",	ex_pyx,
	EX_RANGE|EX_EXTRA|EX_NEEDARG|EX_CMDWIN|EX_LOCK_OK|EX_RESTRICT,
	ADDR_LINES),
EXCMD(CMD_pyxfile,	"pyxfile",	ex_pyxfile,
	EX_RANGE|EX_FILE1|EX_NEEDARG|EX_CMDWIN|EX_LOCK_OK|EX_RESTRICT,
	ADDR_LINES),
EXCMD(CMD_quit,		"quit",		ex_quit,
	EX_BANG|EX_RANGE|EX_COUNT|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_WINDOWS),
EXCMD(CMD_quitall,	"quitall",	ex_quit_all,
	EX_BANG|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_qall,		"qall",		ex_quit_all,
	EX_BANG|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_read,		"read",		ex_read,
	EX_BANG|EX_RANGE|EX_WHOLEFOLD|EX_FILE1|EX_ARGOPT|EX_TRLBAR|EX_ZEROR|EX_CMDWIN|EX_LOCK_OK|EX_MODIFY,
	ADDR_LINES),
EXCMD(CMD_recover,	"recover",	ex_recover,
	EX_BANG|EX_FILE1|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_redo,		"redo",		ex_redo,
	EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_redir,	"redir",	ex_redir,
	EX_BANG|EX_FILES|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_redraw,	"redraw",	ex_redraw,
	EX_BANG|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_redrawstatus,	"redrawstatus",	ex_redrawstatus,
	EX_BANG|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_redrawtabline, "redrawtabline", ex_redrawtabline,
	EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_registers,	"registers",	ex_display,
	EX_EXTRA|EX_NOTRLCOM|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_resize,	"resize",	ex_resize,
	EX_RANGE|EX_TRLBAR|EX_WORD1|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_retab,	"retab",	ex_retab,
	EX_TRLBAR|EX_RANGE|EX_WHOLEFOLD|EX_DFLALL|EX_BANG|EX_WORD1|EX_CMDWIN|EX_LOCK_OK|EX_MODIFY,
	ADDR_LINES),
EXCMD(CMD_return,	"return",	ex_return,
	EX_EXTRA|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE,
	ADDR_NONE),
EXCMD(CMD_rewind,	"rewind",	ex_rewind,
	EX_EXTRA|EX_BANG|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_right,	"right",	ex_align,
	EX_TRLBAR|EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_MODIFY,
	ADDR_LINES),
EXCMD(CMD_rightbelow,	"rightbelow",	ex_wrongmodifier,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM,
	ADDR_NONE),
EXCMD(CMD_runtime,	"runtime",	ex_runtime,
	EX_BANG|EX_NEEDARG|EX_FILES|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_ruby,		"ruby",		ex_ruby,
	EX_RANGE|EX_EXTRA|EX_NEEDARG|EX_CMDWIN|EX_LOCK_OK|EX_RESTRICT,
	ADDR_LINES),
EXCMD(CMD_rubydo,	"rubydo",	ex_rubydo,
	EX_RANGE|EX_DFLALL|EX_EXTRA|EX_NEEDARG|EX_CMDWIN|EX_LOCK_OK|EX_RESTRICT,
	ADDR_LINES),
EXCMD(CMD_rubyfile,	"rubyfile",	ex_rubyfile,
	EX_RANGE|EX_FILE1|EX_NEEDARG|EX_CMDWIN|EX_LOCK_OK|EX_RESTRICT,
	ADDR_LINES),
EXCMD(CMD_rundo,	"rundo",	ex_rundo,
	EX_NEEDARG|EX_FILE1,
	ADDR_NONE),
EXCMD(CMD_rviminfo,	"rviminfo",	ex_viminfo,
	EX_BANG|EX_FILE1|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_substitute,	"substitute",	ex_substitute,
	EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_NONWHITE_OK,
	ADDR_LINES),
EXCMD(CMD_sNext,	"sNext",	ex_previous,
	EX_EXTRA|EX_RANGE|EX_COUNT|EX_BANG|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_sargument,	"sargument",	ex_argument,
	EX_BANG|EX_RANGE|EX_COUNT|EX_EXTRA|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_ARGUMENTS),
EXCMD(CMD_sall,		"sall",		ex_all,
	EX_BANG|EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_sandbox,	"sandbox",	ex_wrongmodifier,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM,
	ADDR_NONE),
EXCMD(CMD_saveas,	"saveas",	ex_write,
	EX_BANG|EX_FILE1|EX_ARGOPT|EX_CMDWIN|EX_LOCK_OK|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_sbuffer,	"sbuffer",	ex_buffer,
	EX_BANG|EX_RANGE|EX_BUFNAME|EX_BUFUNL|EX_COUNT|EX_EXTRA|EX_CMDARG|EX_TRLBAR,
	ADDR_BUFFERS),
EXCMD(CMD_sbNext,	"sbNext",	ex_bprevious,
	EX_RANGE|EX_COUNT|EX_CMDARG|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_sball,	"sball",	ex_buffer_all,
	EX_RANGE|EX_COUNT|EX_CMDARG|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_sbfirst,	"sbfirst",	ex_brewind,
	EX_CMDARG|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_sblast,	"sblast",	ex_blast,
	EX_CMDARG|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_sbmodified,	"sbmodified",	ex_bmodified,
	EX_RANGE|EX_COUNT|EX_CMDARG|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_sbnext,	"sbnext",	ex_bnext,
	EX_RANGE|EX_COUNT|EX_CMDARG|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_sbprevious,	"sbprevious",	ex_bprevious,
	EX_RANGE|EX_COUNT|EX_CMDARG|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_sbrewind,	"sbrewind",	ex_brewind,
	EX_CMDARG|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_scriptnames,	"scriptnames",	ex_scriptnames,
	EX_BANG|EX_FILES|EX_RANGE|EX_COUNT|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_scriptencoding, "scriptencoding", ex_scriptencoding,
	EX_WORD1|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_scriptversion, "scriptversion", ex_scriptversion,
	EX_WORD1|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_scscope,	"scscope",	ex_scscope,
	EX_EXTRA|EX_NOTRLCOM,
	ADDR_NONE),
EXCMD(CMD_set,		"set",		ex_set,
	EX_BANG|EX_TRLBAR|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_SBOXOK,
	ADDR_NONE),
EXCMD(CMD_setfiletype,	"setfiletype",	ex_setfiletype,
	EX_TRLBAR|EX_EXTRA|EX_NEEDARG|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_setglobal,	"setglobal",	ex_set,
	EX_BANG|EX_TRLBAR|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_SBOXOK,
	ADDR_NONE),
EXCMD(CMD_setlocal,	"setlocal",	ex_set,
	EX_BANG|EX_TRLBAR|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_SBOXOK,
	ADDR_NONE),
EXCMD(CMD_sfind,	"sfind",	ex_splitview,
	EX_BANG|EX_FILE1|EX_RANGE|EX_CMDARG|EX_ARGOPT|EX_TRLBAR|EX_NEEDARG,
	ADDR_OTHER),
EXCMD(CMD_sfirst,	"sfirst",	ex_rewind,
	EX_EXTRA|EX_BANG|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_shell,	"shell",	ex_shell,
	EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_simalt,	"simalt",	ex_simalt,
	EX_NEEDARG|EX_WORD1|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_sign,		"sign",		ex_sign,
	EX_NEEDARG|EX_RANGE|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_silent,	"silent",	ex_wrongmodifier,
	EX_NEEDARG|EX_EXTRA|EX_BANG|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_sleep,	"sleep",	ex_sleep,
	EX_BANG|EX_RANGE|EX_COUNT|EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_slast,	"slast",	ex_last,
	EX_EXTRA|EX_BANG|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_smagic,	"smagic",	ex_submagic,
	EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_NONWHITE_OK,
	ADDR_LINES),
EXCMD(CMD_smap,		"smap",		ex_map,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_smapclear,	"smapclear",	ex_mapclear,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_smenu,	"smenu",	ex_menu,
	EX_RANGE|EX_ZEROR|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_snext,	"snext",	ex_next,
	EX_RANGE|EX_BANG|EX_FILES|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_snomagic,	"snomagic",	ex_submagic,
	EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_NONWHITE_OK,
	ADDR_LINES),
EXCMD(CMD_snoremap,	"snoremap",	ex_map,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_snoremenu,	"snoremenu",	ex_menu,
	EX_RANGE|EX_ZEROR|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_source,	"source",	ex_source,
	EX_RANGE|EX_DFLALL|EX_BANG|EX_FILE1|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_LINES),
EXCMD(CMD_sort,		"sort",		ex_sort,
	EX_RANGE|EX_DFLALL|EX_WHOLEFOLD|EX_BANG|EX_EXTRA|EX_NOTRLCOM|EX_MODIFY,
	ADDR_LINES),
EXCMD(CMD_split,	"split",	ex_splitview,
	EX_BANG|EX_FILE1|EX_RANGE|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_spellgood,	"spellgood",	ex_spell,
	EX_BANG|EX_RANGE|EX_NEEDARG|EX_EXTRA|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_spelldump,	"spelldump",	ex_spelldump,
	EX_BANG|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_spellinfo,	"spellinfo",	ex_spellinfo,
	EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_spellrepall,	"spellrepall",	ex_spellrepall,
	EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_spellrare,	"spellrare",	ex_spell,
	EX_BANG|EX_RANGE|EX_NEEDARG|EX_EXTRA|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_spellundo,	"spellundo",	ex_spell,
	EX_BANG|EX_RANGE|EX_NEEDARG|EX_EXTRA|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_spellwrong,	"spellwrong",	ex_spell,
	EX_BANG|EX_RANGE|EX_NEEDARG|EX_EXTRA|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_sprevious,	"sprevious",	ex_previous,
	EX_EXTRA|EX_RANGE|EX_COUNT|EX_BANG|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_srewind,	"srewind",	ex_rewind,
	EX_EXTRA|EX_BANG|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_stop,		"stop",		ex_stop,
	EX_TRLBAR|EX_BANG|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_stag,		"stag",		ex_stag,
	EX_RANGE|EX_BANG|EX_WORD1|EX_TRLBAR|EX_ZEROR,
	ADDR_OTHER),
EXCMD(CMD_startinsert,	"startinsert",	ex_startinsert,
	EX_BANG|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_startgreplace, "startgreplace", ex_startinsert,
	EX_BANG|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_startreplace,	"startreplace",	ex_startinsert,
	EX_BANG|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_static,	"static",	ex_wrongmodifier,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_stopinsert,	"stopinsert",	ex_stopinsert,
	EX_BANG|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_stjump,	"stjump",	ex_stag,
	EX_BANG|EX_TRLBAR|EX_WORD1,
	ADDR_NONE),
EXCMD(CMD_stselect,	"stselect",	ex_stag,
	EX_BANG|EX_TRLBAR|EX_WORD1,
	ADDR_NONE),
EXCMD(CMD_sunhide,	"sunhide",	ex_buffer_all,
	EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_sunmap,	"sunmap",	ex_unmap,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_sunmenu,	"sunmenu",	ex_menu,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_suspend,	"suspend",	ex_stop,
	EX_TRLBAR|EX_BANG|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_sview,	"sview",	ex_splitview,
	EX_BANG|EX_FILE1|EX_RANGE|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_swapname,	"swapname",	ex_swapname,
	EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_syntax,	"syntax",	ex_syntax,
	EX_EXTRA|EX_NOTRLCOM|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_syntime,	"syntime",	ex_syntime,
	EX_NEEDARG|EX_WORD1|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_syncbind,	"syncbind",	ex_syncbind,
	EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_smile,	"smile",	ex_smile,
	EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_SBOXOK,
	ADDR_NONE),
EXCMD(CMD_t,		"t",		ex_copymove,
	EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_MODIFY,
	ADDR_LINES),
EXCMD(CMD_tNext,	"tNext",	ex_tag,
	EX_RANGE|EX_BANG|EX_TRLBAR|EX_ZEROR,
	ADDR_OTHER),
EXCMD(CMD_tag,		"tag",		ex_tag,
	EX_RANGE|EX_BANG|EX_WORD1|EX_TRLBAR|EX_ZEROR,
	ADDR_OTHER),
EXCMD(CMD_tags,		"tags",		do_tags,
	EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_tab,		"tab",		ex_wrongmodifier,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM,
	ADDR_NONE),
EXCMD(CMD_tabclose,	"tabclose",	ex_tabclose,
	EX_BANG|EX_RANGE|EX_ZEROR|EX_EXTRA|EX_NOSPC|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_TABS),
EXCMD(CMD_tabdo,	"tabdo",	ex_listdo,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_RANGE|EX_DFLALL|EX_EXPAND,
	ADDR_TABS),
EXCMD(CMD_tabedit,	"tabedit",	ex_splitview,
	EX_BANG|EX_FILE1|EX_RANGE|EX_ZEROR|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_TABS),
EXCMD(CMD_tabfind,	"tabfind",	ex_splitview,
	EX_BANG|EX_FILE1|EX_RANGE|EX_ZEROR|EX_CMDARG|EX_ARGOPT|EX_NEEDARG|EX_TRLBAR,
	ADDR_TABS),
EXCMD(CMD_tabfirst,	"tabfirst",	ex_tabnext,
	EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_tabmove,	"tabmove",	ex_tabmove,
	EX_RANGE|EX_ZEROR|EX_EXTRA|EX_NOSPC|EX_TRLBAR,
	ADDR_TABS),
EXCMD(CMD_tablast,	"tablast",	ex_tabnext,
	EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_tabnext,	"tabnext",	ex_tabnext,
	EX_RANGE|EX_ZEROR|EX_EXTRA|EX_NOSPC|EX_TRLBAR,
	ADDR_TABS),
EXCMD(CMD_tabnew,	"tabnew",	ex_splitview,
	EX_BANG|EX_FILE1|EX_RANGE|EX_ZEROR|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_TABS),
EXCMD(CMD_tabonly,	"tabonly",	ex_tabonly,
	EX_BANG|EX_RANGE|EX_ZEROR|EX_EXTRA|EX_NOSPC|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_TABS),
EXCMD(CMD_tabprevious,	"tabprevious",	ex_tabnext,
	EX_RANGE|EX_ZEROR|EX_EXTRA|EX_NOSPC|EX_TRLBAR,
	ADDR_TABS_RELATIVE),
EXCMD(CMD_tabNext,	"tabNext",	ex_tabnext,
	EX_RANGE|EX_ZEROR|EX_EXTRA|EX_NOSPC|EX_TRLBAR,
	ADDR_TABS_RELATIVE),
EXCMD(CMD_tabrewind,	"tabrewind",	ex_tabnext,
	EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_tabs,		"tabs",		ex_tabs,
	EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_tcd,		"tcd",		ex_cd,
	EX_BANG|EX_FILE1|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_tchdir,	"tchdir",	ex_cd,
	EX_BANG|EX_FILE1|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_tcl,		"tcl",		ex_tcl,
	EX_RANGE|EX_EXTRA|EX_NEEDARG|EX_CMDWIN|EX_LOCK_OK|EX_RESTRICT,
	ADDR_LINES),
EXCMD(CMD_tcldo,	"tcldo",	ex_tcldo,
	EX_RANGE|EX_DFLALL|EX_EXTRA|EX_NEEDARG|EX_CMDWIN|EX_LOCK_OK|EX_RESTRICT,
	ADDR_LINES),
EXCMD(CMD_tclfile,	"tclfile",	ex_tclfile,
	EX_RANGE|EX_FILE1|EX_NEEDARG|EX_CMDWIN|EX_LOCK_OK|EX_RESTRICT,
	ADDR_LINES),
EXCMD(CMD_tearoff,	"tearoff",	ex_tearoff,
	EX_NEEDARG|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_terminal,	"terminal",	ex_terminal,
	EX_RANGE|EX_BANG|EX_FILES|EX_CMDWIN|EX_LOCK_OK,
	ADDR_LINES),
EXCMD(CMD_tfirst,	"tfirst",	ex_tag,
	EX_RANGE|EX_BANG|EX_TRLBAR|EX_ZEROR,
	ADDR_OTHER),
EXCMD(CMD_throw,	"throw",	ex_throw,
	EX_EXTRA|EX_NEEDARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE,
	ADDR_NONE),
EXCMD(CMD_this,		"this",		ex_wrongmodifier,
	EX_EXTRA|EX_NEEDARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE,
	ADDR_NONE),
EXCMD(CMD_tjump,	"tjump",	ex_tag,
	EX_BANG|EX_TRLBAR|EX_WORD1,
	ADDR_NONE),
EXCMD(CMD_tlast,	"tlast",	ex_tag,
	EX_BANG|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_tlmenu,	"tlmenu",	ex_menu,
	EX_RANGE|EX_ZEROR|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_tlnoremenu,	"tlnoremenu",	ex_menu,
	EX_RANGE|EX_ZEROR|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_tlunmenu,	"tlunmenu",	ex_menu,
	EX_RANGE|EX_ZEROR|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_tmenu,	"tmenu",	ex_menu,
	EX_RANGE|EX_ZEROR|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_tmap,		"tmap",		ex_map,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_tmapclear,	"tmapclear",	ex_mapclear,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_tnext,	"tnext",	ex_tag,
	EX_RANGE|EX_BANG|EX_TRLBAR|EX_ZEROR,
	ADDR_OTHER),
EXCMD(CMD_tnoremap,	"tnoremap",	ex_map,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_topleft,	"topleft",	ex_wrongmodifier,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM,
	ADDR_NONE),
EXCMD(CMD_tprevious,	"tprevious",	ex_tag,
	EX_RANGE|EX_BANG|EX_TRLBAR|EX_ZEROR,
	ADDR_OTHER),
EXCMD(CMD_trewind,	"trewind",	ex_tag,
	EX_RANGE|EX_BANG|EX_TRLBAR|EX_ZEROR,
	ADDR_OTHER),
EXCMD(CMD_try,		"try",		ex_try,
	EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_tselect,	"tselect",	ex_tag,
	EX_BANG|EX_TRLBAR|EX_WORD1,
	ADDR_NONE),
EXCMD(CMD_tunmenu,	"tunmenu",	ex_menu,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_tunmap,	"tunmap",	ex_unmap,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_type,		"type",		ex_type,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_EXPORT,
	ADDR_NONE),
EXCMD(CMD_undo,		"undo",		ex_undo,
	EX_RANGE|EX_COUNT|EX_ZEROR|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_undojoin,	"undojoin",	ex_undojoin,
	EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_undolist,	"undolist",	ex_undolist,
	EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_unabbreviate,	"unabbreviate",	ex_abbreviate,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_unhide,	"unhide",	ex_buffer_all,
	EX_RANGE|EX_COUNT|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_unlet,	"unlet",	ex_unlet,
	EX_BANG|EX_EXTRA|EX_NEEDARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_unlockvar,	"unlockvar",	ex_lockvar,
	EX_BANG|EX_EXTRA|EX_NEEDARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_unmap,	"unmap",	ex_unmap,
	EX_BANG|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_unmenu,	"unmenu",	ex_menu,
	EX_BANG|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_unsilent,	"unsilent",	ex_wrongmodifier,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_update,	"update",	ex_update,
	EX_RANGE|EX_WHOLEFOLD|EX_BANG|EX_FILE1|EX_ARGOPT|EX_DFLALL|EX_TRLBAR,
	ADDR_LINES),
EXCMD(CMD_vglobal,	"vglobal",	ex_global,
	EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_DFLALL|EX_CMDWIN|EX_LOCK_OK|EX_NONWHITE_OK,
	ADDR_LINES),
EXCMD(CMD_var,		"var",		ex_var,
	EX_EXTRA|EX_NOTRLCOM|EX_EXPR_ARG|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE|EX_EXPORT,
	ADDR_NONE),
EXCMD(CMD_version,	"version",	ex_version,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_verbose,	"verbose",	ex_wrongmodifier,
	EX_NEEDARG|EX_RANGE|EX_EXTRA|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_vertical,	"vertical",	ex_wrongmodifier,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM,
	ADDR_NONE),
EXCMD(CMD_visual,	"visual",	ex_edit,
	EX_BANG|EX_FILE1|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_view,		"view",		ex_edit,
	EX_BANG|EX_FILE1|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_vimgrep,	"vimgrep",	ex_vimgrep,
	EX_RANGE|EX_BANG|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_TRLBAR|EX_XFILE|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_vimgrepadd,	"vimgrepadd",	ex_vimgrep,
	EX_RANGE|EX_BANG|EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_TRLBAR|EX_XFILE|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_vim9cmd,	"vim9cmd",	ex_wrongmodifier,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_vim9script,	"vim9script",	ex_vim9script,
	EX_WORD1|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_viusage,	"viusage",	ex_viusage,
	EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_vmap,		"vmap",		ex_map,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_vmapclear,	"vmapclear",	ex_mapclear,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_vmenu,	"vmenu",	ex_menu,
	EX_RANGE|EX_ZEROR|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_vnoremap,	"vnoremap",	ex_map,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_vnew,		"vnew",		ex_splitview,
	EX_BANG|EX_FILE1|EX_RANGE|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_vnoremenu,	"vnoremenu",	ex_menu,
	EX_RANGE|EX_ZEROR|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_vsplit,	"vsplit",	ex_splitview,
	EX_BANG|EX_FILE1|EX_RANGE|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_vunmap,	"vunmap",	ex_unmap,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_vunmenu,	"vunmenu",	ex_menu,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_write,	"write",	ex_write,
	EX_RANGE|EX_WHOLEFOLD|EX_BANG|EX_FILE1|EX_ARGOPT|EX_DFLALL|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_LINES),
EXCMD(CMD_wNext,	"wNext",	ex_wnext,
	EX_RANGE|EX_WHOLEFOLD|EX_BANG|EX_FILE1|EX_ARGOPT|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_wall,		"wall",		do_wqall,
	EX_BANG|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_while,	"while",	ex_while,
	EX_EXTRA|EX_NOTRLCOM|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK|EX_WHOLE,
	ADDR_NONE),
EXCMD(CMD_winsize,	"winsize",	ex_winsize,
	EX_EXTRA|EX_NEEDARG|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_wincmd,	"wincmd",	ex_wincmd,
	EX_NEEDARG|EX_WORD1|EX_RANGE|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_windo,	"windo",	ex_listdo,
	EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM|EX_RANGE|EX_DFLALL|EX_EXPAND,
	ADDR_WINDOWS),
EXCMD(CMD_winpos,	"winpos",	ex_winpos,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_wnext,	"wnext",	ex_wnext,
	EX_RANGE|EX_BANG|EX_FILE1|EX_ARGOPT|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_wprevious,	"wprevious",	ex_wnext,
	EX_RANGE|EX_BANG|EX_FILE1|EX_ARGOPT|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_wq,		"wq",		ex_exit,
	EX_RANGE|EX_WHOLEFOLD|EX_BANG|EX_FILE1|EX_ARGOPT|EX_DFLALL|EX_TRLBAR,
	ADDR_LINES),
EXCMD(CMD_wqall,	"wqall",	do_wqall,
	EX_BANG|EX_FILE1|EX_ARGOPT|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_wundo,	"wundo",	ex_wundo,
	EX_BANG|EX_NEEDARG|EX_FILE1,
	ADDR_NONE),
EXCMD(CMD_wviminfo,	"wviminfo",	ex_viminfo,
	EX_BANG|EX_FILE1|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_xit,		"xit",		ex_exit,
	EX_RANGE|EX_WHOLEFOLD|EX_BANG|EX_FILE1|EX_ARGOPT|EX_DFLALL|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_LINES),
EXCMD(CMD_xall,		"xall",		do_wqall,
	EX_BANG|EX_TRLBAR,
	ADDR_NONE),
EXCMD(CMD_xmap,		"xmap",		ex_map,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_xmapclear,	"xmapclear",	ex_mapclear,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_xmenu,	"xmenu",	ex_menu,
	EX_RANGE|EX_ZEROR|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_xnoremap,	"xnoremap",	ex_map,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_xnoremenu,	"xnoremenu",	ex_menu,
	EX_RANGE|EX_ZEROR|EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_OTHER),
EXCMD(CMD_xrestore,	"xrestore",	ex_xrestore,
	EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_xunmap,	"xunmap",	ex_unmap,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_xunmenu,	"xunmenu",	ex_menu,
	EX_EXTRA|EX_TRLBAR|EX_NOTRLCOM|EX_CTRLV|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_yank,		"yank",		ex_operators,
	EX_RANGE|EX_WHOLEFOLD|EX_REGSTR|EX_COUNT|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_LINES),
EXCMD(CMD_z,		"z",		ex_z,
	EX_RANGE|EX_WHOLEFOLD|EX_BANG|EX_EXTRA|EX_FLAGS|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_LINES),

// commands that don't start with a letter
EXCMD(CMD_bang,		"!",		ex_bang,
	EX_RANGE|EX_WHOLEFOLD|EX_BANG|EX_FILES|EX_CMDWIN|EX_LOCK_OK|EX_NONWHITE_OK,
	ADDR_LINES),
EXCMD(CMD_pound,	"#",		ex_print,
	EX_RANGE|EX_WHOLEFOLD|EX_COUNT|EX_FLAGS|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_LINES),
EXCMD(CMD_and,		"&",		ex_substitute,
	EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_MODIFY|EX_NONWHITE_OK,
	ADDR_LINES),
EXCMD(CMD_star,		"*",		ex_at,
	EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_NONWHITE_OK,
	ADDR_LINES),
EXCMD(CMD_lshift,	"<",		ex_operators,
	EX_RANGE|EX_WHOLEFOLD|EX_COUNT|EX_FLAGS|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_MODIFY,
	ADDR_LINES),
EXCMD(CMD_equal,	"=",		ex_equal,
	EX_RANGE|EX_TRLBAR|EX_DFLALL|EX_FLAGS|EX_CMDWIN|EX_LOCK_OK,
	ADDR_LINES),
EXCMD(CMD_rshift,	">",		ex_operators,
	EX_RANGE|EX_WHOLEFOLD|EX_COUNT|EX_FLAGS|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_MODIFY,
	ADDR_LINES),
EXCMD(CMD_at,		"@",		ex_at,
	EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK|EX_NONWHITE_OK,
	ADDR_LINES),
EXCMD(CMD_block,	"{",		ex_block,  // not found normally
	EX_TRLBAR|EX_LOCK_OK|EX_CMDWIN,
	ADDR_NONE),
EXCMD(CMD_endblock,	"}",		ex_endblock,
	EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_tilde,	"~",		ex_substitute,
	EX_RANGE|EX_WHOLEFOLD|EX_EXTRA|EX_CMDWIN|EX_LOCK_OK|EX_MODIFY|EX_NONWHITE_OK,
	ADDR_LINES),

// commands that start with an uppercase letter
EXCMD(CMD_Next,		"Next",		ex_previous,
	EX_EXTRA|EX_RANGE|EX_COUNT|EX_BANG|EX_CMDARG|EX_ARGOPT|EX_TRLBAR,
	ADDR_OTHER),
EXCMD(CMD_Print,	"Print",	ex_print,
	EX_RANGE|EX_WHOLEFOLD|EX_COUNT|EX_FLAGS|EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
	ADDR_LINES),
EXCMD(CMD_X,		"X",		ex_X,
	EX_TRLBAR,
	ADDR_NONE),

// Commands that are recognized only in find_ex_command().
EXCMD(CMD_increment,	"++",		ex_incdec,
	EX_EXTRA|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),
EXCMD(CMD_decrement,	"--",		ex_incdec,
	EX_EXTRA|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
	ADDR_NONE),

#undef EXCMD

#ifndef DO_DECLARE_EXCMD
    CMD_SIZE,		// MUST be after all real commands!
    CMD_USER = -1,	// User-defined command
    CMD_USER_BUF = -2	// User-defined command local to buffer
#endif
};

#ifndef DO_DECLARE_EXCMD
typedef enum CMD_index cmdidx_T;

/*
 * Arguments used for an Ex command.
 */
struct exarg
{
    char_u	*arg;		// argument of the command
    char_u	*nextcmd;	// next command (NULL if none)
    char_u	*cmd;		// the name of the command (except for :make)
    char_u	**cmdlinep;	// pointer to pointer of allocated cmdline
#ifdef FEAT_EVAL
    char_u	*cmdline_tofree; // free later
#endif
    cmdidx_T	cmdidx;		// the index for the command
    long	argt;		// flags for the command
    int		skip;		// don't execute the command, only parse it
    int		forceit;	// TRUE if ! present
    int		addr_count;	// the number of addresses given
    linenr_T	line1;		// the first line number
    linenr_T	line2;		// the second line number or count
    cmd_addr_T	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
    int		append;		// TRUE with ":w >>file" command
    int		usefilter;	// TRUE with ":w !command" and ":r!command"
    int		amount;		// number of '>' or '<' for shift command
    int		regname;	// register name (NUL if none)
    int		force_bin;	// 0, FORCE_BIN or FORCE_NOBIN
    int		read_edit;	// ++edit argument
    int		force_ff;	// ++ff= argument (first char of argument)
    int		force_enc;	// ++enc= argument (index in cmd[])
    int		bad_char;	// BAD_KEEP, BAD_DROP or replacement byte
    int		useridx;	// user command index
    char	*errmsg;	// returned error message
    char_u	*(*ea_getline)(int, void *, int, getline_opt_T);
    void	*cookie;	// argument for getline()
#ifdef FEAT_EVAL
    cstack_T	*cstack;	// condition stack for ":if" etc.
#endif
};

#define FORCE_BIN 1		// ":edit ++bin file"
#define FORCE_NOBIN 2		// ":edit ++nobin file"

// Values for "flags"
#define EXFLAG_LIST	0x01	// 'l': list
#define EXFLAG_NR	0x02	// '#': number
#define EXFLAG_PRINT	0x04	// 'p': print

#endif