aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Morales <hel.sheep@gmail.com>2015-01-10 20:27:17 -0300
committerFelipe Morales <hel.sheep@gmail.com>2015-04-28 23:08:30 -0300
commit86330fdd3f39a8975b25b7050a3d02b77a442057 (patch)
tree51f60759b67fec7740cc7a6adbb9c2bac4395b73
parent6a8862ded4d6f1693ac591ac8e47d1acbd044c49 (diff)
downloadrneovim-86330fdd3f39a8975b25b7050a3d02b77a442057.tar.gz
rneovim-86330fdd3f39a8975b25b7050a3d02b77a442057.tar.bz2
rneovim-86330fdd3f39a8975b25b7050a3d02b77a442057.zip
vim-patch:7.4.530-531
Specify different kinds of counts for commands. Updated ex commands generator scripts. Includes fixes to comments from patch 7.4.531 Original message: 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) https://code.google.com/p/vim/source/detail?r=v7-4-530 https://code.google.com/p/vim/source/detail?r=v7-4-531 Add legacy tests for 7.4.530 https://code.google.com/p/vim/source/detail?r=1e6d87a36dcdca231721dde8cbbc26610fb3df27
-rw-r--r--runtime/doc/tabpage.txt49
-rw-r--r--runtime/doc/windows.txt81
-rw-r--r--scripts/genex_cmds.lua5
-rw-r--r--src/nvim/ex_cmds.lua541
-rw-r--r--src/nvim/ex_cmds_defs.h10
-rw-r--r--src/nvim/ex_docmd.c371
-rw-r--r--src/nvim/testdir/Makefile4
-rw-r--r--src/nvim/testdir/test_argument_count.in47
-rw-r--r--src/nvim/testdir/test_argument_count.ok13
-rw-r--r--src/nvim/testdir/test_close_count.in156
-rw-r--r--src/nvim/testdir/test_close_count.ok23
-rw-r--r--src/nvim/window.c15
12 files changed, 1235 insertions, 80 deletions
diff --git a/runtime/doc/tabpage.txt b/runtime/doc/tabpage.txt
index dd3a031020..479c2cb455 100644
--- a/runtime/doc/tabpage.txt
+++ b/runtime/doc/tabpage.txt
@@ -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 tabpage [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
+ :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,16 @@ 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 one
+
+:{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,8 +200,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 beginning of the tab
+ " list
+ :$tabmove " move the tab page to the end of the tab list
+<
:tabm[ove] +[N]
:tabm[ove] -[N]
Move the current tab page N places to the right (with +) or to
diff --git a/runtime/doc/windows.txt b/runtime/doc/windows.txt
index 0098e3e521..4c1ec0c0fd 100644
--- a/runtime/doc/windows.txt
+++ b/runtime/doc/windows.txt
@@ -263,28 +263,54 @@ 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)
+ Without {count}: Quit the current window. If {count} is
+ given quit the {count} window
-: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.
+ 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 windows opened
+ :-quit " quit the previous 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 given close the
+ {count} window.
+
+ When 'hidden' 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
@@ -297,29 +323,38 @@ CTRL-W CTRL-C *CTRL-W_CTRL-C*
window, but that does not work, because the CTRL-C cancels the
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|
+ *:hide*
+:hid[e]
+:{count}hid[e]
+ Quit the current window, unless it is the last window on the
+ screen. For {count} see |:quit|.
+
+ 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
+:hid[e] {cmd} Execute {cmd} with 'hidden' set. The previous value of
'hidden' is restored after {cmd} has been executed.
Example: >
:hide edit Makefile
< 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|.
+
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
diff --git a/scripts/genex_cmds.lua b/scripts/genex_cmds.lua
index 75739bda74..b1d34fbffd 100644
--- a/scripts/genex_cmds.lua
+++ b/scripts/genex_cmds.lua
@@ -67,8 +67,9 @@ for i, cmd in ipairs(defs) do
[%s] = {
.cmd_name = (char_u *) "%s",
.cmd_func = &%s,
- .cmd_argt = %u
- }]], enumname, cmd.command, cmd.func, cmd.flags))
+ .cmd_argt = %uL,
+ .cmd_addr_type = %i
+ }]], enumname, cmd.command, cmd.func, cmd.flags, cmd.addr_type))
end
defsfile:write([[
diff --git a/src/nvim/ex_cmds.lua b/src/nvim/ex_cmds.lua
index 52dc0d6212..3ead26120e 100644
--- a/src/nvim/ex_cmds.lua
+++ b/src/nvim/ex_cmds.lua
@@ -28,2635 +28,3166 @@ local FILES = bit.bor(XFILE, EXTRA)
local WORD1 = bit.bor(EXTRA, NOSPC)
local FILE1 = bit.bor(FILES, NOSPC)
+local ADDR_LINES = 0
+local ADDR_WINDOWS = 1
+local ADDR_ARGUMENTS = 2
+local ADDR_LOADED_BUFFERS = 3
+local ADDR_UNLOADED_BUFFERS = 4
+local ADDR_TABS = 5
+
-- The following table is described in ex_cmds_defs.h file.
return {
{
command='append',
flags=bit.bor(BANG, RANGE, ZEROR, TRLBAR, CMDWIN, MODIFY),
+ addr_type=ADDR_LINES,
func='ex_append',
},
{
command='abbreviate',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_abbreviate',
},
{
command='abclear',
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_abclear',
},
{
command='aboveleft',
flags=bit.bor(NEEDARG, EXTRA, NOTRLCOM),
+ addr_type=ADDR_LINES,
func='ex_wrongmodifier',
},
{
command='all',
flags=bit.bor(BANG, RANGE, NOTADR, COUNT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_all',
},
{
command='amenu',
flags=bit.bor(RANGE, NOTADR, ZEROR, EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='anoremenu',
flags=bit.bor(RANGE, NOTADR, ZEROR, EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='args',
flags=bit.bor(BANG, FILES, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_args',
},
{
command='argadd',
flags=bit.bor(BANG, NEEDARG, RANGE, NOTADR, ZEROR, FILES, TRLBAR),
+ addr_type=ADDR_ARGUMENTS,
func='ex_argadd',
},
{
command='argdelete',
flags=bit.bor(BANG, RANGE, NOTADR, FILES, TRLBAR),
+ addr_type=ADDR_ARGUMENTS,
func='ex_argdelete',
},
{
command='argdo',
flags=bit.bor(BANG, NEEDARG, EXTRA, NOTRLCOM),
+ addr_type=ADDR_LINES,
func='ex_listdo',
},
{
command='argedit',
flags=bit.bor(BANG, NEEDARG, RANGE, NOTADR, FILE1, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_ARGUMENTS,
func='ex_argedit',
},
{
command='argglobal',
flags=bit.bor(BANG, FILES, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_args',
},
{
command='arglocal',
flags=bit.bor(BANG, FILES, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_args',
},
{
command='argument',
flags=bit.bor(BANG, RANGE, NOTADR, COUNT, EXTRA, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_ARGUMENTS,
func='ex_argument',
},
{
command='ascii',
flags=bit.bor(TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='do_ascii',
},
{
command='autocmd',
flags=bit.bor(BANG, EXTRA, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_autocmd',
},
{
command='augroup',
flags=bit.bor(BANG, WORD1, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_autocmd',
},
{
command='aunmenu',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='buffer',
flags=bit.bor(BANG, RANGE, NOTADR, BUFNAME, BUFUNL, COUNT, EXTRA, EDITCMD, TRLBAR),
+ addr_type=ADDR_UNLOADED_BUFFERS,
func='ex_buffer',
},
{
command='bNext',
flags=bit.bor(BANG, RANGE, NOTADR, COUNT, EDITCMD, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_bprevious',
},
{
command='ball',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_buffer_all',
},
{
command='badd',
flags=bit.bor(NEEDARG, FILE1, EDITCMD, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_edit',
},
{
command='bdelete',
flags=bit.bor(BANG, RANGE, NOTADR, BUFNAME, COUNT, EXTRA, TRLBAR),
+ addr_type=ADDR_LOADED_BUFFERS,
func='ex_bunload',
},
{
command='behave',
flags=bit.bor(NEEDARG, WORD1, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_behave',
},
{
command='belowright',
flags=bit.bor(NEEDARG, EXTRA, NOTRLCOM),
+ addr_type=ADDR_LINES,
func='ex_wrongmodifier',
},
{
command='bfirst',
flags=bit.bor(BANG, RANGE, NOTADR, EDITCMD, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_brewind',
},
{
command='blast',
flags=bit.bor(BANG, RANGE, NOTADR, EDITCMD, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_blast',
},
{
command='bmodified',
flags=bit.bor(BANG, RANGE, NOTADR, COUNT, EDITCMD, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_bmodified',
},
{
command='bnext',
flags=bit.bor(BANG, RANGE, NOTADR, COUNT, EDITCMD, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_bnext',
},
{
command='botright',
flags=bit.bor(NEEDARG, EXTRA, NOTRLCOM),
+ addr_type=ADDR_LINES,
func='ex_wrongmodifier',
},
{
command='bprevious',
flags=bit.bor(BANG, RANGE, NOTADR, COUNT, EDITCMD, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_bprevious',
},
{
command='brewind',
flags=bit.bor(BANG, RANGE, NOTADR, EDITCMD, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_brewind',
},
{
command='break',
flags=bit.bor(TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_break',
},
{
command='breakadd',
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_breakadd',
},
{
command='breakdel',
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_breakdel',
},
{
command='breaklist',
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_breaklist',
},
{
command='browse',
flags=bit.bor(NEEDARG, EXTRA, NOTRLCOM, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_wrongmodifier',
},
{
command='buffers',
flags=bit.bor(BANG, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='buflist_list',
},
{
command='bufdo',
flags=bit.bor(BANG, NEEDARG, EXTRA, NOTRLCOM),
+ addr_type=ADDR_LINES,
func='ex_listdo',
},
{
command='bunload',
flags=bit.bor(BANG, RANGE, NOTADR, BUFNAME, COUNT, EXTRA, TRLBAR),
+ addr_type=ADDR_LOADED_BUFFERS,
func='ex_bunload',
},
{
command='bwipeout',
flags=bit.bor(BANG, RANGE, NOTADR, BUFNAME, BUFUNL, COUNT, EXTRA, TRLBAR),
+ addr_type=ADDR_UNLOADED_BUFFERS,
func='ex_bunload',
},
{
command='change',
flags=bit.bor(BANG, WHOLEFOLD, RANGE, COUNT, TRLBAR, CMDWIN, MODIFY),
+ addr_type=ADDR_LINES,
func='ex_change',
},
{
command='cNext',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR, BANG),
+ addr_type=ADDR_LINES,
func='ex_cnext',
},
{
command='cNfile',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR, BANG),
+ addr_type=ADDR_LINES,
func='ex_cnext',
},
{
command='cabbrev',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_abbreviate',
},
{
command='cabclear',
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_abclear',
},
{
command='caddbuffer',
flags=bit.bor(RANGE, NOTADR, WORD1, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_cbuffer',
},
{
command='caddexpr',
flags=bit.bor(NEEDARG, WORD1, NOTRLCOM, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_cexpr',
},
{
command='caddfile',
flags=bit.bor(TRLBAR, FILE1),
+ addr_type=ADDR_LINES,
func='ex_cfile',
},
{
command='call',
flags=bit.bor(RANGE, NEEDARG, EXTRA, NOTRLCOM, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_call',
},
{
command='catch',
flags=bit.bor(EXTRA, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_catch',
},
{
command='cbuffer',
flags=bit.bor(BANG, RANGE, NOTADR, WORD1, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_cbuffer',
},
{
command='cc',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR, BANG),
+ addr_type=ADDR_LINES,
func='ex_cc',
},
{
command='cclose',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_cclose',
},
{
command='cd',
flags=bit.bor(BANG, FILE1, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_cd',
},
{
command='center',
flags=bit.bor(TRLBAR, RANGE, WHOLEFOLD, EXTRA, CMDWIN, MODIFY),
+ addr_type=ADDR_LINES,
func='ex_align',
},
{
command='cexpr',
flags=bit.bor(NEEDARG, WORD1, NOTRLCOM, TRLBAR, BANG),
+ addr_type=ADDR_LINES,
func='ex_cexpr',
},
{
command='cfile',
flags=bit.bor(TRLBAR, FILE1, BANG),
+ addr_type=ADDR_LINES,
func='ex_cfile',
},
{
command='cfirst',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR, BANG),
+ addr_type=ADDR_LINES,
func='ex_cc',
},
{
command='cgetfile',
flags=bit.bor(TRLBAR, FILE1),
+ addr_type=ADDR_LINES,
func='ex_cfile',
},
{
command='cgetbuffer',
flags=bit.bor(RANGE, NOTADR, WORD1, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_cbuffer',
},
{
command='cgetexpr',
flags=bit.bor(NEEDARG, WORD1, NOTRLCOM, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_cexpr',
},
{
command='chdir',
flags=bit.bor(BANG, FILE1, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_cd',
},
{
command='changes',
flags=bit.bor(TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_changes',
},
{
command='checkpath',
flags=bit.bor(TRLBAR, BANG, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_checkpath',
},
{
command='checktime',
flags=bit.bor(RANGE, NOTADR, BUFNAME, COUNT, EXTRA, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_checktime',
},
{
command='clist',
flags=bit.bor(BANG, EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='qf_list',
},
{
command='clast',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR, BANG),
+ addr_type=ADDR_LINES,
func='ex_cc',
},
{
command='close',
- flags=bit.bor(BANG, TRLBAR, CMDWIN),
+ flags=bit.bor(BANG, RANGE, NOTADR, COUNT, TRLBAR, CMDWIN),
+ addr_type=ADDR_WINDOWS,
func='ex_close',
},
{
command='cmap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_map',
},
{
command='cmapclear',
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_mapclear',
},
{
command='cmenu',
flags=bit.bor(RANGE, NOTADR, ZEROR, EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='cnext',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR, BANG),
+ addr_type=ADDR_LINES,
func='ex_cnext',
},
{
command='cnewer',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR),
+ addr_type=ADDR_LINES,
func='qf_age',
},
{
command='cnfile',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR, BANG),
+ addr_type=ADDR_LINES,
func='ex_cnext',
},
{
command='cnoremap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_map',
},
{
command='cnoreabbrev',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_abbreviate',
},
{
command='cnoremenu',
flags=bit.bor(RANGE, NOTADR, ZEROR, EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='copy',
flags=bit.bor(RANGE, WHOLEFOLD, EXTRA, TRLBAR, CMDWIN, MODIFY),
+ addr_type=ADDR_LINES,
func='ex_copymove',
},
{
command='colder',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR),
+ addr_type=ADDR_LINES,
func='qf_age',
},
{
command='colorscheme',
flags=bit.bor(WORD1, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_colorscheme',
},
{
command='command',
flags=bit.bor(EXTRA, BANG, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_command',
},
{
command='comclear',
flags=bit.bor(TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_comclear',
},
{
command='compiler',
flags=bit.bor(BANG, TRLBAR, WORD1, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_compiler',
},
{
command='continue',
flags=bit.bor(TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_continue',
},
{
command='confirm',
flags=bit.bor(NEEDARG, EXTRA, NOTRLCOM, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_wrongmodifier',
},
{
command='copen',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_copen',
},
{
command='cprevious',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR, BANG),
+ addr_type=ADDR_LINES,
func='ex_cnext',
},
{
command='cpfile',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR, BANG),
+ addr_type=ADDR_LINES,
func='ex_cnext',
},
{
command='cquit',
flags=bit.bor(TRLBAR, BANG),
+ addr_type=ADDR_LINES,
func='ex_cquit',
},
{
command='crewind',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR, BANG),
+ addr_type=ADDR_LINES,
func='ex_cc',
},
{
command='cscope',
flags=bit.bor(EXTRA, NOTRLCOM, XFILE),
+ addr_type=ADDR_LINES,
func='do_cscope',
},
{
command='cstag',
flags=bit.bor(BANG, TRLBAR, WORD1),
+ addr_type=ADDR_LINES,
func='do_cstag',
},
{
command='cunmap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_unmap',
},
{
command='cunabbrev',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_abbreviate',
},
{
command='cunmenu',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='cwindow',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_cwindow',
},
{
command='delete',
flags=bit.bor(RANGE, WHOLEFOLD, REGSTR, COUNT, TRLBAR, CMDWIN, MODIFY),
+ addr_type=ADDR_LINES,
func='ex_operators',
},
{
command='delmarks',
flags=bit.bor(BANG, EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_delmarks',
},
{
command='debug',
flags=bit.bor(NEEDARG, EXTRA, NOTRLCOM, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_debug',
},
{
command='debuggreedy',
flags=bit.bor(RANGE, NOTADR, ZEROR, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_debuggreedy',
},
{
command='delcommand',
flags=bit.bor(NEEDARG, WORD1, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_delcommand',
},
{
command='delfunction',
flags=bit.bor(NEEDARG, WORD1, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_delfunction',
},
{
command='display',
flags=bit.bor(EXTRA, NOTRLCOM, TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_display',
},
{
command='diffupdate',
flags=bit.bor(BANG, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_diffupdate',
},
{
command='diffget',
flags=bit.bor(RANGE, EXTRA, TRLBAR, MODIFY),
+ addr_type=ADDR_LINES,
func='ex_diffgetput',
},
{
command='diffoff',
flags=bit.bor(BANG, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_diffoff',
},
{
command='diffpatch',
flags=bit.bor(EXTRA, FILE1, TRLBAR, MODIFY),
+ addr_type=ADDR_LINES,
func='ex_diffpatch',
},
{
command='diffput',
flags=bit.bor(RANGE, EXTRA, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_diffgetput',
},
{
command='diffsplit',
flags=bit.bor(EXTRA, FILE1, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_diffsplit',
},
{
command='diffthis',
flags=bit.bor(TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_diffthis',
},
{
command='digraphs',
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_digraphs',
},
{
command='djump',
flags=bit.bor(BANG, RANGE, DFLALL, WHOLEFOLD, EXTRA),
+ addr_type=ADDR_LINES,
func='ex_findpat',
},
{
command='dlist',
flags=bit.bor(BANG, RANGE, DFLALL, WHOLEFOLD, EXTRA, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_findpat',
},
{
command='doautocmd',
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_doautocmd',
},
{
command='doautoall',
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_doautoall',
},
{
command='drop',
flags=bit.bor(FILES, EDITCMD, NEEDARG, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_drop',
},
{
command='dsearch',
flags=bit.bor(BANG, RANGE, DFLALL, WHOLEFOLD, EXTRA, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_findpat',
},
{
command='dsplit',
flags=bit.bor(BANG, RANGE, DFLALL, WHOLEFOLD, EXTRA),
+ addr_type=ADDR_LINES,
func='ex_findpat',
},
{
command='edit',
flags=bit.bor(BANG, FILE1, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_edit',
},
{
command='earlier',
flags=bit.bor(TRLBAR, EXTRA, NOSPC, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_later',
},
{
command='echo',
flags=bit.bor(EXTRA, NOTRLCOM, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_echo',
},
{
command='echoerr',
flags=bit.bor(EXTRA, NOTRLCOM, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_execute',
},
{
command='echohl',
flags=bit.bor(EXTRA, TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_echohl',
},
{
command='echomsg',
flags=bit.bor(EXTRA, NOTRLCOM, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_execute',
},
{
command='echon',
flags=bit.bor(EXTRA, NOTRLCOM, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_echo',
},
{
command='else',
flags=bit.bor(TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_else',
},
{
command='elseif',
flags=bit.bor(EXTRA, NOTRLCOM, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_else',
},
{
command='emenu',
flags=bit.bor(NEEDARG, EXTRA, TRLBAR, NOTRLCOM, RANGE, NOTADR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_emenu',
},
{
command='endif',
flags=bit.bor(TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_endif',
},
{
command='endfunction',
flags=bit.bor(TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_endfunction',
},
{
command='endfor',
flags=bit.bor(TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_endwhile',
},
{
command='endtry',
flags=bit.bor(TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_endtry',
},
{
command='endwhile',
flags=bit.bor(TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_endwhile',
},
{
command='enew',
flags=bit.bor(BANG, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_edit',
},
{
command='ex',
flags=bit.bor(BANG, FILE1, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_edit',
},
{
command='execute',
flags=bit.bor(EXTRA, NOTRLCOM, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_execute',
},
{
command='exit',
flags=bit.bor(RANGE, WHOLEFOLD, BANG, FILE1, ARGOPT, DFLALL, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_exit',
},
{
command='exusage',
flags=bit.bor(TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_exusage',
},
{
command='file',
flags=bit.bor(RANGE, NOTADR, ZEROR, BANG, FILE1, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_file',
},
{
command='files',
flags=bit.bor(BANG, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='buflist_list',
},
{
command='filetype',
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_filetype',
},
{
command='find',
flags=bit.bor(RANGE, NOTADR, BANG, FILE1, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_find',
},
{
command='finally',
flags=bit.bor(TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_finally',
},
{
command='finish',
flags=bit.bor(TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_finish',
},
{
command='first',
flags=bit.bor(EXTRA, BANG, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_rewind',
},
{
command='fold',
flags=bit.bor(RANGE, WHOLEFOLD, TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_fold',
},
{
command='foldclose',
flags=bit.bor(RANGE, BANG, WHOLEFOLD, TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_foldopen',
},
{
command='folddoopen',
flags=bit.bor(RANGE, DFLALL, NEEDARG, EXTRA, NOTRLCOM),
+ addr_type=ADDR_LINES,
func='ex_folddo',
},
{
command='folddoclosed',
flags=bit.bor(RANGE, DFLALL, NEEDARG, EXTRA, NOTRLCOM),
+ addr_type=ADDR_LINES,
func='ex_folddo',
},
{
command='foldopen',
flags=bit.bor(RANGE, BANG, WHOLEFOLD, TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_foldopen',
},
{
command='for',
flags=bit.bor(EXTRA, NOTRLCOM, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_while',
},
{
command='function',
flags=bit.bor(EXTRA, BANG, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_function',
},
{
command='global',
flags=bit.bor(RANGE, WHOLEFOLD, BANG, EXTRA, DFLALL, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_global',
},
{
command='goto',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_goto',
},
{
command='grep',
flags=bit.bor(RANGE, NOTADR, BANG, NEEDARG, EXTRA, NOTRLCOM, TRLBAR, XFILE),
+ addr_type=ADDR_LINES,
func='ex_make',
},
{
command='grepadd',
flags=bit.bor(RANGE, NOTADR, BANG, NEEDARG, EXTRA, NOTRLCOM, TRLBAR, XFILE),
+ addr_type=ADDR_LINES,
func='ex_make',
},
{
command='gui',
flags=bit.bor(BANG, FILES, EDITCMD, ARGOPT, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_gui',
},
{
command='gvim',
flags=bit.bor(BANG, FILES, EDITCMD, ARGOPT, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_gui',
},
{
command='help',
flags=bit.bor(BANG, EXTRA, NOTRLCOM),
+ addr_type=ADDR_LINES,
func='ex_help',
},
{
command='helpclose',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_helpclose',
},
{
command='helpfind',
flags=bit.bor(EXTRA, NOTRLCOM),
+ addr_type=ADDR_LINES,
func='ex_helpfind',
},
{
command='helpgrep',
flags=bit.bor(EXTRA, NOTRLCOM, NEEDARG),
+ addr_type=ADDR_LINES,
func='ex_helpgrep',
},
{
command='helptags',
flags=bit.bor(NEEDARG, FILES, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_helptags',
},
{
command='hardcopy',
flags=bit.bor(RANGE, COUNT, EXTRA, TRLBAR, DFLALL, BANG),
+ addr_type=ADDR_LINES,
func='ex_hardcopy',
},
{
command='highlight',
flags=bit.bor(BANG, EXTRA, TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_highlight',
},
{
command='hide',
- flags=bit.bor(BANG, EXTRA, NOTRLCOM),
+ flags=bit.bor(BANG, RANGE, NOTADR, COUNT, EXTRA, NOTRLCOM),
+ addr_type=ADDR_WINDOWS,
func='ex_hide',
},
{
command='history',
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_history',
},
{
command='insert',
flags=bit.bor(BANG, RANGE, TRLBAR, CMDWIN, MODIFY),
+ addr_type=ADDR_LINES,
func='ex_append',
},
{
command='iabbrev',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_abbreviate',
},
{
command='iabclear',
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_abclear',
},
{
command='if',
flags=bit.bor(EXTRA, NOTRLCOM, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_if',
},
{
command='ijump',
flags=bit.bor(BANG, RANGE, DFLALL, WHOLEFOLD, EXTRA),
+ addr_type=ADDR_LINES,
func='ex_findpat',
},
{
command='ilist',
flags=bit.bor(BANG, RANGE, DFLALL, WHOLEFOLD, EXTRA, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_findpat',
},
{
command='imap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_map',
},
{
command='imapclear',
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_mapclear',
},
{
command='imenu',
flags=bit.bor(RANGE, NOTADR, ZEROR, EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='inoremap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_map',
},
{
command='inoreabbrev',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_abbreviate',
},
{
command='inoremenu',
flags=bit.bor(RANGE, NOTADR, ZEROR, EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='intro',
flags=bit.bor(TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_intro',
},
{
command='isearch',
flags=bit.bor(BANG, RANGE, DFLALL, WHOLEFOLD, EXTRA, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_findpat',
},
{
command='isplit',
flags=bit.bor(BANG, RANGE, DFLALL, WHOLEFOLD, EXTRA),
+ addr_type=ADDR_LINES,
func='ex_findpat',
},
{
command='iunmap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_unmap',
},
{
command='iunabbrev',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_abbreviate',
},
{
command='iunmenu',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='join',
flags=bit.bor(BANG, RANGE, WHOLEFOLD, COUNT, EXFLAGS, TRLBAR, CMDWIN, MODIFY),
+ addr_type=ADDR_LINES,
func='ex_join',
},
{
command='jumps',
flags=bit.bor(TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_jumps',
},
{
command='k',
flags=bit.bor(RANGE, WORD1, TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_mark',
},
{
command='keepmarks',
flags=bit.bor(NEEDARG, EXTRA, NOTRLCOM),
+ addr_type=ADDR_LINES,
func='ex_wrongmodifier',
},
{
command='keepjumps',
flags=bit.bor(NEEDARG, EXTRA, NOTRLCOM),
+ addr_type=ADDR_LINES,
func='ex_wrongmodifier',
},
{
command='keeppatterns',
flags=bit.bor(NEEDARG, EXTRA, NOTRLCOM),
+ addr_type=ADDR_LINES,
func='ex_wrongmodifier',
},
{
command='keepalt',
flags=bit.bor(NEEDARG, EXTRA, NOTRLCOM),
+ addr_type=ADDR_LINES,
func='ex_wrongmodifier',
},
{
command='list',
flags=bit.bor(RANGE, WHOLEFOLD, COUNT, EXFLAGS, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_print',
},
{
command='lNext',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR, BANG),
+ addr_type=ADDR_LINES,
func='ex_cnext',
},
{
command='lNfile',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR, BANG),
+ addr_type=ADDR_LINES,
func='ex_cnext',
},
{
command='last',
flags=bit.bor(EXTRA, BANG, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_last',
},
{
command='language',
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_language',
},
{
command='laddexpr',
flags=bit.bor(NEEDARG, WORD1, NOTRLCOM, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_cexpr',
},
{
command='laddbuffer',
flags=bit.bor(RANGE, NOTADR, WORD1, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_cbuffer',
},
{
command='laddfile',
flags=bit.bor(TRLBAR, FILE1),
+ addr_type=ADDR_LINES,
func='ex_cfile',
},
{
command='later',
flags=bit.bor(TRLBAR, EXTRA, NOSPC, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_later',
},
{
command='lbuffer',
flags=bit.bor(BANG, RANGE, NOTADR, WORD1, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_cbuffer',
},
{
command='lcd',
flags=bit.bor(BANG, FILE1, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_cd',
},
{
command='lchdir',
flags=bit.bor(BANG, FILE1, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_cd',
},
{
command='lclose',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_cclose',
},
{
command='lcscope',
flags=bit.bor(EXTRA, NOTRLCOM, XFILE),
+ addr_type=ADDR_LINES,
func='do_cscope',
},
{
command='left',
flags=bit.bor(TRLBAR, RANGE, WHOLEFOLD, EXTRA, CMDWIN, MODIFY),
+ addr_type=ADDR_LINES,
func='ex_align',
},
{
command='leftabove',
flags=bit.bor(NEEDARG, EXTRA, NOTRLCOM),
+ addr_type=ADDR_LINES,
func='ex_wrongmodifier',
},
{
command='let',
flags=bit.bor(EXTRA, NOTRLCOM, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_let',
},
{
command='lexpr',
flags=bit.bor(NEEDARG, WORD1, NOTRLCOM, TRLBAR, BANG),
+ addr_type=ADDR_LINES,
func='ex_cexpr',
},
{
command='lfile',
flags=bit.bor(TRLBAR, FILE1, BANG),
+ addr_type=ADDR_LINES,
func='ex_cfile',
},
{
command='lfirst',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR, BANG),
+ addr_type=ADDR_LINES,
func='ex_cc',
},
{
command='lgetfile',
flags=bit.bor(TRLBAR, FILE1),
+ addr_type=ADDR_LINES,
func='ex_cfile',
},
{
command='lgetbuffer',
flags=bit.bor(RANGE, NOTADR, WORD1, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_cbuffer',
},
{
command='lgetexpr',
flags=bit.bor(NEEDARG, WORD1, NOTRLCOM, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_cexpr',
},
{
command='lgrep',
flags=bit.bor(RANGE, NOTADR, BANG, NEEDARG, EXTRA, NOTRLCOM, TRLBAR, XFILE),
+ addr_type=ADDR_LINES,
func='ex_make',
},
{
command='lgrepadd',
flags=bit.bor(RANGE, NOTADR, BANG, NEEDARG, EXTRA, NOTRLCOM, TRLBAR, XFILE),
+ addr_type=ADDR_LINES,
func='ex_make',
},
{
command='lhelpgrep',
flags=bit.bor(EXTRA, NOTRLCOM, NEEDARG),
+ addr_type=ADDR_LINES,
func='ex_helpgrep',
},
{
command='ll',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR, BANG),
+ addr_type=ADDR_LINES,
func='ex_cc',
},
{
command='llast',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR, BANG),
+ addr_type=ADDR_LINES,
func='ex_cc',
},
{
command='llist',
flags=bit.bor(BANG, EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='qf_list',
},
{
command='lmap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_map',
},
{
command='lmapclear',
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_mapclear',
},
{
command='lmake',
flags=bit.bor(BANG, EXTRA, NOTRLCOM, TRLBAR, XFILE),
+ addr_type=ADDR_LINES,
func='ex_make',
},
{
command='lnoremap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_map',
},
{
command='lnext',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR, BANG),
+ addr_type=ADDR_LINES,
func='ex_cnext',
},
{
command='lnewer',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR),
+ addr_type=ADDR_LINES,
func='qf_age',
},
{
command='lnfile',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR, BANG),
+ addr_type=ADDR_LINES,
func='ex_cnext',
},
{
command='loadview',
flags=bit.bor(FILE1, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_loadview',
},
{
command='loadkeymap',
flags=bit.bor(CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_loadkeymap',
},
{
command='lockmarks',
flags=bit.bor(NEEDARG, EXTRA, NOTRLCOM),
+ addr_type=ADDR_LINES,
func='ex_wrongmodifier',
},
{
command='lockvar',
flags=bit.bor(BANG, EXTRA, NEEDARG, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_lockvar',
},
{
command='lolder',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR),
+ addr_type=ADDR_LINES,
func='qf_age',
},
{
command='lopen',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_copen',
},
{
command='lprevious',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR, BANG),
+ addr_type=ADDR_LINES,
func='ex_cnext',
},
{
command='lpfile',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR, BANG),
+ addr_type=ADDR_LINES,
func='ex_cnext',
},
{
command='lrewind',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR, BANG),
+ addr_type=ADDR_LINES,
func='ex_cc',
},
{
command='ltag',
flags=bit.bor(NOTADR, TRLBAR, BANG, WORD1),
+ addr_type=ADDR_LINES,
func='ex_tag',
},
{
command='lunmap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_unmap',
},
{
command='lua',
flags=bit.bor(RANGE, EXTRA, NEEDARG, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_script_ni',
},
{
command='luado',
flags=bit.bor(RANGE, DFLALL, EXTRA, NEEDARG, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_ni',
},
{
command='luafile',
flags=bit.bor(RANGE, FILE1, NEEDARG, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_ni',
},
{
command='lvimgrep',
flags=bit.bor(RANGE, NOTADR, BANG, NEEDARG, EXTRA, NOTRLCOM, TRLBAR, XFILE),
+ addr_type=ADDR_LINES,
func='ex_vimgrep',
},
{
command='lvimgrepadd',
flags=bit.bor(RANGE, NOTADR, BANG, NEEDARG, EXTRA, NOTRLCOM, TRLBAR, XFILE),
+ addr_type=ADDR_LINES,
func='ex_vimgrep',
},
{
command='lwindow',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_cwindow',
},
{
command='ls',
flags=bit.bor(BANG, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='buflist_list',
},
{
command='move',
flags=bit.bor(RANGE, WHOLEFOLD, EXTRA, TRLBAR, CMDWIN, MODIFY),
+ addr_type=ADDR_LINES,
func='ex_copymove',
},
{
command='mark',
flags=bit.bor(RANGE, WORD1, TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_mark',
},
{
command='make',
flags=bit.bor(BANG, EXTRA, NOTRLCOM, TRLBAR, XFILE),
+ addr_type=ADDR_LINES,
func='ex_make',
},
{
command='map',
flags=bit.bor(BANG, EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_map',
},
{
command='mapclear',
flags=bit.bor(EXTRA, BANG, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_mapclear',
},
{
command='marks',
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='do_marks',
},
{
command='match',
flags=bit.bor(RANGE, NOTADR, EXTRA, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_match',
},
{
command='menu',
flags=bit.bor(RANGE, NOTADR, ZEROR, BANG, EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='menutranslate',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menutranslate',
},
{
command='messages',
flags=bit.bor(TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_messages',
},
{
command='mkexrc',
flags=bit.bor(BANG, FILE1, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_mkrc',
},
{
command='mksession',
flags=bit.bor(BANG, FILE1, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_mkrc',
},
{
command='mkspell',
flags=bit.bor(BANG, NEEDARG, EXTRA, NOTRLCOM, TRLBAR, XFILE),
+ addr_type=ADDR_LINES,
func='ex_mkspell',
},
{
command='mkvimrc',
flags=bit.bor(BANG, FILE1, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_mkrc',
},
{
command='mkview',
flags=bit.bor(BANG, FILE1, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_mkrc',
},
{
command='mode',
flags=bit.bor(WORD1, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_mode',
},
{
command='mzscheme',
flags=bit.bor(RANGE, EXTRA, DFLALL, NEEDARG, CMDWIN, SBOXOK),
+ addr_type=ADDR_LINES,
func='ex_script_ni',
},
{
command='mzfile',
flags=bit.bor(RANGE, FILE1, NEEDARG, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_ni',
},
{
command='next',
flags=bit.bor(RANGE, NOTADR, BANG, FILES, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_next',
},
{
command='nbkey',
flags=bit.bor(EXTRA, NOTADR, NEEDARG),
+ addr_type=ADDR_LINES,
func='ex_nbkey',
},
{
command='nbclose',
flags=bit.bor(TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_nbclose',
},
{
command='nbstart',
flags=bit.bor(WORD1, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_nbstart',
},
{
command='new',
flags=bit.bor(BANG, FILE1, RANGE, NOTADR, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_splitview',
},
{
command='nmap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_map',
},
{
command='nmapclear',
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_mapclear',
},
{
command='nmenu',
flags=bit.bor(RANGE, NOTADR, ZEROR, EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='nnoremap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_map',
},
{
command='nnoremenu',
flags=bit.bor(RANGE, NOTADR, ZEROR, EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='noremap',
flags=bit.bor(BANG, EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_map',
},
{
command='noautocmd',
flags=bit.bor(NEEDARG, EXTRA, NOTRLCOM),
+ addr_type=ADDR_LINES,
func='ex_wrongmodifier',
},
{
command='nohlsearch',
flags=bit.bor(TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_nohlsearch',
},
{
command='noreabbrev',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_abbreviate',
},
{
command='noremenu',
flags=bit.bor(RANGE, NOTADR, ZEROR, BANG, EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='noswapfile',
flags=bit.bor(NEEDARG, EXTRA, NOTRLCOM),
+ addr_type=ADDR_LINES,
func='ex_wrongmodifier',
},
{
command='normal',
flags=bit.bor(RANGE, BANG, EXTRA, NEEDARG, NOTRLCOM, USECTRLV, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_normal',
},
{
command='number',
flags=bit.bor(RANGE, WHOLEFOLD, COUNT, EXFLAGS, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_print',
},
{
command='nunmap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_unmap',
},
{
command='nunmenu',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='open',
flags=bit.bor(RANGE, BANG, EXTRA),
+ addr_type=ADDR_LINES,
func='ex_open',
},
{
command='oldfiles',
flags=bit.bor(BANG, TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_oldfiles',
},
{
command='omap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_map',
},
{
command='omapclear',
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_mapclear',
},
{
command='omenu',
flags=bit.bor(RANGE, NOTADR, ZEROR, EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='only',
- flags=bit.bor(BANG, TRLBAR),
+ flags=bit.bor(BANG, NOTADR, RANGE, COUNT, TRLBAR),
+ addr_type=ADDR_WINDOWS,
func='ex_only',
},
{
command='onoremap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_map',
},
{
command='onoremenu',
flags=bit.bor(RANGE, NOTADR, ZEROR, EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='options',
flags=bit.bor(TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_options',
},
{
command='ounmap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_unmap',
},
{
command='ounmenu',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='ownsyntax',
flags=bit.bor(EXTRA, NOTRLCOM, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_ownsyntax',
},
{
command='print',
flags=bit.bor(RANGE, WHOLEFOLD, COUNT, EXFLAGS, TRLBAR, CMDWIN, SBOXOK),
+ addr_type=ADDR_LINES,
func='ex_print',
},
{
command='pclose',
flags=bit.bor(BANG, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_pclose',
},
{
command='perl',
flags=bit.bor(RANGE, EXTRA, DFLALL, NEEDARG, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_script_ni',
},
{
command='perldo',
flags=bit.bor(RANGE, EXTRA, DFLALL, NEEDARG, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_ni',
},
{
command='pedit',
flags=bit.bor(BANG, FILE1, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_pedit',
},
{
command='pop',
flags=bit.bor(RANGE, NOTADR, BANG, COUNT, TRLBAR, ZEROR),
+ addr_type=ADDR_LINES,
func='ex_tag',
},
{
command='popup',
flags=bit.bor(NEEDARG, EXTRA, BANG, TRLBAR, NOTRLCOM, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_popup',
},
{
command='ppop',
flags=bit.bor(RANGE, NOTADR, BANG, COUNT, TRLBAR, ZEROR),
+ addr_type=ADDR_LINES,
func='ex_ptag',
},
{
command='preserve',
flags=bit.bor(TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_preserve',
},
{
command='previous',
flags=bit.bor(EXTRA, RANGE, NOTADR, COUNT, BANG, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_previous',
},
{
command='promptfind',
flags=bit.bor(EXTRA, NOTRLCOM, CMDWIN),
+ addr_type=ADDR_LINES,
func='gui_mch_find_dialog',
},
{
command='promptrepl',
flags=bit.bor(EXTRA, NOTRLCOM, CMDWIN),
+ addr_type=ADDR_LINES,
func='gui_mch_replace_dialog',
},
{
command='profile',
flags=bit.bor(BANG, EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_profile',
},
{
command='profdel',
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_breakdel',
},
{
command='psearch',
flags=bit.bor(BANG, RANGE, WHOLEFOLD, DFLALL, EXTRA),
+ addr_type=ADDR_LINES,
func='ex_psearch',
},
{
command='ptag',
flags=bit.bor(RANGE, NOTADR, BANG, WORD1, TRLBAR, ZEROR),
+ addr_type=ADDR_LINES,
func='ex_ptag',
},
{
command='ptNext',
flags=bit.bor(RANGE, NOTADR, BANG, TRLBAR, ZEROR),
+ addr_type=ADDR_LINES,
func='ex_ptag',
},
{
command='ptfirst',
flags=bit.bor(RANGE, NOTADR, BANG, TRLBAR, ZEROR),
+ addr_type=ADDR_LINES,
func='ex_ptag',
},
{
command='ptjump',
flags=bit.bor(BANG, TRLBAR, WORD1),
+ addr_type=ADDR_LINES,
func='ex_ptag',
},
{
command='ptlast',
flags=bit.bor(BANG, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_ptag',
},
{
command='ptnext',
flags=bit.bor(RANGE, NOTADR, BANG, TRLBAR, ZEROR),
+ addr_type=ADDR_LINES,
func='ex_ptag',
},
{
command='ptprevious',
flags=bit.bor(RANGE, NOTADR, BANG, TRLBAR, ZEROR),
+ addr_type=ADDR_LINES,
func='ex_ptag',
},
{
command='ptrewind',
flags=bit.bor(RANGE, NOTADR, BANG, TRLBAR, ZEROR),
+ addr_type=ADDR_LINES,
func='ex_ptag',
},
{
command='ptselect',
flags=bit.bor(BANG, TRLBAR, WORD1),
+ addr_type=ADDR_LINES,
func='ex_ptag',
},
{
command='put',
flags=bit.bor(RANGE, WHOLEFOLD, BANG, REGSTR, TRLBAR, ZEROR, CMDWIN, MODIFY),
+ addr_type=ADDR_LINES,
func='ex_put',
},
{
command='pwd',
flags=bit.bor(TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_pwd',
},
{
command='python',
flags=bit.bor(RANGE, EXTRA, NEEDARG, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_python',
},
{
command='pydo',
flags=bit.bor(RANGE, DFLALL, EXTRA, NEEDARG, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_pydo',
},
{
command='pyfile',
flags=bit.bor(RANGE, FILE1, NEEDARG, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_pyfile',
},
{
command='py3',
flags=bit.bor(RANGE, EXTRA, NEEDARG, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_python3',
},
{
command='py3do',
flags=bit.bor(RANGE, DFLALL, EXTRA, NEEDARG, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_pydo3',
},
{
command='python3',
flags=bit.bor(RANGE, EXTRA, NEEDARG, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_python3',
},
{
command='py3file',
flags=bit.bor(RANGE, FILE1, NEEDARG, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_py3file',
},
{
command='quit',
- flags=bit.bor(BANG, TRLBAR, CMDWIN),
+ flags=bit.bor(BANG, RANGE, COUNT, NOTADR, TRLBAR, CMDWIN),
+ addr_type=ADDR_WINDOWS,
func='ex_quit',
},
{
command='quitall',
flags=bit.bor(BANG, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_quit_all',
},
{
command='qall',
flags=bit.bor(BANG, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_quit_all',
},
{
command='read',
flags=bit.bor(BANG, RANGE, WHOLEFOLD, FILE1, ARGOPT, TRLBAR, ZEROR, CMDWIN, MODIFY),
+ addr_type=ADDR_LINES,
func='ex_read',
},
{
command='recover',
flags=bit.bor(BANG, FILE1, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_recover',
},
{
command='redo',
flags=bit.bor(TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_redo',
},
{
command='redir',
flags=bit.bor(BANG, FILES, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_redir',
},
{
command='redraw',
flags=bit.bor(BANG, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_redraw',
},
{
command='redrawstatus',
flags=bit.bor(BANG, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_redrawstatus',
},
{
command='registers',
flags=bit.bor(EXTRA, NOTRLCOM, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_display',
},
{
command='resize',
flags=bit.bor(RANGE, NOTADR, TRLBAR, WORD1),
+ addr_type=ADDR_LINES,
func='ex_resize',
},
{
command='retab',
flags=bit.bor(TRLBAR, RANGE, WHOLEFOLD, DFLALL, BANG, WORD1, CMDWIN, MODIFY),
+ addr_type=ADDR_LINES,
func='ex_retab',
},
{
command='return',
flags=bit.bor(EXTRA, NOTRLCOM, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_return',
},
{
command='rewind',
flags=bit.bor(EXTRA, BANG, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_rewind',
},
{
command='right',
flags=bit.bor(TRLBAR, RANGE, WHOLEFOLD, EXTRA, CMDWIN, MODIFY),
+ addr_type=ADDR_LINES,
func='ex_align',
},
{
command='rightbelow',
flags=bit.bor(NEEDARG, EXTRA, NOTRLCOM),
+ addr_type=ADDR_LINES,
func='ex_wrongmodifier',
},
{
command='runtime',
flags=bit.bor(BANG, NEEDARG, FILES, TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_runtime',
},
{
command='rundo',
flags=bit.bor(NEEDARG, FILE1),
+ addr_type=ADDR_LINES,
func='ex_rundo',
},
{
command='ruby',
flags=bit.bor(RANGE, EXTRA, NEEDARG, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_script_ni',
},
{
command='rubydo',
flags=bit.bor(RANGE, DFLALL, EXTRA, NEEDARG, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_ni',
},
{
command='rubyfile',
flags=bit.bor(RANGE, FILE1, NEEDARG, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_ni',
},
{
command='rviminfo',
flags=bit.bor(BANG, FILE1, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_viminfo',
},
{
command='substitute',
flags=bit.bor(RANGE, WHOLEFOLD, EXTRA, CMDWIN),
+ addr_type=ADDR_LINES,
func='do_sub',
},
{
command='sNext',
flags=bit.bor(EXTRA, RANGE, NOTADR, COUNT, BANG, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_previous',
},
{
command='sargument',
flags=bit.bor(BANG, RANGE, NOTADR, COUNT, EXTRA, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_ARGUMENTS,
func='ex_argument',
},
{
command='sall',
flags=bit.bor(BANG, RANGE, NOTADR, COUNT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_all',
},
{
command='sandbox',
flags=bit.bor(NEEDARG, EXTRA, NOTRLCOM),
+ addr_type=ADDR_LINES,
func='ex_wrongmodifier',
},
{
command='saveas',
flags=bit.bor(BANG, DFLALL, FILE1, ARGOPT, CMDWIN, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_write',
},
{
command='sbuffer',
flags=bit.bor(BANG, RANGE, NOTADR, BUFNAME, BUFUNL, COUNT, EXTRA, EDITCMD, TRLBAR),
+ addr_type=ADDR_UNLOADED_BUFFERS,
func='ex_buffer',
},
{
command='sbNext',
flags=bit.bor(RANGE, NOTADR, COUNT, EDITCMD, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_bprevious',
},
{
command='sball',
flags=bit.bor(RANGE, NOTADR, COUNT, EDITCMD, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_buffer_all',
},
{
command='sbfirst',
flags=bit.bor(EDITCMD, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_brewind',
},
{
command='sblast',
flags=bit.bor(EDITCMD, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_blast',
},
{
command='sbmodified',
flags=bit.bor(RANGE, NOTADR, COUNT, EDITCMD, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_bmodified',
},
{
command='sbnext',
flags=bit.bor(RANGE, NOTADR, COUNT, EDITCMD, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_bnext',
},
{
command='sbprevious',
flags=bit.bor(RANGE, NOTADR, COUNT, EDITCMD, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_bprevious',
},
{
command='sbrewind',
flags=bit.bor(EDITCMD, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_brewind',
},
{
command='scriptnames',
flags=bit.bor(TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_scriptnames',
},
{
command='scriptencoding',
flags=bit.bor(WORD1, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_scriptencoding',
},
{
command='scscope',
flags=bit.bor(EXTRA, NOTRLCOM),
+ addr_type=ADDR_LINES,
func='do_scscope',
},
{
command='set',
flags=bit.bor(TRLBAR, EXTRA, CMDWIN, SBOXOK),
+ addr_type=ADDR_LINES,
func='ex_set',
},
{
command='setfiletype',
flags=bit.bor(TRLBAR, EXTRA, NEEDARG, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_setfiletype',
},
{
command='setglobal',
flags=bit.bor(TRLBAR, EXTRA, CMDWIN, SBOXOK),
+ addr_type=ADDR_LINES,
func='ex_set',
},
{
command='setlocal',
flags=bit.bor(TRLBAR, EXTRA, CMDWIN, SBOXOK),
+ addr_type=ADDR_LINES,
func='ex_set',
},
{
command='sfind',
flags=bit.bor(BANG, FILE1, RANGE, NOTADR, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_splitview',
},
{
command='sfirst',
flags=bit.bor(EXTRA, BANG, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_rewind',
},
{
command='simalt',
flags=bit.bor(NEEDARG, WORD1, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_simalt',
},
{
command='sign',
flags=bit.bor(NEEDARG, RANGE, NOTADR, EXTRA, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_sign',
},
{
command='silent',
flags=bit.bor(NEEDARG, EXTRA, BANG, NOTRLCOM, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_wrongmodifier',
},
{
command='sleep',
flags=bit.bor(RANGE, NOTADR, COUNT, EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_sleep',
},
{
command='slast',
flags=bit.bor(EXTRA, BANG, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_last',
},
{
command='smagic',
flags=bit.bor(RANGE, WHOLEFOLD, EXTRA, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_submagic',
},
{
command='smap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_map',
},
{
command='smapclear',
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_mapclear',
},
{
command='smenu',
flags=bit.bor(RANGE, NOTADR, ZEROR, EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='snext',
flags=bit.bor(RANGE, NOTADR, BANG, FILES, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_next',
},
{
command='snomagic',
flags=bit.bor(RANGE, WHOLEFOLD, EXTRA, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_submagic',
},
{
command='snoremap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_map',
},
{
command='snoremenu',
flags=bit.bor(RANGE, NOTADR, ZEROR, EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='source',
flags=bit.bor(BANG, FILE1, TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_source',
},
{
command='sort',
flags=bit.bor(RANGE, DFLALL, WHOLEFOLD, BANG, EXTRA, NOTRLCOM, MODIFY),
+ addr_type=ADDR_LINES,
func='ex_sort',
},
{
command='split',
flags=bit.bor(BANG, FILE1, RANGE, NOTADR, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_splitview',
},
{
command='spellgood',
flags=bit.bor(BANG, RANGE, NOTADR, NEEDARG, EXTRA, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_spell',
},
{
command='spelldump',
flags=bit.bor(BANG, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_spelldump',
},
{
command='spellinfo',
flags=bit.bor(TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_spellinfo',
},
{
command='spellrepall',
flags=bit.bor(TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_spellrepall',
},
{
command='spellundo',
flags=bit.bor(BANG, RANGE, NOTADR, NEEDARG, EXTRA, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_spell',
},
{
command='spellwrong',
flags=bit.bor(BANG, RANGE, NOTADR, NEEDARG, EXTRA, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_spell',
},
{
command='sprevious',
flags=bit.bor(EXTRA, RANGE, NOTADR, COUNT, BANG, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_previous',
},
{
command='srewind',
flags=bit.bor(EXTRA, BANG, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_rewind',
},
{
command='stop',
flags=bit.bor(TRLBAR, BANG, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_stop',
},
{
command='stag',
flags=bit.bor(RANGE, NOTADR, BANG, WORD1, TRLBAR, ZEROR),
+ addr_type=ADDR_LINES,
func='ex_stag',
},
{
command='startinsert',
flags=bit.bor(BANG, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_startinsert',
},
{
command='startgreplace',
flags=bit.bor(BANG, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_startinsert',
},
{
command='startreplace',
flags=bit.bor(BANG, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_startinsert',
},
{
command='stopinsert',
flags=bit.bor(BANG, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_stopinsert',
},
{
command='stjump',
flags=bit.bor(BANG, TRLBAR, WORD1),
+ addr_type=ADDR_LINES,
func='ex_stag',
},
{
command='stselect',
flags=bit.bor(BANG, TRLBAR, WORD1),
+ addr_type=ADDR_LINES,
func='ex_stag',
},
{
command='sunhide',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_buffer_all',
},
{
command='sunmap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_unmap',
},
{
command='sunmenu',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='suspend',
flags=bit.bor(TRLBAR, BANG, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_stop',
},
{
command='sview',
flags=bit.bor(BANG, FILE1, RANGE, NOTADR, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_splitview',
},
{
command='swapname',
flags=bit.bor(TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_swapname',
},
{
command='syntax',
flags=bit.bor(EXTRA, NOTRLCOM, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_syntax',
},
{
command='syntime',
flags=bit.bor(NEEDARG, WORD1, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_syntime',
},
{
command='syncbind',
flags=bit.bor(TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_syncbind',
},
{
command='t',
flags=bit.bor(RANGE, WHOLEFOLD, EXTRA, TRLBAR, CMDWIN, MODIFY),
+ addr_type=ADDR_LINES,
func='ex_copymove',
},
{
command='tNext',
flags=bit.bor(RANGE, NOTADR, BANG, TRLBAR, ZEROR),
+ addr_type=ADDR_LINES,
func='ex_tag',
},
{
command='tag',
flags=bit.bor(RANGE, NOTADR, BANG, WORD1, TRLBAR, ZEROR),
+ addr_type=ADDR_LINES,
func='ex_tag',
},
{
command='tags',
flags=bit.bor(TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='do_tags',
},
{
command='tab',
flags=bit.bor(NEEDARG, EXTRA, NOTRLCOM),
+ addr_type=ADDR_LINES,
func='ex_wrongmodifier',
},
{
command='tabclose',
flags=bit.bor(RANGE, NOTADR, COUNT, BANG, TRLBAR, CMDWIN),
+ addr_type=ADDR_TABS,
func='ex_tabclose',
},
{
command='tabdo',
flags=bit.bor(NEEDARG, EXTRA, NOTRLCOM),
+ addr_type=ADDR_LINES,
func='ex_listdo',
},
{
command='tabedit',
flags=bit.bor(BANG, FILE1, RANGE, NOTADR, ZEROR, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_TABS,
func='ex_splitview',
},
{
command='tabfind',
flags=bit.bor(BANG, FILE1, RANGE, NOTADR, ZEROR, EDITCMD, ARGOPT, NEEDARG, TRLBAR),
+ addr_type=ADDR_TABS,
func='ex_splitview',
},
{
command='tabfirst',
flags=bit.bor(TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_tabnext',
},
{
command='tabmove',
flags=bit.bor(RANGE, NOTADR, ZEROR, EXTRA, NOSPC, TRLBAR),
+ addr_type=ADDR_TABS,
func='ex_tabmove',
},
{
command='tablast',
flags=bit.bor(TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_tabnext',
},
{
command='tabnext',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_tabnext',
},
{
command='tabnew',
flags=bit.bor(BANG, FILE1, RANGE, NOTADR, ZEROR, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_TABS,
func='ex_splitview',
},
{
command='tabonly',
- flags=bit.bor(BANG, TRLBAR, CMDWIN),
+ flags=bit.bor(BANG, RANGE, NOTADR, TRLBAR, CMDWIN),
+ addr_type=ADDR_TABS,
func='ex_tabonly',
},
{
command='tabprevious',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_tabnext',
},
{
command='tabNext',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_tabnext',
},
{
command='tabrewind',
flags=bit.bor(TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_tabnext',
},
{
command='tabs',
flags=bit.bor(TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_tabs',
},
{
command='tcl',
flags=bit.bor(RANGE,EXTRA,NEEDARG,CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_script_ni',
},
{
command='tcldo',
flags=bit.bor(RANGE,DFLALL,EXTRA,NEEDARG,CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_ni',
},
{
command='tclfile',
flags=bit.bor(RANGE,FILE1,NEEDARG,CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_ni',
},
{
command='tearoff',
flags=bit.bor(NEEDARG, EXTRA, TRLBAR, NOTRLCOM, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_tearoff',
},
{
command='terminal',
flags=bit.bor(BANG, FILES, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_terminal',
},
{
command='tfirst',
flags=bit.bor(RANGE, NOTADR, BANG, TRLBAR, ZEROR),
+ addr_type=ADDR_LINES,
func='ex_tag',
},
{
command='throw',
flags=bit.bor(EXTRA, NEEDARG, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_throw',
},
{
command='tjump',
flags=bit.bor(BANG, TRLBAR, WORD1),
+ addr_type=ADDR_LINES,
func='ex_tag',
},
{
command='tlast',
flags=bit.bor(BANG, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_tag',
},
{
command='tmap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_map',
},
{
command='tmapclear',
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_mapclear',
},
{
command='tmenu',
flags=bit.bor(RANGE, NOTADR, ZEROR, EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='tnext',
flags=bit.bor(RANGE, NOTADR, BANG, TRLBAR, ZEROR),
+ addr_type=ADDR_LINES,
func='ex_tag',
},
{
command='tnoremap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_map',
},
{
command='topleft',
flags=bit.bor(NEEDARG, EXTRA, NOTRLCOM),
+ addr_type=ADDR_LINES,
func='ex_wrongmodifier',
},
{
command='tprevious',
flags=bit.bor(RANGE, NOTADR, BANG, TRLBAR, ZEROR),
+ addr_type=ADDR_LINES,
func='ex_tag',
},
{
command='trewind',
flags=bit.bor(RANGE, NOTADR, BANG, TRLBAR, ZEROR),
+ addr_type=ADDR_LINES,
func='ex_tag',
},
{
command='try',
flags=bit.bor(TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_try',
},
{
command='tselect',
flags=bit.bor(BANG, TRLBAR, WORD1),
+ addr_type=ADDR_LINES,
func='ex_tag',
},
{
command='tunmap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_unmap',
},
{
command='tunmenu',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='undo',
flags=bit.bor(RANGE, NOTADR, COUNT, ZEROR, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_undo',
},
{
command='undojoin',
flags=bit.bor(TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_undojoin',
},
{
command='undolist',
flags=bit.bor(TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_undolist',
},
{
command='unabbreviate',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_abbreviate',
},
{
command='unhide',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_buffer_all',
},
{
command='unlet',
flags=bit.bor(BANG, EXTRA, NEEDARG, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_unlet',
},
{
command='unlockvar',
flags=bit.bor(BANG, EXTRA, NEEDARG, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_lockvar',
},
{
command='unmap',
flags=bit.bor(BANG, EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_unmap',
},
{
command='unmenu',
flags=bit.bor(BANG, EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='unsilent',
flags=bit.bor(NEEDARG, EXTRA, NOTRLCOM, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_wrongmodifier',
},
{
command='update',
flags=bit.bor(RANGE, WHOLEFOLD, BANG, FILE1, ARGOPT, DFLALL, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_update',
},
{
command='vglobal',
flags=bit.bor(RANGE, WHOLEFOLD, EXTRA, DFLALL, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_global',
},
{
command='version',
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_version',
},
{
command='verbose',
flags=bit.bor(NEEDARG, RANGE, NOTADR, EXTRA, NOTRLCOM, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_wrongmodifier',
},
{
command='vertical',
flags=bit.bor(NEEDARG, EXTRA, NOTRLCOM),
+ addr_type=ADDR_LINES,
func='ex_wrongmodifier',
},
{
command='visual',
flags=bit.bor(BANG, FILE1, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_edit',
},
{
command='view',
flags=bit.bor(BANG, FILE1, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_edit',
},
{
command='vimgrep',
flags=bit.bor(RANGE, NOTADR, BANG, NEEDARG, EXTRA, NOTRLCOM, TRLBAR, XFILE),
+ addr_type=ADDR_LINES,
func='ex_vimgrep',
},
{
command='vimgrepadd',
flags=bit.bor(RANGE, NOTADR, BANG, NEEDARG, EXTRA, NOTRLCOM, TRLBAR, XFILE),
+ addr_type=ADDR_LINES,
func='ex_vimgrep',
},
{
command='viusage',
flags=bit.bor(TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_viusage',
},
{
command='vmap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_map',
},
{
command='vmapclear',
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_mapclear',
},
{
command='vmenu',
flags=bit.bor(RANGE, NOTADR, ZEROR, EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='vnoremap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_map',
},
{
command='vnew',
flags=bit.bor(BANG, FILE1, RANGE, NOTADR, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_splitview',
},
{
command='vnoremenu',
flags=bit.bor(RANGE, NOTADR, ZEROR, EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='vsplit',
flags=bit.bor(BANG, FILE1, RANGE, NOTADR, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_splitview',
},
{
command='vunmap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_unmap',
},
{
command='vunmenu',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='write',
flags=bit.bor(RANGE, WHOLEFOLD, BANG, FILE1, ARGOPT, DFLALL, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_write',
},
{
command='wNext',
flags=bit.bor(RANGE, WHOLEFOLD, NOTADR, BANG, FILE1, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_wnext',
},
{
command='wall',
flags=bit.bor(BANG, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='do_wqall',
},
{
command='while',
flags=bit.bor(EXTRA, NOTRLCOM, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_while',
},
{
command='winsize',
flags=bit.bor(EXTRA, NEEDARG, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_winsize',
},
{
command='wincmd',
flags=bit.bor(NEEDARG, WORD1, RANGE, NOTADR),
+ addr_type=ADDR_LINES,
func='ex_wincmd',
},
{
command='windo',
flags=bit.bor(BANG, NEEDARG, EXTRA, NOTRLCOM),
+ addr_type=ADDR_LINES,
func='ex_listdo',
},
{
command='winpos',
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_ni',
},
{
command='wnext',
flags=bit.bor(RANGE, NOTADR, BANG, FILE1, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_wnext',
},
{
command='wprevious',
flags=bit.bor(RANGE, NOTADR, BANG, FILE1, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_wnext',
},
{
command='wq',
flags=bit.bor(RANGE, WHOLEFOLD, BANG, FILE1, ARGOPT, DFLALL, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_exit',
},
{
command='wqall',
flags=bit.bor(BANG, FILE1, ARGOPT, DFLALL, TRLBAR),
+ addr_type=ADDR_LINES,
func='do_wqall',
},
{
command='wsverb',
flags=bit.bor(EXTRA, NOTADR, NEEDARG),
+ addr_type=ADDR_LINES,
func='ex_wsverb',
},
{
command='wundo',
flags=bit.bor(BANG, NEEDARG, FILE1),
+ addr_type=ADDR_LINES,
func='ex_wundo',
},
{
command='wviminfo',
flags=bit.bor(BANG, FILE1, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_viminfo',
},
{
command='xit',
flags=bit.bor(RANGE, WHOLEFOLD, BANG, FILE1, ARGOPT, DFLALL, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_exit',
},
{
command='xall',
flags=bit.bor(BANG, TRLBAR),
+ addr_type=ADDR_LINES,
func='do_wqall',
},
{
command='xmap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_map',
},
{
command='xmapclear',
flags=bit.bor(EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_mapclear',
},
{
command='xmenu',
flags=bit.bor(RANGE, NOTADR, ZEROR, EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='xnoremap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_map',
},
{
command='xnoremenu',
flags=bit.bor(RANGE, NOTADR, ZEROR, EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='xunmap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_unmap',
},
{
command='xunmenu',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_menu',
},
{
command='yank',
flags=bit.bor(RANGE, WHOLEFOLD, REGSTR, COUNT, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_operators',
},
{
command='z',
flags=bit.bor(RANGE, WHOLEFOLD, EXTRA, EXFLAGS, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_z',
},
{
command='!',
enum='CMD_bang',
flags=bit.bor(RANGE, WHOLEFOLD, BANG, FILES, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_bang',
},
{
command='#',
enum='CMD_pound',
flags=bit.bor(RANGE, WHOLEFOLD, COUNT, EXFLAGS, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_print',
},
{
command='&',
enum='CMD_and',
flags=bit.bor(RANGE, WHOLEFOLD, EXTRA, CMDWIN, MODIFY),
+ addr_type=ADDR_LINES,
func='do_sub',
},
{
command='*',
enum='CMD_star',
flags=bit.bor(RANGE, WHOLEFOLD, EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_at',
},
{
command='<',
enum='CMD_lshift',
flags=bit.bor(RANGE, WHOLEFOLD, COUNT, EXFLAGS, TRLBAR, CMDWIN, MODIFY),
+ addr_type=ADDR_LINES,
func='ex_operators',
},
{
command='=',
enum='CMD_equal',
flags=bit.bor(RANGE, TRLBAR, DFLALL, EXFLAGS, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_equal',
},
{
command='>',
enum='CMD_rshift',
flags=bit.bor(RANGE, WHOLEFOLD, COUNT, EXFLAGS, TRLBAR, CMDWIN, MODIFY),
+ addr_type=ADDR_LINES,
func='ex_operators',
},
{
command='@',
enum='CMD_at',
flags=bit.bor(RANGE, WHOLEFOLD, EXTRA, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_at',
},
{
command='Next',
flags=bit.bor(EXTRA, RANGE, NOTADR, COUNT, BANG, EDITCMD, ARGOPT, TRLBAR),
+ addr_type=ADDR_LINES,
func='ex_previous',
},
{
command='Print',
flags=bit.bor(RANGE, WHOLEFOLD, COUNT, EXFLAGS, TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
func='ex_print',
},
{
command='~',
enum='CMD_tilde',
flags=bit.bor(RANGE, WHOLEFOLD, EXTRA, CMDWIN, MODIFY),
+ addr_type=ADDR_LINES,
func='do_sub',
},
}
diff --git a/src/nvim/ex_cmds_defs.h b/src/nvim/ex_cmds_defs.h
index 1b920511b6..4703e9b8ad 100644
--- a/src/nvim/ex_cmds_defs.h
+++ b/src/nvim/ex_cmds_defs.h
@@ -71,6 +71,14 @@
#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
+
typedef struct exarg exarg_T;
/* behavior for bad character, "++bad=" argument */
@@ -87,6 +95,7 @@ typedef struct cmdname {
char_u *cmd_name; ///< Name of the command.
ex_func_T cmd_func; ///< Function with implementation of this command.
uint32_t cmd_argt; ///< Relevant flags from the declared above.
+ int cmd_addr_type; ///< Flag for address type
} CommandDefinition;
/// Arguments used for Ex commands.
@@ -102,6 +111,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
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c
index 51010983bb..a1760f653c 100644
--- a/src/nvim/ex_docmd.c
+++ b/src/nvim/ex_docmd.c
@@ -1066,16 +1066,44 @@ void * getline_cookie(LineGetter fgetline,
}
/*
+ * Helper function to apply an offset for buffer commands, i.e. ":bdelete",
+ * ":bwipeout", etc.
+ * Returns the buffer number.
+ */
+static int compute_buffer_local_count(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.
*
* If 'sourcing' is TRUE, the command will be included in the error message.
*
* 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. skip over the range to find the command
+ * 4. parse the range
+ * 5. parse the command
+ * 6. parse arguments
+ * 7. switch on command name
*
* Note: "fgetline" can be NULL.
*
@@ -1100,6 +1128,9 @@ static char_u * do_one_cmd(char_u **cmdlinep,
int did_sandbox = FALSE;
cmdmod_T save_cmdmod;
int ni; /* set when Not Implemented */
+ win_T *wp;
+ tabpage_T *tp;
+ char_u *cmd;
memset(&ea, 0, sizeof(ea));
ea.line1 = 1;
@@ -1132,7 +1163,7 @@ static char_u * do_one_cmd(char_u **cmdlinep,
ea.cmd = *cmdlinep;
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;
@@ -1155,7 +1186,7 @@ static char_u * do_one_cmd(char_u **cmdlinep,
}
/*
- * 2. handle command modifiers.
+ * 2. Handle command modifiers.
*/
p = ea.cmd;
if (ascii_isdigit(*ea.cmd))
@@ -1319,8 +1350,18 @@ static char_u * do_one_cmd(char_u **cmdlinep,
(void)do_intthrow(cstack);
}
+ // 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);
+
/*
- * 3. parse a range specifier of the form: addr [,addr] [;addr] ..
+ * 4. Parse a range specifier of the form: addr [,addr] [;addr] ..
*
* where 'addr' is:
*
@@ -1336,25 +1377,82 @@ static char_u * do_one_cmd(char_u **cmdlinep,
* 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) {
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 */
else if (*ea.cmd == '*' && vim_strchr(p_cpo, CPO_STAR) == NULL) {
pos_T *fp;
+ if (ea.addr_type != ADDR_LINES) {
+ errormsg = (char_u *)_(e_invrange);
+ goto doend;
+ }
+
++ea.cmd;
if (!ea.skip) {
fp = getmark('<', FALSE);
@@ -1392,7 +1490,7 @@ static char_u * do_one_cmd(char_u **cmdlinep,
check_cursor_lnum();
/*
- * 4. parse command
+ * 5. Parse the command.
*/
/*
@@ -1446,9 +1544,6 @@ static char_u * do_one_cmd(char_u **cmdlinep,
goto doend;
}
- /* Find the command and let "p" point to after it. */
- p = find_command(&ea, NULL);
-
// If this looks like an undefined user command and there are CmdUndefined
// autocommands defined, trigger the matching autocommands.
if (p != NULL && ea.cmdidx == CMD_SIZE && !ea.skip
@@ -1502,7 +1597,7 @@ static char_u * do_one_cmd(char_u **cmdlinep,
ea.forceit = FALSE;
/*
- * 5. parse arguments
+ * 6. Parse arguments.
*/
if (!IS_USER_CMDIDX(ea.cmdidx)) {
ea.argt = cmdnames[(int)ea.cmdidx].cmd_argt;
@@ -1888,7 +1983,7 @@ static char_u * do_one_cmd(char_u **cmdlinep,
}
/*
- * 6. switch on command name
+ * 7. Switch on command name.
*
* The "ea" structure holds the arguments that can be used.
*/
@@ -3098,12 +3193,11 @@ skip_range (
*
* Return MAXLNUM when no Ex address was found.
*/
-static linenr_T
-get_address (
- char_u **ptr,
- int skip, /* only skip the address, don't use it */
- int to_other_file /* flag: may jump to other file */
-)
+static linenr_T get_address(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
+ )
{
int c;
int i;
@@ -3112,6 +3206,9 @@ get_address (
pos_T pos;
pos_T *fp;
linenr_T lnum;
+ win_T *wp;
+ tabpage_T *tp;
+ buf_T *buf;
cmd = skipwhite(*ptr);
lnum = MAXLNUM;
@@ -3119,12 +3216,68 @@ get_address (
switch (*cmd) {
case '.': /* '.' - Cursor position */
++cmd;
- lnum = curwin->w_cursor.lnum;
+ 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;
+ for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) {
+ lnum++;
+ if (tp == curtab)
+ break;
+ }
+ break;
+ }
break;
case '$': /* '$' - last line */
++cmd;
- lnum = curbuf->b_ml.ml_line_count;
+ 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:
+ buf = lastbuf;
+ while (buf->b_ml.ml_mfp == NULL) {
+ if (buf->b_prev == NULL) {
+ break;
+ }
+ buf = buf->b_prev;
+ }
+ lnum = buf->b_fnum;
+ break;
+ 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 */
@@ -3132,6 +3285,10 @@ get_address (
cmd = NULL;
goto error;
}
+ if (addr_type != ADDR_LINES) {
+ EMSG(_(e_invaddr));
+ goto error;
+ }
if (skip)
++cmd;
else {
@@ -3155,6 +3312,10 @@ get_address (
case '/':
case '?': /* '/' or '?' - search */
c = *cmd++;
+ if (addr_type != ADDR_LINES) {
+ EMSG(_(e_invaddr));
+ goto error;
+ }
if (skip) { /* skip "/pat/" */
cmd = skip_regexp(cmd, c, p_magic, NULL);
if (*cmd == c)
@@ -3194,6 +3355,10 @@ get_address (
case '\\': /* "\?", "\/" or "\&", repeat search */
++cmd;
+ if (addr_type != ADDR_LINES) {
+ EMSG(_(e_invaddr));
+ goto error;
+ }
if (*cmd == '&')
i = RE_SUBST;
else if (*cmd == '?' || *cmd == '/')
@@ -3233,8 +3398,37 @@ get_address (
if (*cmd != '-' && *cmd != '+' && !ascii_isdigit(*cmd))
break;
- if (lnum == MAXLNUM)
- lnum = curwin->w_cursor.lnum; /* "+1" is same as ".+1" */
+ if (lnum == MAXLNUM) {
+ switch (addr_type) {
+ case ADDR_LINES:
+ lnum = curwin->w_cursor.lnum; /* "+1" is same as ".+1" */
+ break;
+ case ADDR_WINDOWS:
+ lnum = 0;
+ for (wp = firstwin; wp != NULL; wp = wp->w_next) {
+ lnum++;
+ if (wp == curwin)
+ break;
+ }
+ break;
+ case ADDR_ARGUMENTS:
+ lnum = curwin->w_arg_idx + 1;
+ break;
+ case ADDR_LOADED_BUFFERS:
+ case ADDR_UNLOADED_BUFFERS:
+ lnum = curbuf->b_fnum;
+ break;
+ case ADDR_TABS:
+ lnum = 0;
+ for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) {
+ lnum++;
+ if (tp == curtab)
+ break;
+ }
+ break;
+ }
+ }
+
if (ascii_isdigit(*cmd))
i = '+'; /* "number" is same as "+number" */
else
@@ -3242,11 +3436,56 @@ get_address (
if (!ascii_isdigit(*cmd)) /* '+' is '+1', but '+0' is not '+1' */
n = 1;
else
- n = getdigits_long(&cmd);
- if (i == '-')
+ n = getdigits(&cmd);
+ if (addr_type == ADDR_LOADED_BUFFERS ||
+ addr_type == ADDR_UNLOADED_BUFFERS)
+ lnum = compute_buffer_local_count(addr_type, lnum, n);
+ else if (i == '-')
lnum -= n;
else
lnum += n;
+
+ switch (addr_type) {
+ case ADDR_LINES:
+ break;
+ case ADDR_ARGUMENTS:
+ if (lnum < 0)
+ lnum = 0;
+ else if (lnum >= ARGCOUNT)
+ lnum = ARGCOUNT;
+ break;
+ case ADDR_TABS:
+ if (lnum < 0) {
+ lnum = 0;
+ break;
+ }
+ c = 0;
+ for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
+ c++;
+ if (lnum >= c)
+ lnum = c;
+ break;
+ case ADDR_WINDOWS:
+ if (lnum < 0) {
+ lnum = 0;
+ break;
+ }
+ c = 0;
+ for (wp = firstwin; wp != NULL; wp = wp->w_next)
+ c++;
+ if (lnum > c)
+ lnum = c;
+ break;
+ case ADDR_LOADED_BUFFERS:
+ case ADDR_UNLOADED_BUFFERS:
+ if (lnum < firstbuf->b_fnum) {
+ lnum = firstbuf->b_fnum;
+ break;
+ }
+ if (lnum > lastbuf->b_fnum)
+ lnum = lastbuf->b_fnum;
+ break;
+ }
}
} while (*cmd == '/' || *cmd == '?');
@@ -5102,10 +5341,29 @@ static void ex_quit(exarg_T *eap)
text_locked_msg();
return;
}
+
+ win_T *wp;
+ buf_T *buf;
+ int wnr;
+
+ 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;
+ }
+
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 && curbuf->b_closing))
return;
@@ -5127,7 +5385,7 @@ static void ex_quit(exarg_T *eap)
getout(0);
}
/* 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);
}
}
@@ -5174,12 +5432,24 @@ static void ex_quit_all(exarg_T *eap)
*/
static void ex_close(exarg_T *eap)
{
+ win_T *win;
+ int winnr = 0;
if (cmdwin_type != 0)
cmdwin_result = Ctrl_C;
- else if (!text_locked()
- && !curbuf_locked()
- )
- ex_win_close(eap->forceit, curwin, NULL);
+ else if (!text_locked() && !curbuf_locked()) {
+ 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);
+ }
+ }
}
/*
@@ -5271,6 +5541,8 @@ static void ex_tabonly(exarg_T *eap)
else if (first_tabpage->tp_next == NULL)
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 (int done = 0; done < 1000; ++done) {
@@ -5341,6 +5613,18 @@ void tabpage_close_other(tabpage_T *tp, int forceit)
*/
static void ex_only(exarg_T *eap)
{
+ win_T *wp;
+ int wnr;
+ 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);
}
@@ -5357,13 +5641,26 @@ void ex_all(exarg_T *eap)
static void ex_hide(exarg_T *eap)
{
+ win_T *win;
+ int winnr = 0;
if (*eap->arg != NUL && check_nextcmd(eap->arg) == NULL)
eap->errmsg = e_invarg;
else {
/* ":hide" or ":hide | cmd": hide current window */
eap->nextcmd = check_nextcmd(eap->arg);
if (!eap->skip) {
- 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);
+ }
}
}
}
@@ -6518,7 +6815,7 @@ static void ex_copymove(exarg_T *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;
return;
diff --git a/src/nvim/testdir/Makefile b/src/nvim/testdir/Makefile
index 0a7c16e2cb..fb529e0cb2 100644
--- a/src/nvim/testdir/Makefile
+++ b/src/nvim/testdir/Makefile
@@ -29,7 +29,9 @@ SCRIPTS := test_autoformat_join.out \
test86.out test87.out test88.out \
test96.out \
test_listlbr.out \
- test_breakindent.out
+ test_breakindent.out \
+ test_argument_count.out \
+ test_close_count.out
SCRIPTS_GUI := test16.out
diff --git a/src/nvim/testdir/test_argument_count.in b/src/nvim/testdir/test_argument_count.in
new file mode 100644
index 0000000000..f45e52a3e6
--- /dev/null
+++ b/src/nvim/testdir/test_argument_count.in
@@ -0,0 +1,47 @@
+Tests for :[count]argument! and :[count]argdelete vim: set ft=vim :
+
+STARTTEST
+:%argd
+:argadd a b c d
+:set hidden
+:let buffers = []
+:augroup TEST
+:au BufEnter * call add(buffers, expand('%:t'))
+:augroup END
+:$argu
+:$-argu
+:-argu
+:1argu
+:+2argu
+:augroup TEST
+:au!
+:augroup END
+:let arglists = []
+:.argd
+:call add(arglists, argv())
+:-argd
+:call add(arglists, argv())
+:$argd
+:call add(arglists, argv())
+:1arga c
+:1arga b
+:$argu
+:+arga d
+:$arga x
+:call add(arglists, argv())
+:$-10arga Y
+:call add(arglists, argv())
+:%argd
+:call add(arglists, argv())
+:arga a b c d e f
+:2,$-argd
+:call add(arglists, argv())
+:e! test.out
+:call append(0, buffers)
+:let lnr = line('$')
+:call append(lnr, map(copy(arglists), 'join(v:val, " ")'))
+:w
+:qa!
+ENDTEST
+
+
diff --git a/src/nvim/testdir/test_argument_count.ok b/src/nvim/testdir/test_argument_count.ok
new file mode 100644
index 0000000000..f591bf2614
--- /dev/null
+++ b/src/nvim/testdir/test_argument_count.ok
@@ -0,0 +1,13 @@
+d
+c
+b
+a
+c
+
+a b d
+a d
+a
+a b c d x
+Y a b c d x
+
+a f
diff --git a/src/nvim/testdir/test_close_count.in b/src/nvim/testdir/test_close_count.in
new file mode 100644
index 0000000000..288945c696
--- /dev/null
+++ b/src/nvim/testdir/test_close_count.in
@@ -0,0 +1,156 @@
+Tests for :[count]close! and :[count]hide vim: set ft=vim :
+
+STARTTEST
+:let tests = []
+:so tiny.vim
+:for i in range(5)
+:new
+:endfor
+:4wincmd w
+:close!
+:let buffers = []
+:windo call add(buffers, bufnr('%'))
+:call add(tests, buffers)
+:1close!
+:let buffers = []
+:windo call add(buffers, bufnr('%'))
+:call add(tests, buffers)
+:$close!
+:let buffers = []
+:windo call add(buffers, bufnr('%'))
+:call add(tests, buffers)
+:1wincmd w
+:2close!
+:let buffers = []
+:windo call add(buffers, bufnr('%'))
+:call add(tests, buffers)
+:1wincmd w
+:new
+:new
+:2wincmd w
+:-2close!
+:let buffers = []
+:windo call add(buffers, bufnr('%'))
+:call add(tests, buffers)
+:2wincmd w
+:+1close!
+:let buffers = []
+:windo call add(buffers, bufnr('%'))
+:call add(tests, buffers)
+:e! test.out
+:call append(0, map(copy(tests), 'join(v:val, " ")'))
+:w
+:only!
+:b1
+ENDTEST
+
+STARTTEST
+:let tests = []
+:so tiny.vim
+:for i in range(5)
+:new
+:endfor
+:let buffers = []
+:windo call add(buffers, bufnr('%'))
+:call add(tests, buffers)
+:4wincmd w
+:.hide
+:let buffers = []
+:windo call add(buffers, bufnr('%'))
+:call add(tests, buffers)
+:1hide
+:let buffers = []
+:windo call add(buffers, bufnr('%'))
+:call add(tests, buffers)
+:9hide
+:let buffers = []
+:windo call add(buffers, bufnr('%'))
+:call add(tests, buffers)
+:1wincmd w
+:2hide
+:let buffers = []
+:windo call add(buffers, bufnr('%'))
+:call add(tests, buffers)
+:1wincmd w
+:new
+:new
+:3wincmd w
+:-hide
+:let buffers = []
+:windo call add(buffers, bufnr('%'))
+:call add(tests, buffers)
+:2wincmd w
+:+hide
+:let buffers = []
+:windo call add(buffers, bufnr('%'))
+:call add(tests, buffers)
+:e! test.out
+:call append(line('$'), map(copy(tests), 'join(v:val, " ")'))
+Go
+:w
+:only!
+:b1
+ENDTEST
+
+STARTTEST
+:let tests = []
+:so tiny.vim
+:set hidden
+:for i in range(5)
+:new
+:endfor
+:1wincmd w
+:$ hide
+:let buffers = []
+:windo call add(buffers, bufnr('%'))
+:call add(tests, buffers)
+:$-1 close!
+:let buffers = []
+:windo call add(buffers, bufnr('%'))
+:call add(tests, buffers)
+:1wincmd w
+:.+close!
+:let buffers = []
+:windo call add(buffers, bufnr('%'))
+:call add(tests, buffers)
+:e! test.out
+:call append(line('$'), map(copy(tests), 'join(v:val, " ")'))
+Go
+:w
+:only!
+:b1
+ENDTEST
+
+STARTTEST
+:let tests = []
+:so tiny.vim
+:set hidden
+:for i in range(5)
+:new
+:endfor
+:4wincmd w
+c
+:let buffers = []
+:windo call add(buffers, bufnr('%'))
+:call add(tests, buffers)
+1c
+:let buffers = []
+:windo call add(buffers, bufnr('%'))
+:call add(tests, buffers)
+9c
+:let buffers = []
+:windo call add(buffers, bufnr('%'))
+:call add(tests, buffers)
+:1wincmd w
+2c
+:let buffers = []
+:windo call add(buffers, bufnr('%'))
+:call add(tests, buffers)
+:only!
+:e! test.out
+:call append(line('$'), map(copy(tests), 'join(v:val, " ")'))
+:w
+:qa!
+ENDTEST
+
+
diff --git a/src/nvim/testdir/test_close_count.ok b/src/nvim/testdir/test_close_count.ok
new file mode 100644
index 0000000000..1cee870487
--- /dev/null
+++ b/src/nvim/testdir/test_close_count.ok
@@ -0,0 +1,23 @@
+6 5 4 2 1
+5 4 2 1
+5 4 2
+5 2
+7 5 2
+7 5
+
+13 12 11 10 9 1
+13 12 11 9 1
+12 11 9 1
+12 11 9
+12 9
+15 12 9
+15 12
+
+20 19 18 17 16
+20 19 18 16
+20 18 16
+
+25 24 23 21 1
+24 23 21 1
+24 23 21
+24 21
diff --git a/src/nvim/window.c b/src/nvim/window.c
index 4f31c09eeb..90f46c3410 100644
--- a/src/nvim/window.c
+++ b/src/nvim/window.c
@@ -151,14 +151,20 @@ 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 + 4, sizeof(cbuf) - 5, "%ld", Prenum);
+ do_cmdline_cmd(cbuf);
break;
/* close preview window */
@@ -183,7 +189,10 @@ newwindow:
case Ctrl_O:
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 */