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?

Réponses:


210

Onglet suivant: gt

Onglet précédent: gT

Onglet numéroté: nnngt


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>

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.


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.


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.


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.


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>


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.