]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.1.1241: Ex command info contains confusing information v8.1.1241
authorBram Moolenaar <Bram@vim.org>
Wed, 1 May 2019 16:08:42 +0000 (18:08 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 1 May 2019 16:08:42 +0000 (18:08 +0200)
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.

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

index 19b59c2908dc08d3a873bdc09684d75b12468428..65e79814492dc056fe83ceb963262c40d76475d0 100644 (file)
@@ -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.
index c306ccb872304c1cacb56a97115e2b5ebb26f25f..1d73c5faafc9a05b72c388eef54eb7d58ad76077 100644 (file)
 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 = {}
index 991dc458e25abc8b575646bcc79175551c332c87..ebfcf54537fa6875bb68d738b1a97d2201c7c472 100644 (file)
@@ -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
index 27029baf0b03a33d83a13ed1a962fa71210bfb68..63196afd320d449d6d7251d0065e18f22bde749e 100644 (file)
  */
 
 #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 */
index bf0d7f7bcfc310db419c7ccfd5ef742af3792762..67d06fc8e110b78e2458af68adef13c1e158e9b5 100644 (file)
@@ -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, int lnum, int offset)
     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 **errormsg, int silent)
        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 **errormsg, int silent)
                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 **errormsg, int silent)
                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 **errormsg, int silent)
                        }
                        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 **errormsg, int silent)
                            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;
index 2e2490eb21e28874e33036f6872410ff6a96d61b..a1d3995f63cfa001ea297c71deab37197a2752f2 100644 (file)
@@ -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.
index db1a77b7f2db3d0a57ad7185e9aa32aa075fc64d..37c519dfa981329f49d6bc0d5ebba2bd2ac5f911 100644 (file)
@@ -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;
 
index 5c6e50648a1e198873420db53b83f208e10fb56d..bb52dbc4a95f6f55d868f0219557d7bb6ae908e4 100644 (file)
@@ -767,6 +767,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1241,
 /**/
     1240,
 /**/
index 1914a3d875a69d458523ea53c7ee25ad1c9392d9..6c278d9e5664860fb2a6bba9bc0339b8d4c8d004 100644 (file)
@@ -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_T *eap)
     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_T *eap)
     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_T *eap)
     case Ctrl_P:
     case '=':
     case CAR:
-               /* no count */
-               eap->addr_type = 0;
+               // no count
+               eap->addr_type = ADDR_NONE;
                break;
     }
 }