fix(cmd): make :-tabmove work with modifiers (#18447)

`:tabmove` takes either an argument (`:tabmove -`) or an address (`:-tabmove`).

The code assumed that `:tabmove` is the first command on the cmdline, but that
is not the case when using additional modifiers like `:silent`.

Make the addr parsing more robust by searching the command first, then going
back to check for a potential address `-`.
This commit is contained in:
Marco Hinz
2022-05-12 16:43:20 +02:00
committed by GitHub
parent 78a1e6bc00
commit 8fba428bc6
2 changed files with 13 additions and 2 deletions

View File

@@ -5248,7 +5248,9 @@ static int get_tabpage_arg(exarg_T *eap)
tab_number = 0;
} else {
tab_number = (int)eap->line2;
if (!unaccept_arg0 && *skipwhite(*eap->cmdlinep) == '-') {
char *cmdp = eap->cmd;
while (--cmdp > *eap->cmdlinep && (*cmdp == ' ' || ascii_isdigit(*cmdp))) {}
if (!unaccept_arg0 && *cmdp == '-') {
tab_number--;
if (tab_number < unaccept_arg0) {
eap->errmsg = e_invarg;