]> granicus.if.org Git - vim/commitdiff
updated for version 7.4.530 v7.4.530
authorBram Moolenaar <Bram@vim.org>
Thu, 27 Nov 2014 15:22:48 +0000 (16:22 +0100)
committerBram Moolenaar <Bram@vim.org>
Thu, 27 Nov 2014 15:22:48 +0000 (16:22 +0100)
Problem:    Many commands take a count or range that is not using line
            numbers.
Solution:   For each command specify what kind of count it uses.  For windows,
            buffers and arguments have "$" and "." have a relevant meaning.
            (Marcin Szamotulski)

13 files changed:
runtime/doc/tabpage.txt
runtime/doc/windows.txt
src/Makefile
src/ex_cmds.h
src/ex_docmd.c
src/testdir/Make_amiga.mak
src/testdir/Make_dos.mak
src/testdir/Make_ming.mak
src/testdir/Make_os2.mak
src/testdir/Make_vms.mms
src/testdir/Makefile
src/version.c
src/window.c

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