diff options
author | Bram Moolenaar <Bram@vim.org> | 2012-07-06 18:27:39 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2012-07-06 18:27:39 +0200 |
commit | 8cb8dca2f0683a29a2cb441a8cd995d25c29d79c (patch) | |
tree | 5f470668d9ab29bac417a4d2083ebb8bb3cdb008 /src/ex_docmd.c | |
parent | 0306ac33a53114113825242d22d103ee0e3504f9 (diff) | |
download | vim-git-8cb8dca2f0683a29a2cb441a8cd995d25c29d79c.tar.gz |
updated for version 7.3.591v7.3.591
Problem: Can only move to a tab by absolute number.
Solution: Move a number of tabs to the left or the right. (Lech Lorens)
Diffstat (limited to 'src/ex_docmd.c')
-rw-r--r-- | src/ex_docmd.c | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 6740a51da..cc80c14b7 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -7478,7 +7478,42 @@ ex_tabnext(eap) ex_tabmove(eap) exarg_T *eap; { - tabpage_move(eap->addr_count == 0 ? 9999 : (int)eap->line2); + int tab_number = 9999; + + if (eap->arg && *eap->arg != NUL) + { + char_u *p = eap->arg; + int relative = 0; /* argument +N/-N means: move N places to the + * right/left relative to the current position. */ + + if (*eap->arg == '-') + { + relative = -1; + p = eap->arg + 1; + } + else if (*eap->arg == '+') + { + relative = 1; + p = eap->arg + 1; + } + else + p = eap->arg; + + if (p == skipdigits(p)) + { + /* No numbers as argument. */ + eap->errmsg = e_invarg; + return; + } + + 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; + + tabpage_move(tab_number); } /* |