Dans vim, comment puis-je basculer rapidement entre les onglets?

126

Dans gnome-terminal, je peux appuyer sur Alt+ ( 1, 2, 3, etc.) pour passer à des onglets spécifiques. Je peux aussi utiliser Ctrl+ ( PgUp/ PgDn) pour parcourir les onglets (certes moins pratique, mais cela peut être remappé).

Si je veux utiliser vim tabs au lieu des onglets gnome-terminal, taper :tabnet :tabpest assez lourd. Je pouvais les mapper avec des raccourcis clavier, mais c'est quand même beaucoup moins pratique que de sauter directement à l'onglet 4 avec Alt+ 4.

Existe-t-il un moyen plus rapide de basculer entre les onglets dans vim?

Matthieu
la source

Réponses:

210

Onglet suivant: gt

Onglet précédent: gT

Onglet numéroté: nnngt

éphémère
la source
1
Je sais que je pourrais taper nnn g t, mais je veux le faire rapidement , c'est Alt + nnn-à- dire ou Ctrl + nnn. Mais Alt + nest déjà pris par gnome-terminal, et la liaison à Ctrl + nne semble avoir aucun effet.
Matthew
6
Qu'en est-il des touches de fonction de mappage nnn g t? P. ex :map <F2> 2gt. Il y a le problème qui <F1>est souvent mis en correspondance par GNOME avec son service d'aide. Ou vous pouvez choisir une clé que vous n'utilisez pas souvent en mode normal, par exemple la virgule, et la carte comme ceci: :map , gt. Puis 1,vous amène à l'onglet 1, 2,à l'onglet 2, et ainsi de suite.
garyjohn
2
J'ai trouvé très pratique d'utiliser '<' et '>'
Igor Stoppa le
Faites défiler la liste pour une meilleure réponse ..
The Vivandiere 9/09/2016
41

Pourquoi ne pas utiliser votre chef (mon chef est sur Space):

" Go to tab by number
noremap <leader>1 1gt
noremap <leader>2 2gt
noremap <leader>3 3gt
noremap <leader>4 4gt
noremap <leader>5 5gt
noremap <leader>6 6gt
noremap <leader>7 7gt
noremap <leader>8 8gt
noremap <leader>9 9gt
noremap <leader>0 :tablast<cr>

Vous pouvez utiliser les paramètres ci-dessous pour basculer entre le dernier et le dernier onglet actif (ici, il est associé à Ctrl+ L, c.-à-d. <c-l>):

" Go to last active tab

au TabLeave * let g:lasttab = tabpagenr()
nnoremap <silent> <c-l> :exe "tabn ".g:lasttab<cr>
vnoremap <silent> <c-l> :exe "tabn ".g:lasttab<cr>
improbable
la source
2
Vous avez besoin au TabLeave * let g:lasttab = tabpagenr()pour c-ltravailler: stackoverflow.com/questions/2119754/...
Ciro Santilli新疆改造中心法轮功六四事件
1
J'ajouterais <leader>h/lpour gTetgt
Brenden le
25

C’est le moyen le plus simple que j’ai trouvé de basculer entre les onglets plus rapidement et plus simplement.
Ajoutez les lignes suivantes à votre fichier .vimrc et profitez-en, voici d' autres astuces concernant les onglets vim .

nnoremap <C-Left> :tabprevious<CR>
nnoremap <C-Right> :tabnext<CR>

Maintenant, vous pouvez utiliser Ctrl pour aller à gauche et Ctrl aller à droite.

Ou utilisez simplement:
1gtaller à l'onglet un,
2gtaller à l'onglet deux,
3gtaller à l'onglet trois, etc ... maintenant vous avez l'idée.

Arnold Gandarillas
la source
Je pense que c'est la meilleure réponse ici. Très pratique à avoir. Je viens de désactiver ces combinaisons de touches système dans OS X pour les rendre indépendantes du système.
Léo Léopold Hertz
1
Utilisez les touches fléchées pour vous ralentir. Je les ai handicapés
Ask and Learn
Yup ... La meilleure réponse!
La Vivandière le
Malheureusement, "Ctrl" m'a donné des problèmes dans vmplayer, alors j'ai changé pour les touches "Backspace" et "Entrée".
Boris Däppen le
Utilisateurs de Mac: vous devrez peut-être désactiver les raccourcis clavier par défaut des espaces de contrôle de mission: stackoverflow.com/questions/15719135/…
azatar
15

Comme je suis sur un Mac et n'utilise pas MacVim (mais simplement vim dans un terminal), j'ai eu quelques difficultés avec les combinaisons de touches non envoyées au terminal.

Le moyen le plus compatible (et le plus confortable pour moi) de changer d’onglet rapidement provient du site Vim Wikia .

Placez dans votre .vimrcdossier:

nnoremap H gT
nnoremap L gt

Maintenant Shift-h(capitale H) et Shift-l(L majuscule) vous basculer rapidement entre les onglets, et suit la convention qui het lcorrespondent à gauche et à droite dans vim sur un clavier qwerty régulier.

Stefan Magnuson
la source
J'aime cette solution, intuitive et semblable à vim. Pas de touches fléchées nécessaires.
Ivan Ivković
Je suis d'accord. Une très belle solution
j triste
c'est vraiment une solution intuitive. Je vous remercie!
LeOn - Han Li
2

(Malheureusement), vim utilise également CtrlPgDn/ PgUppour parcourir les onglets. Vous aurez besoin d'utiliser mappour mapper tabn/ tabpquelque chose utilisable.

Ignacio Vazquez-Abrams
la source
2

Si vous utilisez gvim ou similaire (par exemple, quelque chose en dehors du terminal), vous pouvez imiter le gnome-terminalcomportement que vous décrivez avec:

" Map alt-x keys to jump to a tab
for i in range(1, 8)
  execute "nmap \<M-" . i . "> " . i . "gt"
endfor
nmap <M-9> :tablast<CR>

Alors alt-1saute au premier onglet, etc. Mais alt-9saute au dernier onglet (comme dans Chrome).

Vous voudrez peut-être envelopper ceci if has("gui_running")(bien que cela ne semble pas fonctionner avec Neovim), ou le mettre dedans .gvimrc.

Joe Freeman
la source
2

Ajoutez-les à .vimrc pour activer les touches de raccourci:

<ctrl-l> basculer entre les 2 derniers onglets;

<ctrl-j/k> allez au dernier / prochain onglet;

<ctrl-t> ouvrez un nouvel onglet.

" tab navigation: Alt or Ctrl+Shift may not work in terminal: " http://vim.wikia.com/wiki/Alternative_tab_navigation " Tab navigation like Firefox: only 'open new tab' works in terminal nnoremap <C-t> :tabnew<CR> inoremap <C-t> <Esc>:tabnew<CR> " move to the previous/next tabpage. nnoremap <C-j> gT nnoremap <C-k> gt " Go to last active tab au TabLeave * let g:lasttab = tabpagenr() nnoremap <silent> <c-l> :exe "tabn ".g:lasttab<cr> vnoremap <silent> <c-l> :exe "tabn ".g:lasttab<cr>

Mengqi Ji
la source
Est-il possible de mapper <Ctrl> - <Tab> à la dernière fonction de tabulation. J'ai essayé nnoremap <silent> <C-Tab> :exe "tabn ".g:lasttab<cr>et vnoremap <silent> <C-Tab> :exe "tabn ".g:lasttab<cr>sans chance.
Zzeroo le