forked from aniani/vim
patch 7.4.709
Problem: ":tabmove" does not work as documented. Solution: Make it work consistently. Update documentation and add tests. (Hirohito Higashi)
This commit is contained in:
@@ -8145,7 +8145,7 @@ ex_tabnext(eap)
|
||||
ex_tabmove(eap)
|
||||
exarg_T *eap;
|
||||
{
|
||||
int tab_number = 9999;
|
||||
int tab_number;
|
||||
|
||||
if (eap->arg && *eap->arg != NUL)
|
||||
{
|
||||
@@ -8166,19 +8166,38 @@ ex_tabmove(eap)
|
||||
else
|
||||
p = eap->arg;
|
||||
|
||||
if (p == skipdigits(p))
|
||||
if (relative == 0)
|
||||
{
|
||||
/* No numbers as argument. */
|
||||
eap->errmsg = e_invarg;
|
||||
return;
|
||||
if (STRCMP(p, "$") == 0)
|
||||
tab_number = LAST_TAB_NR;
|
||||
else if (p == skipdigits(p))
|
||||
{
|
||||
/* No numbers as argument. */
|
||||
eap->errmsg = e_invarg;
|
||||
return;
|
||||
}
|
||||
else
|
||||
tab_number = getdigits(&p);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (*p != NUL)
|
||||
tab_number = getdigits(&p);
|
||||
else
|
||||
tab_number = 1;
|
||||
tab_number = tab_number * relative + tabpage_index(curtab);
|
||||
if (relative == -1)
|
||||
--tab_number;
|
||||
}
|
||||
|
||||
tab_number = getdigits(&p);
|
||||
if (relative != 0)
|
||||
tab_number = tab_number * relative + tabpage_index(curtab) - 1;;
|
||||
}
|
||||
else if (eap->addr_count != 0)
|
||||
{
|
||||
tab_number = eap->line2;
|
||||
if (**eap->cmdlinep == '-')
|
||||
--tab_number;
|
||||
}
|
||||
else
|
||||
tab_number = LAST_TAB_NR;
|
||||
|
||||
tabpage_move(tab_number);
|
||||
}
|
||||
|
Reference in New Issue
Block a user