changeset 34639:ceee63c7f7aa v9.1.0205

patch 9.1.0205: Cannot use modifiers before :-Ntabmove Commit: https://github.com/vim/vim/commit/076faac5378cf517baa8c331c57488d39efadec0 Author: zeertzjq <zeertzjq@outlook.com> Date: Mon Mar 25 16:41:06 2024 +0100 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>
author Christian Brabandt <cb@256bit.org>
date Mon, 25 Mar 2024 16:45:06 +0100
parents 857eb73fb6a7
children 0b9df520fe83
files runtime/doc/tabpage.txt src/ex_docmd.c src/testdir/test_tabpage.vim src/version.c
diffstat 4 files changed, 25 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/tabpage.txt
+++ b/runtime/doc/tabpage.txt
@@ -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
@@ -196,7 +196,7 @@ gt					*i_CTRL-<PageDown>* *i_<C-PageDow
 		    :1tabnext	" go to the first tab page
 		    :$tabnext	" go to the last tab page
 		    :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 -1	" as above
 		    :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
 		make the current tab page the first one.  N is counted before
 		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. >
 		    :.tabmove	" do nothing
 		    :-tabmove	" move the tab page to the left
 		    :+tabmove	" move the tab page to the right
-		    :0tabmove	" move the tab page to the beginning of the tab
-				" list
+		    :0tabmove	" move the tab page to the first
 		    :tabmove 0	" as above
 		    :tabmove	" move the tab page to the last
 		    :$tabmove	" as above
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -6317,11 +6317,19 @@ get_tabpage_arg(exarg_T *eap)
 	else
 	{
 	    tab_number = eap->line2;
-	    if (!unaccept_arg0 && *skipwhite(*eap->cmdlinep) == '-')
+	    if (!unaccept_arg0)
 	    {
-		--tab_number;
-		if (tab_number < unaccept_arg0)
-		    eap->errmsg = _(e_invalid_range);
+		char_u *cmdp = eap->cmd;
+
+		while (--cmdp > *eap->cmdlinep
+			&& (VIM_ISWHITE(*cmdp) || VIM_ISDIGIT(*cmdp)))
+		    ;
+		if (*cmdp == '-')
+		{
+		    --tab_number;
+		    if (tab_number < unaccept_arg0)
+			eap->errmsg = _(e_invalid_range);
+		}
 	    }
 	}
     }
--- a/src/testdir/test_tabpage.vim
+++ b/src/testdir/test_tabpage.vim
@@ -117,10 +117,16 @@ function Test_tabpage()
   call assert_equal(3, tabpagenr())
   +3tabmove
   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
   call assert_equal(2, tabpagenr())
+  " The following are a no-op
   tabmove 2
   call assert_equal(2, tabpagenr())
   2tabmove
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    205,
+/**/
     204,
 /**/
     203,