patch 7.4.2237
Problem:    Can't use "." and "$" with ":tab".
Solution:   Support a range for ":tab". (Hirohito Higashi)
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 1a7fbfa..9f1d227 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -1858,9 +1858,7 @@
 /*
  * 2. Handle command modifiers.
  */
-	p = ea.cmd;
-	if (VIM_ISDIGIT(*ea.cmd))
-	    p = skipwhite(skipdigits(ea.cmd));
+	p = skip_range(ea.cmd, NULL);
 	switch (*p)
 	{
 	    /* When adding an entry, also modify cmd_exists(). */
@@ -1992,10 +1990,19 @@
 	    case 't':	if (checkforcmd(&p, "tab", 3))
 			{
 #ifdef FEAT_WINDOWS
-			    if (vim_isdigit(*ea.cmd))
-				cmdmod.tab = atoi((char *)ea.cmd) + 1;
-			    else
+			    long tabnr = get_address(&ea, &ea.cmd, ADDR_TABS,
+								ea.skip, FALSE);
+			    if (tabnr == MAXLNUM)
 				cmdmod.tab = tabpage_index(curtab) + 1;
+			    else
+			    {
+				if (tabnr < 0 || tabnr > LAST_TAB_NR)
+				{
+				    errormsg = (char_u *)_(e_invrange);
+				    goto doend;
+				}
+				cmdmod.tab = tabnr + 1;
+			    }
 			    ea.cmd = p;
 #endif
 			    continue;
diff --git a/src/testdir/test_tabpage.vim b/src/testdir/test_tabpage.vim
index e6b85d6..f1c41e9 100644
--- a/src/testdir/test_tabpage.vim
+++ b/src/testdir/test_tabpage.vim
@@ -186,4 +186,36 @@
   bw!
 endfunction
 
+function Test_tabpage_with_tab_modifier()
+  for n in range(4)
+    tabedit
+  endfor
+
+  function s:check_tab(pre_nr, cmd, post_nr)
+    exec 'tabnext ' . a:pre_nr
+    exec a:cmd
+    call assert_equal(a:post_nr, tabpagenr())
+    call assert_equal('help', &filetype)
+    helpclose
+  endfunc
+
+  call s:check_tab(1, 'tab help', 2)
+  call s:check_tab(1, '3tab help', 4)
+  call s:check_tab(1, '.tab help', 2)
+  call s:check_tab(1, '.+1tab help', 3)
+  call s:check_tab(1, '0tab help', 1)
+  call s:check_tab(2, '+tab help', 4)
+  call s:check_tab(2, '+2tab help', 5)
+  call s:check_tab(4, '-tab help', 4)
+  call s:check_tab(4, '-2tab help', 3)
+  call s:check_tab(3, '$tab help', 6)
+  call assert_fails('99tab help', 'E16:')
+  call assert_fails('+99tab help', 'E16:')
+  call assert_fails('-99tab help', 'E16:')
+
+  delfunction s:check_tab
+  tabonly!
+  bw!
+endfunction
+
 " vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 8b86531..fe60c32 100644
--- a/src/version.c
+++ b/src/version.c
@@ -764,6 +764,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2237,
+/**/
     2236,
 /**/
     2235,