changeset 16475:854fb0ad4be6 v8.1.1241

patch 8.1.1241: Ex command info contains confusing information commit https://github.com/vim/vim/commit/b731689e85b4153af7edc8f0a6b9f99d36d8b011 Author: Bram Moolenaar <Bram@vim.org> Date: Wed May 1 18:08:42 2019 +0200 patch 8.1.1241: Ex command info contains confusing information Problem: Ex command info contains confusing information. Solution: When using the NOTADR flag use ADDR_OTHER for the address type. Cleanup code using NOTADR. Check for errors in create_cmdidxs.vim. Adjust Makefile to see the errors.
author Bram Moolenaar <Bram@vim.org>
date Wed, 01 May 2019 18:15:07 +0200
parents a85112628edc
children 9f2336fa44b9
files src/Makefile src/create_cmdidxs.vim src/ex_cmds.c src/ex_cmds.h src/ex_docmd.c src/testdir/test_usercommands.vim src/usercmd.c src/version.c src/window.c
diffstat 9 files changed, 769 insertions(+), 700 deletions(-) [+]
line wrap: on
line diff
--- a/src/Makefile
+++ b/src/Makefile
@@ -1987,7 +1987,7 @@ autoconf:
 # If this fails because you don't have Vim yet, first build and install Vim
 # without changes.
 cmdidxs: ex_cmds.h
-	vim -u NONE -i NONE -X -S create_cmdidxs.vim
+	vim --clean -X -u create_cmdidxs.vim
 
 
 # The normal command to compile a .c file to its .o file.
--- a/src/create_cmdidxs.vim
+++ b/src/create_cmdidxs.vim
@@ -10,7 +10,10 @@
 let cmds = []
 let skipped_cmds = 0
 
-for line in readfile('ex_cmds.h')
+let lines = readfile('ex_cmds.h')
+let idx = 0
+while idx < len(lines)
+  let line = lines[idx]
   if line =~ '^EX(CMD_'
     let m = matchlist(line, '^EX(CMD_\S*,\s*"\([a-z][^"]*\)"')
     if len(m) >= 2
@@ -18,8 +21,28 @@ for line in readfile('ex_cmds.h')
     else
       let skipped_cmds += 1
     endif
+
+    let idx += 1
+    let flags = lines[idx]
+    let idx += 1
+    let addr_type = lines[idx]
+
+    if flags =~ '\<RANGE\>'
+      if addr_type =~ 'ADDR_NONE'
+	echoerr 'ex_cmds.h:' .. (idx - 1) .. ': Using RANGE with ADDR_NONE: ' .. line
+      endif
+    else
+      if addr_type !~ 'ADDR_NONE'
+	echoerr 'ex_cmds.h:' .. (idx - 1) .. ': Missing ADDR_NONE: ' .. line
+      endif
+    endif
+
+    if flags =~ '\<DFLALL\>' && (addr_type =~ 'ADDR_OTHER' || addr_type =~ 'ADDR_NONE')
+      echoerr 'ex_cmds.h:' .. (idx - 1) .. ': Missing misplaced DFLALL: ' .. line
+    endif
   endif
-endfor
+  let idx += 1
+endwhile
 
 let cmdidxs1 = {}
 let cmdidxs2 = {}
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -3157,6 +3157,13 @@ ex_update(exarg_T *eap)
     void
 ex_write(exarg_T *eap)
 {
+    if (eap->cmdidx == CMD_saveas)
+    {
+	// :saveas does not take a range, uses all lines.
+	eap->line1 = 1;
+	eap->line2 = curbuf->b_ml.ml_line_count;
+    }
+
     if (eap->usefilter)		/* input lines to shell command */
 	do_bang(1, eap, FALSE, TRUE, FALSE);
     else
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -28,50 +28,56 @@
  */
 
 #ifdef RANGE
-# undef RANGE			/* SASC on Amiga defines it */
+# undef RANGE			// SASC on Amiga defines it
 #endif
 
-#define RANGE		0x001	/* allow a linespecs */
-#define BANG		0x002	/* allow a ! after the command name */
-#define EXTRA		0x004	/* allow extra args after command name */
-#define XFILE		0x008	/* expand wildcards in extra part */
-#define NOSPC		0x010	/* no spaces allowed in the extra part */
-#define	DFLALL		0x020	/* default file range is 1,$ */
-#define WHOLEFOLD	0x040	/* extend range to include whole fold also
-				   when less than two numbers given */
-#define NEEDARG		0x080	/* argument required */
-#define TRLBAR		0x100	/* check for trailing vertical bar */
-#define REGSTR		0x200	/* allow "x for register designation */
-#define COUNT		0x400	/* allow count in argument, after command */
-#define NOTRLCOM	0x800	/* no trailing comment allowed */
-#define ZEROR	       0x1000	/* zero line number allowed */
-#define USECTRLV       0x2000	/* do not remove CTRL-V from argument */
-#define NOTADR	       0x4000	/* number before command is not an address */
-#define EDITCMD	       0x8000	/* allow "+command" argument */
-#define BUFNAME	      0x10000L	/* accepts buffer name */
-#define BUFUNL	      0x20000L	/* accepts unlisted buffer too */
-#define ARGOPT	      0x40000L	/* allow "++opt=val" argument */
-#define SBOXOK	      0x80000L	/* allowed in the sandbox */
-#define CMDWIN	     0x100000L	/* allowed in cmdline window; when missing
-				 * disallows editing another buffer when
-				 * curbuf_lock is set */
-#define MODIFY       0x200000L	/* forbidden in non-'modifiable' buffer */
-#define EXFLAGS      0x400000L	/* allow flags after count in argument */
-#define RESTRICT     0x800000L	/* forbidden in restricted mode */
-#define FILES	(XFILE | EXTRA)	/* multiple extra files allowed */
-#define WORD1	(EXTRA | NOSPC)	/* one extra word allowed */
-#define FILE1	(FILES | NOSPC)	/* 1 file allowed, defaults to current file */
+#define RANGE		0x001	// allow a linespecs
+#define BANG		0x002	// allow a ! after the command name
+#define EXTRA		0x004	// allow extra args after command name
+#define XFILE		0x008	// expand wildcards in extra part
+#define NOSPC		0x010	// no spaces allowed in the extra part
+#define	DFLALL		0x020	// default file range is 1,$
+#define WHOLEFOLD	0x040	// extend range to include whole fold also
+				// when less than two numbers given
+#define NEEDARG		0x080	// argument required
+#define TRLBAR		0x100	// check for trailing vertical bar
+#define REGSTR		0x200	// allow "x for register designation
+#define COUNT		0x400	// allow count in argument, after command
+#define NOTRLCOM	0x800	// no trailing comment allowed
+#define ZEROR	       0x1000	// zero line number allowed
+#define USECTRLV       0x2000	// do not remove CTRL-V from argument
+#define EDITCMD	       0x4000	// allow "+command" argument
+#define BUFNAME	       0x8000	// accepts buffer name
+#define BUFUNL	      0x10000L	// accepts unlisted buffer too
+#define ARGOPT	      0x20000L	// allow "++opt=val" argument
+#define SBOXOK	      0x40000L	// allowed in the sandbox
+#define CMDWIN	      0x80000L	// allowed in cmdline window; when missing
+				// disallows editing another buffer when
+				// curbuf_lock is set
+#define MODIFY       0x100000L	// forbidden in non-'modifiable' buffer
+#define EXFLAGS      0x200000L	// allow flags after count in argument
+#define RESTRICT     0x400000L	// forbidden in restricted mode
+#define FILES	(XFILE | EXTRA)	// multiple extra files allowed
+#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   // buffer line numbers
-#define ADDR_WINDOWS		1   // window number
-#define ADDR_ARGUMENTS		2   // argument number
-#define ADDR_LOADED_BUFFERS	3   // buffer number of loaded buffer
-#define ADDR_BUFFERS		4   // buffer number
-#define ADDR_TABS		5   // tab page number
-#define ADDR_TABS_RELATIVE	6   // Tab page that only relative
-#define ADDR_QUICKFIX		7   // quickfix list entry number
-#define ADDR_OTHER		99  // something else
+#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,	 // quickfix list entry number
+    ADDR_OTHER,		 // something else
+    ADDR_NONE		 // no range used
+} cmd_addr_T;
+#endif
 
 #ifndef DO_DECLARE_EXCMD
 typedef struct exarg exarg_T;
@@ -95,10 +101,10 @@ 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 */
-    int		cmd_addr_type;	/* flag for address type */
+    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 EX(a, b, c, d, e)  a
@@ -110,355 +116,355 @@ EX(CMD_append,		"append",	ex_append,
 			ADDR_LINES),
 EX(CMD_abbreviate,	"abbreviate",	ex_abbreviate,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_abclear,		"abclear",	ex_abclear,
 			EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_aboveleft,	"aboveleft",	ex_wrongmodifier,
 			NEEDARG|EXTRA|NOTRLCOM,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_all,		"all",		ex_all,
-			BANG|RANGE|NOTADR|COUNT|TRLBAR,
-			ADDR_LINES),
+			BANG|RANGE|COUNT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_amenu,		"amenu",	ex_menu,
-			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			RANGE|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_anoremenu,	"anoremenu",	ex_menu,
-			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			RANGE|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_args,		"args",		ex_args,
 			BANG|FILES|EDITCMD|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_argadd,		"argadd",	ex_argadd,
-			BANG|RANGE|NOTADR|ZEROR|FILES|TRLBAR,
+			BANG|RANGE|ZEROR|FILES|TRLBAR,
 			ADDR_ARGUMENTS),
 EX(CMD_argdelete,	"argdelete",	ex_argdelete,
-			BANG|RANGE|NOTADR|FILES|TRLBAR,
+			BANG|RANGE|FILES|TRLBAR,
 			ADDR_ARGUMENTS),
 EX(CMD_argdo,		"argdo",	ex_listdo,
-			BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
+			BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|DFLALL,
 			ADDR_ARGUMENTS),
 EX(CMD_argedit,		"argedit",	ex_argedit,
-			BANG|NEEDARG|RANGE|NOTADR|ZEROR|FILES|EDITCMD|ARGOPT|TRLBAR,
+			BANG|NEEDARG|RANGE|ZEROR|FILES|EDITCMD|ARGOPT|TRLBAR,
 			ADDR_ARGUMENTS),
 EX(CMD_argglobal,	"argglobal",	ex_args,
 			BANG|FILES|EDITCMD|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_arglocal,	"arglocal",	ex_args,
 			BANG|FILES|EDITCMD|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_argument,	"argument",	ex_argument,
-			BANG|RANGE|NOTADR|COUNT|EXTRA|EDITCMD|ARGOPT|TRLBAR,
+			BANG|RANGE|COUNT|EXTRA|EDITCMD|ARGOPT|TRLBAR,
 			ADDR_ARGUMENTS),
 EX(CMD_ascii,		"ascii",	do_ascii,
 			TRLBAR|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_autocmd,		"autocmd",	ex_autocmd,
 			BANG|EXTRA|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_augroup,		"augroup",	ex_autocmd,
 			BANG|WORD1|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_aunmenu,		"aunmenu",	ex_menu,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_buffer,		"buffer",	ex_buffer,
-			BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|EDITCMD|TRLBAR,
+			BANG|RANGE|BUFNAME|BUFUNL|COUNT|EXTRA|EDITCMD|TRLBAR,
 			ADDR_BUFFERS),
 EX(CMD_bNext,		"bNext",	ex_bprevious,
-			BANG|RANGE|NOTADR|COUNT|EDITCMD|TRLBAR,
-			ADDR_LINES),
+			BANG|RANGE|COUNT|EDITCMD|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_ball,		"ball",		ex_buffer_all,
-			RANGE|NOTADR|COUNT|TRLBAR,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_badd,		"badd",		ex_edit,
 			NEEDARG|FILE1|EDITCMD|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_bdelete,		"bdelete",	ex_bunload,
-			BANG|RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR,
+			BANG|RANGE|BUFNAME|COUNT|EXTRA|TRLBAR,
 			ADDR_BUFFERS),
 EX(CMD_behave,		"behave",	ex_behave,
 			BANG|NEEDARG|WORD1|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_belowright,	"belowright",	ex_wrongmodifier,
 			NEEDARG|EXTRA|NOTRLCOM,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_bfirst,		"bfirst",	ex_brewind,
-			BANG|RANGE|NOTADR|EDITCMD|TRLBAR,
-			ADDR_LINES),
+			BANG|RANGE|EDITCMD|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_blast,		"blast",	ex_blast,
-			BANG|RANGE|NOTADR|EDITCMD|TRLBAR,
-			ADDR_LINES),
+			BANG|RANGE|EDITCMD|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_bmodified,	"bmodified",	ex_bmodified,
-			BANG|RANGE|NOTADR|COUNT|EDITCMD|TRLBAR,
-			ADDR_LINES),
+			BANG|RANGE|COUNT|EDITCMD|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_bnext,		"bnext",	ex_bnext,
-			BANG|RANGE|NOTADR|COUNT|EDITCMD|TRLBAR,
-			ADDR_LINES),
+			BANG|RANGE|COUNT|EDITCMD|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_botright,	"botright",	ex_wrongmodifier,
 			NEEDARG|EXTRA|NOTRLCOM,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_bprevious,	"bprevious",	ex_bprevious,
-			BANG|RANGE|NOTADR|COUNT|EDITCMD|TRLBAR,
-			ADDR_LINES),
+			BANG|RANGE|COUNT|EDITCMD|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_brewind,		"brewind",	ex_brewind,
-			BANG|RANGE|NOTADR|EDITCMD|TRLBAR,
-			ADDR_LINES),
+			BANG|RANGE|EDITCMD|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_break,		"break",	ex_break,
 			TRLBAR|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_breakadd,	"breakadd",	ex_breakadd,
 			EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_breakdel,	"breakdel",	ex_breakdel,
 			EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_breaklist,	"breaklist",	ex_breaklist,
 			EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_browse,		"browse",	ex_wrongmodifier,
 			NEEDARG|EXTRA|NOTRLCOM|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_buffers,		"buffers",	buflist_list,
 			BANG|EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_bufdo,		"bufdo",	ex_listdo,
-			BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
+			BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|DFLALL,
 			ADDR_BUFFERS),
 EX(CMD_bunload,		"bunload",	ex_bunload,
-			BANG|RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR,
+			BANG|RANGE|BUFNAME|COUNT|EXTRA|TRLBAR,
 			ADDR_LOADED_BUFFERS),
 EX(CMD_bwipeout,	"bwipeout",	ex_bunload,
-			BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|TRLBAR,
+			BANG|RANGE|BUFNAME|BUFUNL|COUNT|EXTRA|TRLBAR,
 			ADDR_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),
+			RANGE|COUNT|TRLBAR|BANG,
+			ADDR_OTHER),
 EX(CMD_cNfile,		"cNfile",	ex_cnext,
-			RANGE|NOTADR|COUNT|TRLBAR|BANG,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR|BANG,
+			ADDR_OTHER),
 EX(CMD_cabbrev,		"cabbrev",	ex_abbreviate,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_cabclear,	"cabclear",	ex_abclear,
 			EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_caddbuffer,	"caddbuffer",	ex_cbuffer,
-			RANGE|NOTADR|WORD1|TRLBAR,
-			ADDR_LINES),
+			RANGE|WORD1|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_caddexpr,	"caddexpr",	ex_cexpr,
 			NEEDARG|WORD1|NOTRLCOM|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_caddfile,	"caddfile",	ex_cfile,
 			TRLBAR|FILE1,
-			ADDR_LINES),
+			ADDR_NONE),
 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),
+			ADDR_NONE),
 EX(CMD_cbuffer,		"cbuffer",	ex_cbuffer,
-			BANG|RANGE|NOTADR|WORD1|TRLBAR,
-			ADDR_LINES),
+			BANG|RANGE|WORD1|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_cbottom,		"cbottom",	ex_cbottom,
 			TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_cc,		"cc",		ex_cc,
-			RANGE|NOTADR|COUNT|TRLBAR|BANG,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR|BANG,
+			ADDR_OTHER),
 EX(CMD_cclose,		"cclose",	ex_cclose,
-			RANGE|NOTADR|COUNT|TRLBAR,
-			ADDR_LINES),
+			TRLBAR,
+			ADDR_NONE),
 EX(CMD_cd,		"cd",		ex_cd,
 			BANG|FILE1|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_cdo,		"cdo",		ex_listdo,
-			BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
+			BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|DFLALL,
 			ADDR_QUICKFIX),
 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),
+			ADDR_NONE),
 EX(CMD_cfile,		"cfile",	ex_cfile,
 			TRLBAR|FILE1|BANG,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_cfdo,		"cfdo",		ex_listdo,
-			BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
+			BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|DFLALL,
 			ADDR_QUICKFIX),
 EX(CMD_cfirst,		"cfirst",	ex_cc,
-			RANGE|NOTADR|COUNT|TRLBAR|BANG,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR|BANG,
+			ADDR_OTHER),
 EX(CMD_cgetfile,	"cgetfile",	ex_cfile,
 			TRLBAR|FILE1,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_cgetbuffer,	"cgetbuffer",	ex_cbuffer,
-			RANGE|NOTADR|WORD1|TRLBAR,
-			ADDR_LINES),
+			RANGE|WORD1|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_cgetexpr,	"cgetexpr",	ex_cexpr,
 			NEEDARG|WORD1|NOTRLCOM|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_chdir,		"chdir",	ex_cd,
 			BANG|FILE1|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_changes,		"changes",	ex_changes,
 			TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_checkpath,	"checkpath",	ex_checkpath,
 			TRLBAR|BANG|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_checktime,	"checktime",	ex_checktime,
-			RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR,
-			ADDR_LINES),
+			RANGE|BUFNAME|COUNT|EXTRA|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_chistory,	"chistory",	qf_history,
 			TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_clist,		"clist",	qf_list,
 			BANG|EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_clast,		"clast",	ex_cc,
-			RANGE|NOTADR|COUNT|TRLBAR|BANG,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR|BANG,
+			ADDR_OTHER),
 EX(CMD_close,		"close",	ex_close,
-			BANG|RANGE|NOTADR|COUNT|TRLBAR|CMDWIN,
+			BANG|RANGE|COUNT|TRLBAR|CMDWIN,
 			ADDR_WINDOWS),
 EX(CMD_clearjumps,	"clearjumps",	ex_clearjumps,
 			TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_cmap,		"cmap",		ex_map,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_cmapclear,	"cmapclear",	ex_mapclear,
 			EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_cmenu,		"cmenu",	ex_menu,
-			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			RANGE|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_cnext,		"cnext",	ex_cnext,
-			RANGE|NOTADR|COUNT|TRLBAR|BANG,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR|BANG,
+			ADDR_OTHER),
 EX(CMD_cnewer,		"cnewer",	qf_age,
-			RANGE|NOTADR|COUNT|TRLBAR,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_cnfile,		"cnfile",	ex_cnext,
-			RANGE|NOTADR|COUNT|TRLBAR|BANG,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR|BANG,
+			ADDR_OTHER),
 EX(CMD_cnoremap,	"cnoremap",	ex_map,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_cnoreabbrev,	"cnoreabbrev",	ex_abbreviate,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_cnoremenu,	"cnoremenu",	ex_menu,
-			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			RANGE|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
+			ADDR_OTHER),
 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),
+			RANGE|COUNT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_colorscheme,	"colorscheme",	ex_colorscheme,
 			WORD1|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_command,		"command",	ex_command,
 			EXTRA|BANG|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_comclear,	"comclear",	ex_comclear,
 			TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_compiler,	"compiler",	ex_compiler,
 			BANG|TRLBAR|WORD1|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_continue,	"continue",	ex_continue,
 			TRLBAR|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_confirm,		"confirm",	ex_wrongmodifier,
 			NEEDARG|EXTRA|NOTRLCOM|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_copen,		"copen",	ex_copen,
-			RANGE|NOTADR|COUNT|TRLBAR,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_cprevious,	"cprevious",	ex_cnext,
-			RANGE|NOTADR|COUNT|TRLBAR|BANG,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR|BANG,
+			ADDR_OTHER),
 EX(CMD_cpfile,		"cpfile",	ex_cnext,
-			RANGE|NOTADR|COUNT|TRLBAR|BANG,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR|BANG,
+			ADDR_OTHER),
 EX(CMD_cquit,		"cquit",	ex_cquit,
 			TRLBAR|BANG,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_crewind,		"crewind",	ex_cc,
-			RANGE|NOTADR|COUNT|TRLBAR|BANG,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR|BANG,
+			ADDR_OTHER),
 EX(CMD_cscope,		"cscope",	ex_cscope,
 			EXTRA|NOTRLCOM|XFILE,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_cstag,		"cstag",	ex_cstag,
 			BANG|TRLBAR|WORD1,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_cunmap,		"cunmap",	ex_unmap,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_cunabbrev,	"cunabbrev",	ex_abbreviate,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_cunmenu,		"cunmenu",	ex_menu,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_cwindow,		"cwindow",	ex_cwindow,
-			RANGE|NOTADR|COUNT|TRLBAR,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR,
+			ADDR_OTHER),
 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),
+			ADDR_NONE),
 EX(CMD_debug,		"debug",	ex_debug,
 			NEEDARG|EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_debuggreedy,	"debuggreedy",	ex_debuggreedy,
-			RANGE|NOTADR|ZEROR|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			RANGE|ZEROR|TRLBAR|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_delcommand,	"delcommand",	ex_delcommand,
 			NEEDARG|WORD1|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_delfunction,	"delfunction",	ex_delfunction,
 			BANG|NEEDARG|WORD1|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_display,		"display",	ex_display,
 			EXTRA|NOTRLCOM|TRLBAR|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_diffupdate,	"diffupdate",	ex_diffupdate,
 			BANG|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_diffget,		"diffget",	ex_diffgetput,
 			RANGE|EXTRA|TRLBAR|MODIFY,
 			ADDR_LINES),
 EX(CMD_diffoff,		"diffoff",	ex_diffoff,
 			BANG|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_diffpatch,	"diffpatch",	ex_diffpatch,
 			EXTRA|FILE1|TRLBAR|MODIFY,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_diffput,		"diffput",	ex_diffgetput,
 			RANGE|EXTRA|TRLBAR,
 			ADDR_LINES),
 EX(CMD_diffsplit,	"diffsplit",	ex_diffsplit,
 			EXTRA|FILE1|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_diffthis,	"diffthis",	ex_diffthis,
 			TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_digraphs,	"digraphs",	ex_digraphs,
 			BANG|EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_djump,		"djump",	ex_findpat,
 			BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA,
 			ADDR_LINES),
@@ -467,13 +473,13 @@ EX(CMD_dlist,		"dlist",	ex_findpat,
 			ADDR_LINES),
 EX(CMD_doautocmd,	"doautocmd",	ex_doautocmd,
 			EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_doautoall,	"doautoall",	ex_doautoall,
 			EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_drop,		"drop",		ex_drop,
 			FILES|EDITCMD|NEEDARG|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_dsearch,		"dsearch",	ex_findpat,
 			BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA|CMDWIN,
 			ADDR_LINES),
@@ -482,91 +488,91 @@ EX(CMD_dsplit,		"dsplit",	ex_findpat,
 			ADDR_LINES),
 EX(CMD_edit,		"edit",		ex_edit,
 			BANG|FILE1|EDITCMD|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_earlier,		"earlier",	ex_later,
 			TRLBAR|EXTRA|NOSPC|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_echo,		"echo",		ex_echo,
 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_echoerr,		"echoerr",	ex_execute,
 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_echohl,		"echohl",	ex_echohl,
 			EXTRA|TRLBAR|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_echomsg,		"echomsg",	ex_execute,
 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_echon,		"echon",	ex_echo,
 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_else,		"else",		ex_else,
 			TRLBAR|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_elseif,		"elseif",	ex_else,
 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_emenu,		"emenu",	ex_emenu,
-			NEEDARG|EXTRA|TRLBAR|NOTRLCOM|RANGE|NOTADR|CMDWIN,
-			ADDR_LINES),
+			NEEDARG|EXTRA|TRLBAR|NOTRLCOM|RANGE|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_endif,		"endif",	ex_endif,
 			TRLBAR|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_endfunction,	"endfunction",	ex_endfunction,
 			TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_endfor,		"endfor",	ex_endwhile,
 			TRLBAR|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_endtry,		"endtry",	ex_endtry,
 			TRLBAR|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_endwhile,	"endwhile",	ex_endwhile,
 			TRLBAR|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_enew,		"enew",		ex_edit,
 			BANG|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_ex,		"ex",		ex_edit,
 			BANG|FILE1|EDITCMD|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_execute,		"execute",	ex_execute,
 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 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),
+			ADDR_NONE),
 EX(CMD_file,		"file",		ex_file,
-			RANGE|NOTADR|ZEROR|BANG|FILE1|TRLBAR,
-			ADDR_LINES),
+			RANGE|ZEROR|BANG|FILE1|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_files,		"files",	buflist_list,
 			BANG|EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_filetype,	"filetype",	ex_filetype,
 			EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_filter,		"filter",	ex_wrongmodifier,
 			BANG|NEEDARG|EXTRA|NOTRLCOM,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_find,		"find",		ex_find,
-			RANGE|NOTADR|BANG|FILE1|EDITCMD|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			RANGE|BANG|FILE1|EDITCMD|ARGOPT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_finally,		"finally",	ex_finally,
 			TRLBAR|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_finish,		"finish",	ex_finish,
 			TRLBAR|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_first,		"first",	ex_rewind,
 			EXTRA|BANG|EDITCMD|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_fixdel,		"fixdel",	do_fixdel,
 			TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_fold,		"fold",		ex_fold,
 			RANGE|WHOLEFOLD|TRLBAR|SBOXOK|CMDWIN,
 			ADDR_LINES),
@@ -584,67 +590,67 @@ EX(CMD_foldopen,	"foldopen",	ex_foldopen
 			ADDR_LINES),
 EX(CMD_for,		"for",		ex_while,
 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_function,	"function",	ex_function,
 			EXTRA|BANG|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 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),
+			RANGE|COUNT|TRLBAR|SBOXOK|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_grep,		"grep",		ex_make,
-			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
-			ADDR_LINES),
+			RANGE|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
+			ADDR_OTHER),
 EX(CMD_grepadd,		"grepadd",	ex_make,
-			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
-			ADDR_LINES),
+			RANGE|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
+			ADDR_OTHER),
 EX(CMD_gui,		"gui",		ex_gui,
 			BANG|FILES|EDITCMD|ARGOPT|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_gvim,		"gvim",		ex_gui,
 			BANG|FILES|EDITCMD|ARGOPT|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_help,		"help",		ex_help,
 			BANG|EXTRA|NOTRLCOM,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_helpclose,	"helpclose",	ex_helpclose,
-			RANGE|NOTADR|COUNT|TRLBAR,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_helpfind,	"helpfind",	ex_helpfind,
 			EXTRA|NOTRLCOM,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_helpgrep,	"helpgrep",	ex_helpgrep,
 			EXTRA|NOTRLCOM|NEEDARG,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_helptags,	"helptags",	ex_helptags,
 			NEEDARG|FILES|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 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),
+			ADDR_NONE),
 EX(CMD_hide,		"hide",		ex_hide,
-			BANG|RANGE|NOTADR|COUNT|EXTRA|TRLBAR,
+			BANG|RANGE|COUNT|EXTRA|TRLBAR,
 			ADDR_WINDOWS),
 EX(CMD_history,		"history",	ex_history,
 			EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 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),
+			ADDR_NONE),
 EX(CMD_iabclear,	"iabclear",	ex_abclear,
 			EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_if,		"if",		ex_if,
 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_ijump,		"ijump",	ex_findpat,
 			BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA,
 			ADDR_LINES),
@@ -653,25 +659,25 @@ EX(CMD_ilist,		"ilist",	ex_findpat,
 			ADDR_LINES),
 EX(CMD_imap,		"imap",		ex_map,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_imapclear,	"imapclear",	ex_mapclear,
 			EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_imenu,		"imenu",	ex_menu,
-			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			RANGE|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_inoremap,	"inoremap",	ex_map,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_inoreabbrev,	"inoreabbrev",	ex_abbreviate,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_inoremenu,	"inoremenu",	ex_menu,
-			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			RANGE|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_intro,		"intro",	ex_intro,
 			TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_isearch,		"isearch",	ex_findpat,
 			BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA|CMDWIN,
 			ADDR_LINES),
@@ -680,187 +686,187 @@ EX(CMD_isplit,		"isplit",	ex_findpat,
 			ADDR_LINES),
 EX(CMD_iunmap,		"iunmap",	ex_unmap,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_iunabbrev,	"iunabbrev",	ex_abbreviate,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_iunmenu,		"iunmenu",	ex_menu,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 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),
+			ADDR_NONE),
 EX(CMD_k,		"k",		ex_mark,
 			RANGE|WORD1|TRLBAR|SBOXOK|CMDWIN,
 			ADDR_LINES),
 EX(CMD_keepmarks,	"keepmarks",	ex_wrongmodifier,
 			NEEDARG|EXTRA|NOTRLCOM,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_keepjumps,	"keepjumps",	ex_wrongmodifier,
 			NEEDARG|EXTRA|NOTRLCOM,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_keeppatterns,	"keeppatterns",	ex_wrongmodifier,
 			NEEDARG|EXTRA|NOTRLCOM,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_keepalt,		"keepalt",	ex_wrongmodifier,
 			NEEDARG|EXTRA|NOTRLCOM,
-			ADDR_LINES),
+			ADDR_NONE),
 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),
+			RANGE|COUNT|TRLBAR|BANG,
+			ADDR_OTHER),
 EX(CMD_lNfile,		"lNfile",	ex_cnext,
-			RANGE|NOTADR|COUNT|TRLBAR|BANG,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR|BANG,
+			ADDR_OTHER),
 EX(CMD_last,		"last",		ex_last,
 			EXTRA|BANG|EDITCMD|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_language,	"language",	ex_language,
 			EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_laddexpr,	"laddexpr",	ex_cexpr,
 			NEEDARG|WORD1|NOTRLCOM|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_laddbuffer,	"laddbuffer",	ex_cbuffer,
-			RANGE|NOTADR|WORD1|TRLBAR,
-			ADDR_LINES),
+			RANGE|WORD1|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_laddfile,	"laddfile",	ex_cfile,
 			TRLBAR|FILE1,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_later,		"later",	ex_later,
 			TRLBAR|EXTRA|NOSPC|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_lbuffer,		"lbuffer",	ex_cbuffer,
-			BANG|RANGE|NOTADR|WORD1|TRLBAR,
-			ADDR_LINES),
+			BANG|RANGE|WORD1|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_lbottom,		"lbottom",	ex_cbottom,
 			TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_lcd,		"lcd",		ex_cd,
 			BANG|FILE1|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_lchdir,		"lchdir",	ex_cd,
 			BANG|FILE1|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_lclose,		"lclose",	ex_cclose,
-			RANGE|NOTADR|COUNT|TRLBAR,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_lcscope,		"lcscope",	ex_cscope,
 			EXTRA|NOTRLCOM|XFILE,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_ldo,		"ldo",		ex_listdo,
-			BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
+			BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|DFLALL,
 			ADDR_QUICKFIX),
 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),
+			ADDR_NONE),
 EX(CMD_let,		"let",		ex_let,
 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_lexpr,		"lexpr",	ex_cexpr,
 			NEEDARG|WORD1|NOTRLCOM|TRLBAR|BANG,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_lfile,		"lfile",	ex_cfile,
 			TRLBAR|FILE1|BANG,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_lfdo,		"lfdo",		ex_listdo,
-			BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
+			BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|DFLALL,
 			ADDR_QUICKFIX),
 EX(CMD_lfirst,		"lfirst",	ex_cc,
-			RANGE|NOTADR|COUNT|TRLBAR|BANG,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR|BANG,
+			ADDR_OTHER),
 EX(CMD_lgetfile,	"lgetfile",	ex_cfile,
 			TRLBAR|FILE1,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_lgetbuffer,	"lgetbuffer",	ex_cbuffer,
-			RANGE|NOTADR|WORD1|TRLBAR,
-			ADDR_LINES),
+			RANGE|WORD1|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_lgetexpr,	"lgetexpr",	ex_cexpr,
 			NEEDARG|WORD1|NOTRLCOM|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_lgrep,		"lgrep",	ex_make,
-			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
-			ADDR_LINES),
+			RANGE|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
+			ADDR_OTHER),
 EX(CMD_lgrepadd,	"lgrepadd",	ex_make,
-			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
-			ADDR_LINES),
+			RANGE|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
+			ADDR_OTHER),
 EX(CMD_lhelpgrep,	"lhelpgrep",	ex_helpgrep,
 			EXTRA|NOTRLCOM|NEEDARG,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_lhistory,	"lhistory",	qf_history,
 			TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_ll,		"ll",		ex_cc,
-			RANGE|NOTADR|COUNT|TRLBAR|BANG,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR|BANG,
+			ADDR_OTHER),
 EX(CMD_llast,		"llast",	ex_cc,
-			RANGE|NOTADR|COUNT|TRLBAR|BANG,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR|BANG,
+			ADDR_OTHER),
 EX(CMD_llist,		"llist",	qf_list,
 			BANG|EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_lmap,		"lmap",		ex_map,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_lmapclear,	"lmapclear",	ex_mapclear,
 			EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_lmake,		"lmake",	ex_make,
 			BANG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_lnoremap,	"lnoremap",	ex_map,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_lnext,		"lnext",	ex_cnext,
-			RANGE|NOTADR|COUNT|TRLBAR|BANG,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR|BANG,
+			ADDR_OTHER),
 EX(CMD_lnewer,		"lnewer",	qf_age,
-			RANGE|NOTADR|COUNT|TRLBAR,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_lnfile,		"lnfile",	ex_cnext,
-			RANGE|NOTADR|COUNT|TRLBAR|BANG,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR|BANG,
+			ADDR_OTHER),
 EX(CMD_loadview,	"loadview",	ex_loadview,
 			FILE1|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_loadkeymap,	"loadkeymap",	ex_loadkeymap,
 			CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_lockmarks,	"lockmarks",	ex_wrongmodifier,
 			NEEDARG|EXTRA|NOTRLCOM,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_lockvar,		"lockvar",	ex_lockvar,
 			BANG|EXTRA|NEEDARG|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_lolder,		"lolder",	qf_age,
-			RANGE|NOTADR|COUNT|TRLBAR,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_lopen,		"lopen",	ex_copen,
-			RANGE|NOTADR|COUNT|TRLBAR,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_lprevious,	"lprevious",	ex_cnext,
-			RANGE|NOTADR|COUNT|TRLBAR|BANG,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR|BANG,
+			ADDR_OTHER),
 EX(CMD_lpfile,		"lpfile",	ex_cnext,
-			RANGE|NOTADR|COUNT|TRLBAR|BANG,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR|BANG,
+			ADDR_OTHER),
 EX(CMD_lrewind,		"lrewind",	ex_cc,
-			RANGE|NOTADR|COUNT|TRLBAR|BANG,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR|BANG,
+			ADDR_OTHER),
 EX(CMD_ltag,		"ltag",	ex_tag,
-			NOTADR|TRLBAR|BANG|WORD1,
-			ADDR_LINES),
+			TRLBAR|BANG|WORD1,
+			ADDR_NONE),
 EX(CMD_lunmap,		"lunmap",	ex_unmap,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_lua,		"lua",		ex_lua,
 			RANGE|EXTRA|NEEDARG|CMDWIN|RESTRICT,
 			ADDR_LINES),
@@ -871,17 +877,17 @@ EX(CMD_luafile,		"luafile",	ex_luafile,
 			RANGE|FILE1|NEEDARG|CMDWIN|RESTRICT,
 			ADDR_LINES),
 EX(CMD_lvimgrep,	"lvimgrep",	ex_vimgrep,
-			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
-			ADDR_LINES),
+			RANGE|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
+			ADDR_OTHER),
 EX(CMD_lvimgrepadd,	"lvimgrepadd",	ex_vimgrep,
-			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
-			ADDR_LINES),
+			RANGE|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
+			ADDR_OTHER),
 EX(CMD_lwindow,		"lwindow",	ex_cwindow,
-			RANGE|NOTADR|COUNT|TRLBAR,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_ls,		"ls",		buflist_list,
 			BANG|EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_move,		"move",		ex_copymove,
 			RANGE|WHOLEFOLD|EXTRA|TRLBAR|CMDWIN|MODIFY,
 			ADDR_LINES),
@@ -890,46 +896,46 @@ EX(CMD_mark,		"mark",		ex_mark,
 			ADDR_LINES),
 EX(CMD_make,		"make",		ex_make,
 			BANG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_map,		"map",		ex_map,
 			BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_mapclear,	"mapclear",	ex_mapclear,
 			EXTRA|BANG|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_marks,		"marks",	do_marks,
 			EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_match,		"match",	ex_match,
-			RANGE|NOTADR|EXTRA|CMDWIN,
-			ADDR_LINES),
+			RANGE|EXTRA|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_menu,		"menu",		ex_menu,
-			RANGE|NOTADR|ZEROR|BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			RANGE|ZEROR|BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_menutranslate,	"menutranslate", ex_menutranslate,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_messages,	"messages",	ex_messages,
 			EXTRA|TRLBAR|RANGE|CMDWIN,
 			ADDR_OTHER),
 EX(CMD_mkexrc,		"mkexrc",	ex_mkrc,
 			BANG|FILE1|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_mksession,	"mksession",	ex_mkrc,
 			BANG|FILE1|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_mkspell,		"mkspell",	ex_mkspell,
 			BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_mkvimrc,		"mkvimrc",	ex_mkrc,
 			BANG|FILE1|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_mkview,		"mkview",	ex_mkrc,
 			BANG|FILE1|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_mode,		"mode",		ex_mode,
 			WORD1|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_mzscheme,	"mzscheme",	ex_mzscheme,
 			RANGE|EXTRA|DFLALL|NEEDARG|CMDWIN|SBOXOK|RESTRICT,
 			ADDR_LINES),
@@ -937,53 +943,53 @@ EX(CMD_mzfile,		"mzfile",	ex_mzfile,
 			RANGE|FILE1|NEEDARG|CMDWIN|RESTRICT,
 			ADDR_LINES),
 EX(CMD_next,		"next",		ex_next,
-			RANGE|NOTADR|BANG|FILES|EDITCMD|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			RANGE|BANG|FILES|EDITCMD|ARGOPT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_nbkey,		"nbkey",	ex_nbkey,
-			EXTRA|NOTADR|NEEDARG,
-			ADDR_LINES),
+			EXTRA|NEEDARG,
+			ADDR_NONE),
 EX(CMD_nbclose,		"nbclose",	ex_nbclose,
 			TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_nbstart,		"nbstart",	ex_nbstart,
 			WORD1|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_new,		"new",		ex_splitview,
-			BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			BANG|FILE1|RANGE|EDITCMD|ARGOPT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_nmap,		"nmap",		ex_map,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_nmapclear,	"nmapclear",	ex_mapclear,
 			EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_nmenu,		"nmenu",	ex_menu,
-			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			RANGE|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_nnoremap,	"nnoremap",	ex_map,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_nnoremenu,	"nnoremenu",	ex_menu,
-			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			RANGE|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_noremap,		"noremap",	ex_map,
 			BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_noautocmd,	"noautocmd",	ex_wrongmodifier,
 			NEEDARG|EXTRA|NOTRLCOM,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_nohlsearch,	"nohlsearch",	ex_nohlsearch,
 			TRLBAR|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_noreabbrev,	"noreabbrev",	ex_abbreviate,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_noremenu,	"noremenu",	ex_menu,
-			RANGE|NOTADR|ZEROR|BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			RANGE|ZEROR|BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_noswapfile,	"noswapfile",	ex_wrongmodifier,
 			NEEDARG|EXTRA|NOTRLCOM,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_normal,		"normal",	ex_normal,
 			RANGE|BANG|EXTRA|NEEDARG|NOTRLCOM|USECTRLV|SBOXOK|CMDWIN,
 			ADDR_LINES),
@@ -992,58 +998,58 @@ EX(CMD_number,		"number",	ex_print,
 			ADDR_LINES),
 EX(CMD_nunmap,		"nunmap",	ex_unmap,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_nunmenu,		"nunmenu",	ex_menu,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_open,		"open",		ex_open,
 			RANGE|BANG|EXTRA,
 			ADDR_LINES),
 EX(CMD_oldfiles,	"oldfiles",	ex_oldfiles,
 			BANG|TRLBAR|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_omap,		"omap",		ex_map,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_omapclear,	"omapclear",	ex_mapclear,
 			EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_omenu,		"omenu",	ex_menu,
-			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			RANGE|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_only,		"only",		ex_only,
-			BANG|NOTADR|RANGE|COUNT|TRLBAR,
+			BANG|RANGE|COUNT|TRLBAR,
 			ADDR_WINDOWS),
 EX(CMD_onoremap,	"onoremap",	ex_map,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_onoremenu,	"onoremenu",	ex_menu,
-			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			RANGE|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_options,		"options",	ex_options,
 			TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_ounmap,		"ounmap",	ex_unmap,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_ounmenu,		"ounmenu",	ex_menu,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_ownsyntax,	"ownsyntax",	ex_ownsyntax,
 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_print,		"print",	ex_print,
 			RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN|SBOXOK,
 			ADDR_LINES),
 EX(CMD_packadd,		"packadd",	ex_packadd,
 			BANG|FILE1|NEEDARG|TRLBAR|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_packloadall,	"packloadall",	ex_packloadall,
 			BANG|TRLBAR|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_pclose,		"pclose",	ex_pclose,
 			BANG|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_perl,		"perl",		ex_perl,
 			RANGE|EXTRA|DFLALL|NEEDARG|SBOXOK|CMDWIN,
 			ADDR_LINES),
@@ -1052,70 +1058,70 @@ EX(CMD_perldo,		"perldo",	ex_perldo,
 			ADDR_LINES),
 EX(CMD_pedit,		"pedit",	ex_pedit,
 			BANG|FILE1|EDITCMD|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_pop,		"pop",		ex_tag,
-			RANGE|NOTADR|BANG|COUNT|TRLBAR|ZEROR,
-			ADDR_LINES),
+			RANGE|BANG|COUNT|TRLBAR|ZEROR,
+			ADDR_OTHER),
 EX(CMD_popup,		"popup",	ex_popup,
 			NEEDARG|EXTRA|BANG|TRLBAR|NOTRLCOM|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_ppop,		"ppop",		ex_ptag,
-			RANGE|NOTADR|BANG|COUNT|TRLBAR|ZEROR,
-			ADDR_LINES),
+			RANGE|BANG|COUNT|TRLBAR|ZEROR,
+			ADDR_OTHER),
 EX(CMD_preserve,	"preserve",	ex_preserve,
 			TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_previous,	"previous",	ex_previous,
-			EXTRA|RANGE|NOTADR|COUNT|BANG|EDITCMD|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			EXTRA|RANGE|COUNT|BANG|EDITCMD|ARGOPT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_promptfind,	"promptfind",	gui_mch_find_dialog,
 			EXTRA|NOTRLCOM|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_promptrepl,	"promptrepl",	gui_mch_replace_dialog,
 			EXTRA|NOTRLCOM|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_profile,		"profile",	ex_profile,
 			BANG|EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_profdel,		"profdel",	ex_breakdel,
 			EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 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),
+			RANGE|BANG|WORD1|TRLBAR|ZEROR,
+			ADDR_OTHER),
 EX(CMD_ptNext,		"ptNext",	ex_ptag,
-			RANGE|NOTADR|BANG|TRLBAR|ZEROR,
-			ADDR_LINES),
+			RANGE|BANG|TRLBAR|ZEROR,
+			ADDR_OTHER),
 EX(CMD_ptfirst,		"ptfirst",	ex_ptag,
-			RANGE|NOTADR|BANG|TRLBAR|ZEROR,
-			ADDR_LINES),
+			RANGE|BANG|TRLBAR|ZEROR,
+			ADDR_OTHER),
 EX(CMD_ptjump,		"ptjump",	ex_ptag,
 			BANG|TRLBAR|WORD1,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_ptlast,		"ptlast",	ex_ptag,
 			BANG|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_ptnext,		"ptnext",	ex_ptag,
-			RANGE|NOTADR|BANG|TRLBAR|ZEROR,
-			ADDR_LINES),
+			RANGE|BANG|TRLBAR|ZEROR,
+			ADDR_OTHER),
 EX(CMD_ptprevious,	"ptprevious",	ex_ptag,
-			RANGE|NOTADR|BANG|TRLBAR|ZEROR,
-			ADDR_LINES),
+			RANGE|BANG|TRLBAR|ZEROR,
+			ADDR_OTHER),
 EX(CMD_ptrewind,	"ptrewind",	ex_ptag,
-			RANGE|NOTADR|BANG|TRLBAR|ZEROR,
-			ADDR_LINES),
+			RANGE|BANG|TRLBAR|ZEROR,
+			ADDR_OTHER),
 EX(CMD_ptselect,	"ptselect",	ex_ptag,
 			BANG|TRLBAR|WORD1,
-			ADDR_LINES),
+			ADDR_NONE),
 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),
+			ADDR_NONE),
 EX(CMD_python,		"python",	ex_python,
 			RANGE|EXTRA|NEEDARG|CMDWIN|RESTRICT,
 			ADDR_LINES),
@@ -1150,59 +1156,59 @@ EX(CMD_pyxfile,		"pyxfile",	ex_pyxfile,
 			RANGE|FILE1|NEEDARG|CMDWIN|RESTRICT,
 			ADDR_LINES),
 EX(CMD_quit,		"quit",		ex_quit,
-			BANG|RANGE|COUNT|NOTADR|TRLBAR|CMDWIN,
+			BANG|RANGE|COUNT|TRLBAR|CMDWIN,
 			ADDR_WINDOWS),
 EX(CMD_quitall,		"quitall",	ex_quit_all,
 			BANG|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_qall,		"qall",		ex_quit_all,
 			BANG|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 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),
+			ADDR_NONE),
 EX(CMD_redo,		"redo",		ex_redo,
 			TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_redir,		"redir",	ex_redir,
 			BANG|FILES|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_redraw,		"redraw",	ex_redraw,
 			BANG|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_redrawstatus,	"redrawstatus",	ex_redrawstatus,
 			BANG|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_redrawtabline,	"redrawtabline", ex_redrawtabline,
 			TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_registers,	"registers",	ex_display,
 			EXTRA|NOTRLCOM|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_resize,		"resize",	ex_resize,
-			RANGE|NOTADR|TRLBAR|WORD1|CMDWIN,
-			ADDR_LINES),
+			RANGE|TRLBAR|WORD1|CMDWIN,
+			ADDR_OTHER),
 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),
+			ADDR_NONE),
 EX(CMD_rewind,		"rewind",	ex_rewind,
 			EXTRA|BANG|EDITCMD|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 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),
+			ADDR_NONE),
 EX(CMD_runtime,		"runtime",	ex_runtime,
 			BANG|NEEDARG|FILES|TRLBAR|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_ruby,		"ruby",		ex_ruby,
 			RANGE|EXTRA|NEEDARG|CMDWIN|RESTRICT,
 			ADDR_LINES),
@@ -1214,277 +1220,277 @@ EX(CMD_rubyfile,	"rubyfile",	ex_rubyfile
 			ADDR_LINES),
 EX(CMD_rundo,		"rundo",	ex_rundo,
 			NEEDARG|FILE1,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_rviminfo,	"rviminfo",	ex_viminfo,
 			BANG|FILE1|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 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),
+			EXTRA|RANGE|COUNT|BANG|EDITCMD|ARGOPT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_sargument,	"sargument",	ex_argument,
-			BANG|RANGE|NOTADR|COUNT|EXTRA|EDITCMD|ARGOPT|TRLBAR,
+			BANG|RANGE|COUNT|EXTRA|EDITCMD|ARGOPT|TRLBAR,
 			ADDR_ARGUMENTS),
 EX(CMD_sall,		"sall",		ex_all,
-			BANG|RANGE|NOTADR|COUNT|TRLBAR,
-			ADDR_LINES),
+			BANG|RANGE|COUNT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_sandbox,		"sandbox",	ex_wrongmodifier,
 			NEEDARG|EXTRA|NOTRLCOM,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_saveas,		"saveas",	ex_write,
-			BANG|DFLALL|FILE1|ARGOPT|CMDWIN|TRLBAR,
-			ADDR_LINES),
+			BANG|FILE1|ARGOPT|CMDWIN|TRLBAR,
+			ADDR_NONE),
 EX(CMD_sbuffer,		"sbuffer",	ex_buffer,
-			BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|EDITCMD|TRLBAR,
+			BANG|RANGE|BUFNAME|BUFUNL|COUNT|EXTRA|EDITCMD|TRLBAR,
 			ADDR_BUFFERS),
 EX(CMD_sbNext,		"sbNext",	ex_bprevious,
-			RANGE|NOTADR|COUNT|EDITCMD|TRLBAR,
-			ADDR_LINES),
+			RANGE|COUNT|EDITCMD|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_sball,		"sball",	ex_buffer_all,
-			RANGE|NOTADR|COUNT|EDITCMD|TRLBAR,
-			ADDR_LINES),
+			RANGE|COUNT|EDITCMD|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_sbfirst,		"sbfirst",	ex_brewind,
 			EDITCMD|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_sblast,		"sblast",	ex_blast,
 			EDITCMD|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_sbmodified,	"sbmodified",	ex_bmodified,
-			RANGE|NOTADR|COUNT|EDITCMD|TRLBAR,
-			ADDR_LINES),
+			RANGE|COUNT|EDITCMD|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_sbnext,		"sbnext",	ex_bnext,
-			RANGE|NOTADR|COUNT|EDITCMD|TRLBAR,
-			ADDR_LINES),
+			RANGE|COUNT|EDITCMD|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_sbprevious,	"sbprevious",	ex_bprevious,
-			RANGE|NOTADR|COUNT|EDITCMD|TRLBAR,
-			ADDR_LINES),
+			RANGE|COUNT|EDITCMD|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_sbrewind,	"sbrewind",	ex_brewind,
 			EDITCMD|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_scriptnames,	"scriptnames",	ex_scriptnames,
-			BANG|RANGE|NOTADR|COUNT|TRLBAR|CMDWIN,
+			BANG|RANGE|COUNT|TRLBAR|CMDWIN,
 			ADDR_OTHER),
 EX(CMD_scriptencoding,	"scriptencoding", ex_scriptencoding,
 			WORD1|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_scriptversion,	"scriptversion", ex_scriptversion,
 			WORD1|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_scscope,		"scscope",	ex_scscope,
 			EXTRA|NOTRLCOM,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_set,		"set",		ex_set,
 			TRLBAR|EXTRA|CMDWIN|SBOXOK,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_setfiletype,	"setfiletype",	ex_setfiletype,
 			TRLBAR|EXTRA|NEEDARG|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_setglobal,	"setglobal",	ex_set,
 			TRLBAR|EXTRA|CMDWIN|SBOXOK,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_setlocal,	"setlocal",	ex_set,
 			TRLBAR|EXTRA|CMDWIN|SBOXOK,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_sfind,		"sfind",	ex_splitview,
-			BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			BANG|FILE1|RANGE|EDITCMD|ARGOPT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_sfirst,		"sfirst",	ex_rewind,
 			EXTRA|BANG|EDITCMD|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_shell,		"shell",	ex_shell,
 			TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_simalt,		"simalt",	ex_simalt,
 			NEEDARG|WORD1|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_sign,		"sign",		ex_sign,
-			NEEDARG|RANGE|NOTADR|EXTRA|CMDWIN,
-			ADDR_LINES),
+			NEEDARG|RANGE|EXTRA|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_silent,		"silent",	ex_wrongmodifier,
 			NEEDARG|EXTRA|BANG|NOTRLCOM|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_sleep,		"sleep",	ex_sleep,
-			RANGE|NOTADR|COUNT|EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			RANGE|COUNT|EXTRA|TRLBAR|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_slast,		"slast",	ex_last,
 			EXTRA|BANG|EDITCMD|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 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),
+			ADDR_NONE),
 EX(CMD_smapclear,	"smapclear",	ex_mapclear,
 			EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_smenu,		"smenu",	ex_menu,
-			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			RANGE|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_snext,		"snext",	ex_next,
-			RANGE|NOTADR|BANG|FILES|EDITCMD|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			RANGE|BANG|FILES|EDITCMD|ARGOPT|TRLBAR,
+			ADDR_OTHER),
 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),
+			ADDR_NONE),
 EX(CMD_snoremenu,	"snoremenu",	ex_menu,
-			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			RANGE|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_source,		"source",	ex_source,
 			BANG|FILE1|TRLBAR|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 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),
+			BANG|FILE1|RANGE|EDITCMD|ARGOPT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_spellgood,	"spellgood",	ex_spell,
-			BANG|RANGE|NOTADR|NEEDARG|EXTRA|TRLBAR,
-			ADDR_LINES),
+			BANG|RANGE|NEEDARG|EXTRA|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_spelldump,	"spelldump",	ex_spelldump,
 			BANG|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_spellinfo,	"spellinfo",	ex_spellinfo,
 			TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_spellrepall,	"spellrepall",	ex_spellrepall,
 			TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_spellundo,	"spellundo",	ex_spell,
-			BANG|RANGE|NOTADR|NEEDARG|EXTRA|TRLBAR,
-			ADDR_LINES),
+			BANG|RANGE|NEEDARG|EXTRA|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_spellwrong,	"spellwrong",	ex_spell,
-			BANG|RANGE|NOTADR|NEEDARG|EXTRA|TRLBAR,
-			ADDR_LINES),
+			BANG|RANGE|NEEDARG|EXTRA|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_sprevious,	"sprevious",	ex_previous,
-			EXTRA|RANGE|NOTADR|COUNT|BANG|EDITCMD|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			EXTRA|RANGE|COUNT|BANG|EDITCMD|ARGOPT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_srewind,		"srewind",	ex_rewind,
 			EXTRA|BANG|EDITCMD|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_stop,		"stop",		ex_stop,
 			TRLBAR|BANG|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_stag,		"stag",		ex_stag,
-			RANGE|NOTADR|BANG|WORD1|TRLBAR|ZEROR,
-			ADDR_LINES),
+			RANGE|BANG|WORD1|TRLBAR|ZEROR,
+			ADDR_OTHER),
 EX(CMD_startinsert,	"startinsert",	ex_startinsert,
 			BANG|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_startgreplace,	"startgreplace", ex_startinsert,
 			BANG|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_startreplace,	"startreplace",	ex_startinsert,
 			BANG|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_stopinsert,	"stopinsert",	ex_stopinsert,
 			BANG|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_stjump,		"stjump",	ex_stag,
 			BANG|TRLBAR|WORD1,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_stselect,	"stselect",	ex_stag,
 			BANG|TRLBAR|WORD1,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_sunhide,		"sunhide",	ex_buffer_all,
-			RANGE|NOTADR|COUNT|TRLBAR,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_sunmap,		"sunmap",	ex_unmap,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_sunmenu,		"sunmenu",	ex_menu,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_suspend,		"suspend",	ex_stop,
 			TRLBAR|BANG|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_sview,		"sview",	ex_splitview,
-			BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			BANG|FILE1|RANGE|EDITCMD|ARGOPT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_swapname,	"swapname",	ex_swapname,
 			TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_syntax,		"syntax",	ex_syntax,
 			EXTRA|NOTRLCOM|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_syntime,		"syntime",	ex_syntime,
 			NEEDARG|WORD1|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_syncbind,	"syncbind",	ex_syncbind,
 			TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_smile,		"smile",	ex_smile,
 			TRLBAR|CMDWIN|SBOXOK,
-			ADDR_LINES),
+			ADDR_NONE),
 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),
+			RANGE|BANG|TRLBAR|ZEROR,
+			ADDR_OTHER),
 EX(CMD_tag,		"tag",		ex_tag,
-			RANGE|NOTADR|BANG|WORD1|TRLBAR|ZEROR,
-			ADDR_LINES),
+			RANGE|BANG|WORD1|TRLBAR|ZEROR,
+			ADDR_OTHER),
 EX(CMD_tags,		"tags",		do_tags,
 			TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_tab,		"tab",		ex_wrongmodifier,
 			NEEDARG|EXTRA|NOTRLCOM,
-			ADDR_TABS),
+			ADDR_NONE),
 EX(CMD_tabclose,	"tabclose",	ex_tabclose,
-			BANG|RANGE|NOTADR|ZEROR|EXTRA|NOSPC|TRLBAR|CMDWIN,
+			BANG|RANGE|ZEROR|EXTRA|NOSPC|TRLBAR|CMDWIN,
 			ADDR_TABS),
 EX(CMD_tabdo,		"tabdo",	ex_listdo,
-			NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
+			NEEDARG|EXTRA|NOTRLCOM|RANGE|DFLALL,
 			ADDR_TABS),
 EX(CMD_tabedit,		"tabedit",	ex_splitview,
-			BANG|FILE1|RANGE|NOTADR|ZEROR|EDITCMD|ARGOPT|TRLBAR,
+			BANG|FILE1|RANGE|ZEROR|EDITCMD|ARGOPT|TRLBAR,
 			ADDR_TABS),
 EX(CMD_tabfind,		"tabfind",	ex_splitview,
-			BANG|FILE1|RANGE|NOTADR|ZEROR|EDITCMD|ARGOPT|NEEDARG|TRLBAR,
+			BANG|FILE1|RANGE|ZEROR|EDITCMD|ARGOPT|NEEDARG|TRLBAR,
 			ADDR_TABS),
 EX(CMD_tabfirst,	"tabfirst",	ex_tabnext,
 			TRLBAR,
-			ADDR_TABS),
+			ADDR_NONE),
 EX(CMD_tabmove,		"tabmove",	ex_tabmove,
-			RANGE|NOTADR|ZEROR|EXTRA|NOSPC|TRLBAR,
+			RANGE|ZEROR|EXTRA|NOSPC|TRLBAR,
 			ADDR_TABS),
 EX(CMD_tablast,		"tablast",	ex_tabnext,
 			TRLBAR,
-			ADDR_TABS),
+			ADDR_NONE),
 EX(CMD_tabnext,		"tabnext",	ex_tabnext,
-			RANGE|NOTADR|ZEROR|EXTRA|NOSPC|TRLBAR,
+			RANGE|ZEROR|EXTRA|NOSPC|TRLBAR,
 			ADDR_TABS),
 EX(CMD_tabnew,		"tabnew",	ex_splitview,
-			BANG|FILE1|RANGE|NOTADR|ZEROR|EDITCMD|ARGOPT|TRLBAR,
+			BANG|FILE1|RANGE|ZEROR|EDITCMD|ARGOPT|TRLBAR,
 			ADDR_TABS),
 EX(CMD_tabonly,		"tabonly",	ex_tabonly,
-			BANG|RANGE|NOTADR|ZEROR|EXTRA|NOSPC|TRLBAR|CMDWIN,
+			BANG|RANGE|ZEROR|EXTRA|NOSPC|TRLBAR|CMDWIN,
 			ADDR_TABS),
 EX(CMD_tabprevious,	"tabprevious",	ex_tabnext,
-			RANGE|NOTADR|ZEROR|EXTRA|NOSPC|TRLBAR,
+			RANGE|ZEROR|EXTRA|NOSPC|TRLBAR,
 			ADDR_TABS_RELATIVE),
 EX(CMD_tabNext,		"tabNext",	ex_tabnext,
-			RANGE|NOTADR|ZEROR|EXTRA|NOSPC|TRLBAR,
+			RANGE|ZEROR|EXTRA|NOSPC|TRLBAR,
 			ADDR_TABS_RELATIVE),
 EX(CMD_tabrewind,	"tabrewind",	ex_tabnext,
 			TRLBAR,
-			ADDR_TABS),
+			ADDR_NONE),
 EX(CMD_tabs,		"tabs",		ex_tabs,
 			TRLBAR|CMDWIN,
-			ADDR_TABS),
+			ADDR_NONE),
 EX(CMD_tcd,		"tcd",		ex_cd,
 			BANG|FILE1|TRLBAR|CMDWIN,
-			ADDR_OTHER),
+			ADDR_NONE),
 EX(CMD_tchdir,		"tchdir",	ex_cd,
 			BANG|FILE1|TRLBAR|CMDWIN,
-			ADDR_OTHER),
+			ADDR_NONE),
 EX(CMD_tcl,		"tcl",		ex_tcl,
 			RANGE|EXTRA|NEEDARG|CMDWIN|RESTRICT,
 			ADDR_LINES),
@@ -1496,97 +1502,97 @@ EX(CMD_tclfile,		"tclfile",	ex_tclfile,
 			ADDR_LINES),
 EX(CMD_tearoff,		"tearoff",	ex_tearoff,
 			NEEDARG|EXTRA|TRLBAR|NOTRLCOM|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_terminal,	"terminal",	ex_terminal,
 			RANGE|BANG|FILES|CMDWIN,
 			ADDR_LINES),
 EX(CMD_tfirst,		"tfirst",	ex_tag,
-			RANGE|NOTADR|BANG|TRLBAR|ZEROR,
-			ADDR_LINES),
+			RANGE|BANG|TRLBAR|ZEROR,
+			ADDR_OTHER),
 EX(CMD_throw,		"throw",	ex_throw,
 			EXTRA|NEEDARG|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_tjump,		"tjump",	ex_tag,
 			BANG|TRLBAR|WORD1,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_tlast,		"tlast",	ex_tag,
 			BANG|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_tlmenu,		"tlmenu",	ex_menu,
-			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			RANGE|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_tlnoremenu,	"tlnoremenu",	ex_menu,
-			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			RANGE|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_tlunmenu,	"tlunmenu",	ex_menu,
-			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			RANGE|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_tmenu,		"tmenu",	ex_menu,
-			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			RANGE|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_tmap,		"tmap",		ex_map,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_tmapclear,	"tmapclear",	ex_mapclear,
 			EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_tnext,		"tnext",	ex_tag,
-			RANGE|NOTADR|BANG|TRLBAR|ZEROR,
-			ADDR_LINES),
+			RANGE|BANG|TRLBAR|ZEROR,
+			ADDR_OTHER),
 EX(CMD_tnoremap,	"tnoremap",	ex_map,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_topleft,		"topleft",	ex_wrongmodifier,
 			NEEDARG|EXTRA|NOTRLCOM,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_tprevious,	"tprevious",	ex_tag,
-			RANGE|NOTADR|BANG|TRLBAR|ZEROR,
-			ADDR_LINES),
+			RANGE|BANG|TRLBAR|ZEROR,
+			ADDR_OTHER),
 EX(CMD_trewind,		"trewind",	ex_tag,
-			RANGE|NOTADR|BANG|TRLBAR|ZEROR,
-			ADDR_LINES),
+			RANGE|BANG|TRLBAR|ZEROR,
+			ADDR_OTHER),
 EX(CMD_try,		"try",		ex_try,
 			TRLBAR|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_tselect,		"tselect",	ex_tag,
 			BANG|TRLBAR|WORD1,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_tunmenu,		"tunmenu",	ex_menu,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_tunmap,		"tunmap",	ex_unmap,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_undo,		"undo",		ex_undo,
-			RANGE|NOTADR|COUNT|ZEROR|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			RANGE|COUNT|ZEROR|TRLBAR|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_undojoin,	"undojoin",	ex_undojoin,
 			TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_undolist,	"undolist",	ex_undolist,
 			TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_unabbreviate,	"unabbreviate",	ex_abbreviate,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_unhide,		"unhide",	ex_buffer_all,
-			RANGE|NOTADR|COUNT|TRLBAR,
-			ADDR_LINES),
+			RANGE|COUNT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_unlet,		"unlet",	ex_unlet,
 			BANG|EXTRA|NEEDARG|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_unlockvar,	"unlockvar",	ex_lockvar,
 			BANG|EXTRA|NEEDARG|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_unmap,		"unmap",	ex_unmap,
 			BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_unmenu,		"unmenu",	ex_menu,
 			BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_unsilent,	"unsilent",	ex_wrongmodifier,
 			NEEDARG|EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_update,		"update",	ex_update,
 			RANGE|WHOLEFOLD|BANG|FILE1|ARGOPT|DFLALL|TRLBAR,
 			ADDR_LINES),
@@ -1595,124 +1601,124 @@ EX(CMD_vglobal,		"vglobal",	ex_global,
 			ADDR_LINES),
 EX(CMD_version,		"version",	ex_version,
 			EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_verbose,		"verbose",	ex_wrongmodifier,
-			NEEDARG|RANGE|NOTADR|EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			NEEDARG|RANGE|EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_vertical,	"vertical",	ex_wrongmodifier,
 			NEEDARG|EXTRA|NOTRLCOM,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_visual,		"visual",	ex_edit,
 			BANG|FILE1|EDITCMD|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_view,		"view",		ex_edit,
 			BANG|FILE1|EDITCMD|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_vimgrep,		"vimgrep",	ex_vimgrep,
-			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
-			ADDR_LINES),
+			RANGE|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
+			ADDR_OTHER),
 EX(CMD_vimgrepadd,	"vimgrepadd",	ex_vimgrep,
-			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
-			ADDR_LINES),
+			RANGE|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE,
+			ADDR_OTHER),
 EX(CMD_viusage,		"viusage",	ex_viusage,
 			TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_vmap,		"vmap",		ex_map,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_vmapclear,	"vmapclear",	ex_mapclear,
 			EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_vmenu,		"vmenu",	ex_menu,
-			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			RANGE|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_vnoremap,	"vnoremap",	ex_map,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_vnew,		"vnew",		ex_splitview,
-			BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			BANG|FILE1|RANGE|EDITCMD|ARGOPT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_vnoremenu,	"vnoremenu",	ex_menu,
-			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			RANGE|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_vsplit,		"vsplit",	ex_splitview,
-			BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			BANG|FILE1|RANGE|EDITCMD|ARGOPT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_vunmap,		"vunmap",	ex_unmap,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_vunmenu,		"vunmenu",	ex_menu,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 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),
+			RANGE|WHOLEFOLD|BANG|FILE1|ARGOPT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_wall,		"wall",		do_wqall,
 			BANG|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_while,		"while",	ex_while,
 			EXTRA|NOTRLCOM|SBOXOK|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_winsize,		"winsize",	ex_winsize,
 			EXTRA|NEEDARG|TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_wincmd,		"wincmd",	ex_wincmd,
-			NEEDARG|WORD1|RANGE|NOTADR|CMDWIN,
-			ADDR_WINDOWS),
+			NEEDARG|WORD1|RANGE|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_windo,		"windo",	ex_listdo,
-			NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL,
+			NEEDARG|EXTRA|NOTRLCOM|RANGE|DFLALL,
 			ADDR_WINDOWS),
 EX(CMD_winpos,		"winpos",	ex_winpos,
 			EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_wnext,		"wnext",	ex_wnext,
-			RANGE|NOTADR|BANG|FILE1|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			RANGE|BANG|FILE1|ARGOPT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_wprevious,	"wprevious",	ex_wnext,
-			RANGE|NOTADR|BANG|FILE1|ARGOPT|TRLBAR,
-			ADDR_LINES),
+			RANGE|BANG|FILE1|ARGOPT|TRLBAR,
+			ADDR_OTHER),
 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),
+			BANG|FILE1|ARGOPT|TRLBAR,
+			ADDR_NONE),
 EX(CMD_wundo,		"wundo",	ex_wundo,
 			BANG|NEEDARG|FILE1,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_wviminfo,	"wviminfo",	ex_viminfo,
 			BANG|FILE1|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 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),
+			ADDR_NONE),
 EX(CMD_xmap,		"xmap",		ex_map,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_xmapclear,	"xmapclear",	ex_mapclear,
 			EXTRA|TRLBAR|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_xmenu,		"xmenu",	ex_menu,
-			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			RANGE|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_xnoremap,	"xnoremap",	ex_map,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_xnoremenu,	"xnoremenu",	ex_menu,
-			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			RANGE|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
+			ADDR_OTHER),
 EX(CMD_xunmap,		"xunmap",	ex_unmap,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_xunmenu,		"xunmenu",	ex_menu,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_yank,		"yank",		ex_operators,
 			RANGE|WHOLEFOLD|REGSTR|COUNT|TRLBAR|CMDWIN,
 			ADDR_LINES),
@@ -1746,14 +1752,14 @@ 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),
+			EXTRA|RANGE|COUNT|BANG|EDITCMD|ARGOPT|TRLBAR,
+			ADDR_OTHER),
 EX(CMD_Print,		"Print",	ex_print,
 			RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN,
 			ADDR_LINES),
 EX(CMD_X,		"X",		ex_X,
 			TRLBAR,
-			ADDR_LINES),
+			ADDR_NONE),
 EX(CMD_tilde,		"~",		do_sub,
 			RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY,
 			ADDR_LINES),
@@ -1784,7 +1790,7 @@ struct exarg
     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 */
+    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 */
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -73,7 +73,7 @@ static int	getargopt(exarg_T *eap);
 # define ex_cexpr		ex_ni
 #endif
 
-static linenr_T get_address(exarg_T *, char_u **, int addr_type, int skip, int silent, int to_other_file, int address_count);
+static linenr_T get_address(exarg_T *, char_u **, cmd_addr_T addr_type, int skip, int silent, int to_other_file, int address_count);
 static void	get_flags(exarg_T *eap);
 #if !defined(FEAT_PERL) \
 	|| !defined(FEAT_PYTHON) || !defined(FEAT_PYTHON3) \
@@ -1577,6 +1577,10 @@ compute_buffer_local_count(int addr_type
     return buf->b_fnum;
 }
 
+/*
+ * Return the window number of "win".
+ * When "win" is NULL return the number of windows.
+ */
     static int
 current_win_nr(win_T *win)
 {
@@ -1951,7 +1955,7 @@ do_one_cmd(
 	ea.forceit = FALSE;
 
 /*
- * 6. Parse arguments.
+ * 6. Parse arguments.  Then check for errors.
  */
     if (!IS_USER_CMDIDX(ea.cmdidx))
 	ea.argt = (long)cmdnames[(int)ea.cmdidx].cmd_argt;
@@ -2016,7 +2020,7 @@ do_one_cmd(
      * Don't complain about the range if it is not used
      * (could happen if line_count is accidentally set to 0).
      */
-    if (!ea.skip && !ni)
+    if (!ea.skip && !ni && (ea.argt & RANGE))
     {
 	/*
 	 * If the range is backwards, ask for confirmation and, if given, swap
@@ -2044,7 +2048,8 @@ do_one_cmd(
 	    goto doend;
     }
 
-    if ((ea.argt & NOTADR) && ea.addr_count == 0) /* default is 1, not cursor */
+    if ((ea.addr_type == ADDR_OTHER) && ea.addr_count == 0)
+	// default is 1, not cursor
 	ea.line2 = 1;
 
     correct_range(&ea);
@@ -2191,6 +2196,7 @@ do_one_cmd(
 	switch (ea.addr_type)
 	{
 	    case ADDR_LINES:
+	    case ADDR_OTHER:
 		ea.line2 = curbuf->b_ml.ml_line_count;
 		break;
 	    case ADDR_LOADED_BUFFERS:
@@ -2229,6 +2235,9 @@ do_one_cmd(
 		    ea.line2 = 1;
 		break;
 #endif
+	    case ADDR_NONE:
+		iemsg(_("INTERNAL: Cannot use DFLALL with ADDR_NONE"));
+		break;
 	}
     }
 
@@ -2278,7 +2287,7 @@ do_one_cmd(
 	    errormsg = _(e_zerocount);
 	    goto doend;
 	}
-	if (ea.argt & NOTADR)	/* e.g. :buffer 2, :sleep 3 */
+	if (ea.addr_type != ADDR_LINES)	// e.g. :buffer 2, :sleep 3
 	{
 	    ea.line2 = n;
 	    if (ea.addr_count == 0)
@@ -2292,8 +2301,7 @@ do_one_cmd(
 	    /*
 	     * Be vi compatible: no error message for out of range.
 	     */
-	    if (ea.addr_type == ADDR_LINES
-		    && ea.line2 > curbuf->b_ml.ml_line_count)
+	    if (ea.line2 > curbuf->b_ml.ml_line_count)
 		ea.line2 = curbuf->b_ml.ml_line_count;
 	}
     }
@@ -2876,6 +2884,7 @@ parse_cmd_address(exarg_T *eap, char **e
 	switch (eap->addr_type)
 	{
 	    case ADDR_LINES:
+	    case ADDR_OTHER:
 		// default is current line number
 		eap->line2 = curwin->w_cursor.lnum;
 		break;
@@ -2902,6 +2911,9 @@ parse_cmd_address(exarg_T *eap, char **e
 		eap->line2 = qf_get_cur_valid_idx(eap);
 		break;
 #endif
+	    case ADDR_NONE:
+		// Will give an error later if a range is found.
+		break;
 	}
 	eap->cmd = skipwhite(eap->cmd);
 	lnum = get_address(eap, &eap->cmd, eap->addr_type, eap->skip, silent,
@@ -2916,6 +2928,7 @@ parse_cmd_address(exarg_T *eap, char **e
 		switch (eap->addr_type)
 		{
 		    case ADDR_LINES:
+		    case ADDR_OTHER:
 			eap->line1 = 1;
 			eap->line2 = curbuf->b_ml.ml_line_count;
 			break;
@@ -2955,7 +2968,6 @@ parse_cmd_address(exarg_T *eap, char **e
 			}
 			break;
 		    case ADDR_TABS_RELATIVE:
-		    case ADDR_OTHER:
 			*errormsg = _(e_invrange);
 			return FAIL;
 		    case ADDR_ARGUMENTS:
@@ -2975,6 +2987,9 @@ parse_cmd_address(exarg_T *eap, char **e
 			    eap->line2 = 1;
 			break;
 #endif
+		    case ADDR_NONE:
+			// Will give an error later if a range is found.
+			break;
 		}
 		++eap->addr_count;
 	    }
@@ -4207,12 +4222,13 @@ skip_range(
 get_address(
     exarg_T	*eap UNUSED,
     char_u	**ptr,
-    int		addr_type,	// flag: one of ADDR_LINES, ...
+    cmd_addr_T	addr_type_arg,
     int		skip,		// only skip the address, don't use it
     int		silent,		// no errors or side effects
     int		to_other_file,  // flag: may jump to other file
     int		address_count UNUSED) // 1 for first address, >1 after comma
 {
+    cmd_addr_T	addr_type = addr_type_arg;
     int		c;
     int		i;
     long	n;
@@ -4233,6 +4249,7 @@ get_address(
 		switch (addr_type)
 		{
 		    case ADDR_LINES:
+		    case ADDR_OTHER:
 			lnum = curwin->w_cursor.lnum;
 			break;
 		    case ADDR_WINDOWS:
@@ -4249,6 +4266,7 @@ get_address(
 			lnum = CURRENT_TAB_NR;
 			break;
 		    case ADDR_TABS_RELATIVE:
+		    case ADDR_NONE:
 			emsg(_(e_invrange));
 			cmd = NULL;
 			goto error;
@@ -4266,6 +4284,7 @@ get_address(
 		switch (addr_type)
 		{
 		    case ADDR_LINES:
+		    case ADDR_OTHER:
 			lnum = curbuf->b_ml.ml_line_count;
 			break;
 		    case ADDR_WINDOWS:
@@ -4291,6 +4310,7 @@ get_address(
 			lnum = LAST_TAB_NR;
 			break;
 		    case ADDR_TABS_RELATIVE:
+		    case ADDR_NONE:
 			emsg(_(e_invrange));
 			cmd = NULL;
 			goto error;
@@ -4460,7 +4480,8 @@ get_address(
 		switch (addr_type)
 		{
 		    case ADDR_LINES:
-			/* "+1" is same as ".+1" */
+		    case ADDR_OTHER:
+			// "+1" is same as ".+1"
 			lnum = curwin->w_cursor.lnum;
 			break;
 		    case ADDR_WINDOWS:
@@ -4484,6 +4505,8 @@ get_address(
 			lnum = qf_get_cur_valid_idx(eap);
 			break;
 #endif
+		    case ADDR_NONE:
+			break;
 		}
 	    }
 
@@ -4586,11 +4609,10 @@ invalid_range(exarg_T *eap)
 
     if (eap->argt & RANGE)
     {
-	switch(eap->addr_type)
+	switch (eap->addr_type)
 	{
 	    case ADDR_LINES:
-		if (!(eap->argt & NOTADR)
-			&& eap->line2 > curbuf->b_ml.ml_line_count
+		if (eap->line2 > curbuf->b_ml.ml_line_count
 #ifdef FEAT_DIFF
 			    + (eap->cmdidx == CMD_diffget)
 #endif
@@ -4636,7 +4658,8 @@ invalid_range(exarg_T *eap)
 		    return _(e_invrange);
 		break;
 	    case ADDR_TABS_RELATIVE:
-		/* Do nothing */
+	    case ADDR_OTHER:
+		// Any range is OK.
 		break;
 #ifdef FEAT_QUICKFIX
 	    case ADDR_QUICKFIX:
@@ -4644,6 +4667,9 @@ invalid_range(exarg_T *eap)
 		    return _(e_invrange);
 		break;
 #endif
+	    case ADDR_NONE:
+		// Will give an error elsewhere.
+		break;
 	}
     }
     return NULL;
--- a/src/testdir/test_usercommands.vim
+++ b/src/testdir/test_usercommands.vim
@@ -392,9 +392,13 @@ func Test_addr_all()
   call assert_equal(len(gettabinfo()), g:a2)
   bwipe
 
-  command! -addr=other DoSomething echo 'nothing'
+  command! -addr=other DoSomething  let g:a1 = <line1> | let g:a2 = <line2>
   DoSomething
-  call assert_fails('%DoSomething')
+  call assert_equal(line('.'), g:a1)
+  call assert_equal(line('.'), g:a2)
+  %DoSomething
+  call assert_equal(1, g:a1)
+  call assert_equal(line('$'), g:a2)
 
   delcommand DoSomething
 endfunc
@@ -420,7 +424,7 @@ func Test_command_list()
         \           execute('command DoCmd'))
   command! -count=2 DoCmd :
   call assert_equal("\n    Name              Args Address Complete    Definition"
-        \        .. "\n    DoCmd             0    2c                  :",
+        \        .. "\n    DoCmd             0    2c ?                :",
         \           execute('command DoCmd'))
 
   " Test with various -addr= argument values.
--- a/src/usercmd.c
+++ b/src/usercmd.c
@@ -20,7 +20,7 @@ typedef struct ucmd
     char_u	*uc_rep;	// The command's replacement string
     long	uc_def;		// The default value for a range/count
     int		uc_compl;	// completion type
-    int		uc_addr_type;	// The command's address type
+    cmd_addr_T	uc_addr_type;	// The command's address type
 # ifdef FEAT_EVAL
     sctx_T	uc_script_ctx;	// SCTX where the command was defined
 #  ifdef FEAT_CMDL_COMPL
@@ -101,9 +101,9 @@ static struct
  */
 static struct
 {
-    int	    expand;
-    char    *name;
-    char    *shortname;
+    cmd_addr_T	expand;
+    char	*name;
+    char	*shortname;
 } addr_type_complete[] =
 {
     {ADDR_ARGUMENTS, "arguments", "arg"},
@@ -114,7 +114,7 @@ static struct
     {ADDR_WINDOWS, "windows", "win"},
     {ADDR_QUICKFIX, "quickfix", "qf"},
     {ADDR_OTHER, "other", "?"},
-    {-1, NULL, NULL}
+    {ADDR_NONE, NULL, NULL}
 };
 
 #define UC_BUFFER	1	// -buffer: local to current buffer
@@ -495,7 +495,7 @@ uc_list(char_u *name, size_t name_len)
 	    } while (len < 8 - over);
 
 	    // Address Type
-	    for (j = 0; addr_type_complete[j].expand != -1; ++j)
+	    for (j = 0; addr_type_complete[j].expand != ADDR_NONE; ++j)
 		if (addr_type_complete[j].expand != ADDR_LINES
 			&& addr_type_complete[j].expand == cmd->uc_addr_type)
 		{
@@ -566,12 +566,11 @@ uc_fun_cmd(void)
 parse_addr_type_arg(
     char_u	*value,
     int		vallen,
-    long	*argt,
-    int		*addr_type_arg)
+    cmd_addr_T	*addr_type_arg)
 {
     int	    i, a, b;
 
-    for (i = 0; addr_type_complete[i].expand != -1; ++i)
+    for (i = 0; addr_type_complete[i].expand != ADDR_NONE; ++i)
     {
 	a = (int)STRLEN(addr_type_complete[i].name) == vallen;
 	b = STRNCMP(value, addr_type_complete[i].name, vallen) == 0;
@@ -582,7 +581,7 @@ parse_addr_type_arg(
 	}
     }
 
-    if (addr_type_complete[i].expand == -1)
+    if (addr_type_complete[i].expand == ADDR_NONE)
     {
 	char_u	*err = value;
 
@@ -593,9 +592,6 @@ parse_addr_type_arg(
 	return FAIL;
     }
 
-    if (*addr_type_arg != ADDR_LINES)
-	*argt |= NOTADR;
-
     return OK;
 }
 
@@ -694,7 +690,7 @@ uc_scan_attr(
     int		*flags,
     int		*complp,
     char_u	**compl_arg,
-    int		*addr_type_arg)
+    cmd_addr_T	*addr_type_arg)
 {
     char_u	*p;
 
@@ -773,7 +769,7 @@ two_count:
 		}
 
 		*def = getdigits(&p);
-		*argt |= (ZEROR | NOTADR);
+		*argt |= ZEROR;
 
 		if (p != val + vallen || vallen == 0)
 		{
@@ -782,10 +778,16 @@ invalid_count:
 		    return FAIL;
 		}
 	    }
+	    // default for -range is using buffer lines
+	    if (*addr_type_arg == ADDR_NONE)
+		*addr_type_arg = ADDR_LINES;
 	}
 	else if (STRNICMP(attr, "count", attrlen) == 0)
 	{
-	    *argt |= (COUNT | ZEROR | RANGE | NOTADR);
+	    *argt |= (COUNT | ZEROR | RANGE);
+	    // default for -count is using any number
+	    if (*addr_type_arg == ADDR_NONE)
+		*addr_type_arg = ADDR_OTHER;
 
 	    if (val != NULL)
 	    {
@@ -822,11 +824,10 @@ invalid_count:
 		emsg(_("E179: argument required for -addr"));
 		return FAIL;
 	    }
-	    if (parse_addr_type_arg(val, (int)vallen, argt, addr_type_arg)
-								      == FAIL)
+	    if (parse_addr_type_arg(val, (int)vallen,  addr_type_arg) == FAIL)
 		return FAIL;
 	    if (addr_type_arg != ADDR_LINES)
-		*argt |= (ZEROR | NOTADR) ;
+		*argt |= (ZEROR) ;
 	}
 	else
 	{
@@ -854,7 +855,7 @@ uc_add_command(
     int		flags,
     int		compl,
     char_u	*compl_arg UNUSED,
-    int		addr_type,
+    cmd_addr_T	addr_type,
     int		force)
 {
     ucmd_T	*cmd = NULL;
@@ -974,17 +975,17 @@ fail:
     void
 ex_command(exarg_T *eap)
 {
-    char_u  *name;
-    char_u  *end;
-    char_u  *p;
-    long    argt = 0;
-    long    def = -1;
-    int	    flags = 0;
-    int	    compl = EXPAND_NOTHING;
-    char_u  *compl_arg = NULL;
-    int	    addr_type_arg = ADDR_LINES;
-    int	    has_attr = (eap->arg[0] == '-');
-    int	    name_len;
+    char_u	*name;
+    char_u	*end;
+    char_u	*p;
+    long	argt = 0;
+    long	def = -1;
+    int		flags = 0;
+    int		compl = EXPAND_NOTHING;
+    char_u	*compl_arg = NULL;
+    cmd_addr_T	addr_type_arg = ADDR_NONE;
+    int		has_attr = (eap->arg[0] == '-');
+    int		name_len;
 
     p = eap->arg;
 
--- a/src/version.c
+++ b/src/version.c
@@ -768,6 +768,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1241,
+/**/
     1240,
 /**/
     1239,
--- a/src/window.c
+++ b/src/window.c
@@ -601,7 +601,7 @@ wingotofile:
 }
 
 /*
- * Figure out the address type for ":wnncmd".
+ * Figure out the address type for ":wincmd".
  */
     void
 get_wincmd_addr_type(char_u *arg, exarg_T *eap)
@@ -656,13 +656,13 @@ get_wincmd_addr_type(char_u *arg, exarg_
     case 'd':
     case Ctrl_D:
 #endif
-		/* window size or any count */
-		eap->addr_type = ADDR_LINES;
+		// window size or any count
+		eap->addr_type = ADDR_OTHER;
 		break;
 
     case Ctrl_HAT:
     case '^':
-		/* buffer number */
+		// buffer number
 		eap->addr_type = ADDR_BUFFERS;
 		break;
 
@@ -677,7 +677,7 @@ get_wincmd_addr_type(char_u *arg, exarg_
     case 'W':
     case 'x':
     case Ctrl_X:
-		/* window number */
+		// window number
 		eap->addr_type = ADDR_WINDOWS;
 		break;
 
@@ -694,8 +694,8 @@ get_wincmd_addr_type(char_u *arg, exarg_
     case Ctrl_P:
     case '=':
     case CAR:
-		/* no count */
-		eap->addr_type = 0;
+		// no count
+		eap->addr_type = ADDR_NONE;
 		break;
     }
 }