diff options
author | Felipe Morales <hel.sheep@gmail.com> | 2015-01-10 20:27:17 -0300 |
---|---|---|
committer | Felipe Morales <hel.sheep@gmail.com> | 2015-04-28 23:08:30 -0300 |
commit | 86330fdd3f39a8975b25b7050a3d02b77a442057 (patch) | |
tree | 51f60759b67fec7740cc7a6adbb9c2bac4395b73 | |
parent | 6a8862ded4d6f1693ac591ac8e47d1acbd044c49 (diff) | |
download | rneovim-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.txt | 49 | ||||
-rw-r--r-- | runtime/doc/windows.txt | 81 | ||||
-rw-r--r-- | scripts/genex_cmds.lua | 5 | ||||
-rw-r--r-- | src/nvim/ex_cmds.lua | 541 | ||||
-rw-r--r-- | src/nvim/ex_cmds_defs.h | 10 | ||||
-rw-r--r-- | src/nvim/ex_docmd.c | 371 | ||||
-rw-r--r-- | src/nvim/testdir/Makefile | 4 | ||||
-rw-r--r-- | src/nvim/testdir/test_argument_count.in | 47 | ||||
-rw-r--r-- | src/nvim/testdir/test_argument_count.ok | 13 | ||||
-rw-r--r-- | src/nvim/testdir/test_close_count.in | 156 | ||||
-rw-r--r-- | src/nvim/testdir/test_close_count.ok | 23 | ||||
-rw-r--r-- | src/nvim/window.c | 15 |
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 */ |