1
0
forked from aniani/vim

patch 9.1.0205: Cannot use modifiers before :-Ntabmove

Problem:  Cannot use modifiers before :-Ntabmove.
Solution: Check backwards from the command instead of checking from the
          start of the command line. Slightly adjust docs to make them
          more consistent (zeertzjq).

closes: #14289

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
zeertzjq 2024-03-25 16:41:06 +01:00 committed by Christian Brabandt
parent 6dcf59b89f
commit 076faac537
No known key found for this signature in database
GPG Key ID: F3F92DA383FDDE09
4 changed files with 25 additions and 10 deletions

View File

@ -1,4 +1,4 @@
*tabpage.txt* For Vim version 9.1. Last change: 2022 Feb 02 *tabpage.txt* For Vim version 9.1. Last change: 2024 Mar 25
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -196,7 +196,7 @@ gt *i_CTRL-<PageDown>* *i_<C-PageDown>*
:1tabnext " go to the first tab page :1tabnext " go to the first tab page
:$tabnext " go to the last tab page :$tabnext " go to the last tab page
:tabnext $ " as above :tabnext $ " as above
:tabnext # " go to the last accessed tab page :tabnext # " go to the last accessed tab page
:tabnext - " go to the previous tab page :tabnext - " go to the previous tab page
:tabnext -1 " as above :tabnext -1 " as above
:tabnext + " go to the next tab page :tabnext + " go to the next tab page
@ -248,13 +248,12 @@ REORDERING TAB PAGES:
Move the current tab page to after tab page N. Use zero to Move the current tab page to after tab page N. Use zero to
make the current tab page the first one. N is counted before make the current tab page the first one. N is counted before
the move, thus if the second tab is the current one, the move, thus if the second tab is the current one,
`:tabmove 1` and `:tabmove 2` have no effect. `:tabmove 1` and `:tabmove 2` have no effect.
Without N the tab page is made the last one. > Without N the tab page is made the last one. >
:.tabmove " do nothing :.tabmove " do nothing
:-tabmove " move the tab page to the left :-tabmove " move the tab page to the left
:+tabmove " move the tab page to the right :+tabmove " move the tab page to the right
:0tabmove " move the tab page to the beginning of the tab :0tabmove " move the tab page to the first
" list
:tabmove 0 " as above :tabmove 0 " as above
:tabmove " move the tab page to the last :tabmove " move the tab page to the last
:$tabmove " as above :$tabmove " as above

View File

@ -6317,11 +6317,19 @@ get_tabpage_arg(exarg_T *eap)
else else
{ {
tab_number = eap->line2; tab_number = eap->line2;
if (!unaccept_arg0 && *skipwhite(*eap->cmdlinep) == '-') if (!unaccept_arg0)
{ {
--tab_number; char_u *cmdp = eap->cmd;
if (tab_number < unaccept_arg0)
eap->errmsg = _(e_invalid_range); while (--cmdp > *eap->cmdlinep
&& (VIM_ISWHITE(*cmdp) || VIM_ISDIGIT(*cmdp)))
;
if (*cmdp == '-')
{
--tab_number;
if (tab_number < unaccept_arg0)
eap->errmsg = _(e_invalid_range);
}
} }
} }
} }

View File

@ -117,10 +117,16 @@ function Test_tabpage()
call assert_equal(3, tabpagenr()) call assert_equal(3, tabpagenr())
+3tabmove +3tabmove
call assert_equal(6, tabpagenr()) call assert_equal(6, tabpagenr())
silent -tabmove
call assert_equal(5, tabpagenr())
silent -2 tabmove
call assert_equal(3, tabpagenr())
silent -2 tabmove
call assert_equal(1, tabpagenr())
" The following are a no-op
norm! 2gt norm! 2gt
call assert_equal(2, tabpagenr()) call assert_equal(2, tabpagenr())
" The following are a no-op
tabmove 2 tabmove 2
call assert_equal(2, tabpagenr()) call assert_equal(2, tabpagenr())
2tabmove 2tabmove

View File

@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
205,
/**/ /**/
204, 204,
/**/ /**/