No vim, como posso alternar rapidamente entre guias?

126

No Gnome-terminal, que pode apenas pressionar Alt+ ( 1, 2, 3, etc.) para mudar para guias específicas. Também posso usar Ctrl+ ( PgUp/ PgDn) para percorrer as guias (reconhecidamente menos conveniente, mas pode ser remapeado).

Se eu quiser usar as guias vim em vez das guias do terminal gnome, digitar :tabne :tabpé bastante complicado. Eu poderia mapeá-los para atalhos de teclado, mas isso ainda é muito menos conveniente do que pular diretamente para a guia 4 com Alt+ 4.

Existe uma maneira mais rápida de alternar entre as guias no vim?

Mateus
fonte

Respostas:

210

Próxima guia: gt

Guia anterior: gT

Guia numerada: nnngt

efémero
fonte
1
Eu sei que posso digitar nnn g t, mas quero fazê-lo rapidamente , Alt + nnnou seja, ou Ctrl + nnn. Mas Alt + njá é adotado pelo gnome-terminal, e a ligação a Ctrl + nparece não ter nenhum efeito.
Matthew
6
E o mapeamento de teclas de função nnn g t? Por exemplo :map <F2> 2gt,. Há o problema que <F1>muitas vezes é mapeado pelo GNOME para sua instalação de ajuda. Ou você poderia escolher alguma chave que você não usa com freqüência no modo normal, dizem que a vírgula, e mapeá-lo como este: :map , gt. Depois 1,, você será levado para a guia 1, 2,para a guia 2 e assim por diante.
precisa saber é o seguinte
2
Eu achei muito conveniente usar '<' e '>'
Igor Stoppa 22/02
Role para baixo para obter uma resposta melhor ..
The Vivandiere
41

Por que não fazer uso do seu líder (meu líder está mapeado para 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>

Você pode usar as configurações abaixo para alternar entre a guia atual e a última ativa (aqui está mapeada para Ctrl+ L, ou seja, <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>
inevitável
fonte
2
Você precisa au TabLeave * let g:lasttab = tabpagenr()para c-lfuncionar: stackoverflow.com/questions/2119754/...
Ciro Santilli新疆改造中心法轮功六四事件
1
Eu adicionaria <leader>h/lpara gTegt
Brenden 07/04
25

Esta é a maneira mais fácil que eu encontrei, de alternar entre as guias de maneira mais rápida e simples.
Adicione as próximas linhas ao seu .vimrc e aproveite, mais truques sobre as guias do vim aqui .

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

Agora você pode usar Ctrl para ir para a esquerda e Ctrl para a direita.

Ou apenas use:
1gtpara ir para a guia um,
2gtpara ir para a guia dois,
3gtpara ir para a guia três, etc ... agora você tem a ideia.

Arnold Gandarillas
fonte
Eu acho que esta é a melhor resposta aqui. Muito conveniente para ter. Acabei de desativar as combinações de teclas do sistema no OS X para torná-las independentes do sistema.
Léo Léopold Hertz #
1
Use as setas do teclado para diminuir a velocidade. Eu os tenho desativado
Ask and Learn
Sim ... Melhor resposta!
The Vivandiere
Infelizmente "Ctrl" me deu problemas no vmplayer, então mudei para as teclas "Backspace" e "Enter".
Boris Däppen
Usuários de Mac: você pode precisar desativar o controle da missão atalhos espaços do teclado padrão: stackoverflow.com/questions/15719135/...
azatar
15

Como estou em um Mac e não estou usando o MacVim (mas o vim simples em um terminal), tive algumas dificuldades com combinações de teclas que não foram enviadas para o terminal.

A maneira mais compatível (e para mim mais confortável) de trocar de guia rapidamente vem do site Vim Wikia .

Coloque no seu .vimrcarquivo:

nnoremap H gT
nnoremap L gt

Agora Shift-h(maiúscula H) e Shift-l(maiúscula L) o alternam rapidamente entre as guias e seguem a convenção de que he lcorrespondem à esquerda e à direita no vim em um teclado qwerty comum.

Stefan Magnuson
fonte
Adoro esta solução, intuitiva e semelhante a vim. Não são necessárias teclas de seta.
Ivan Ivković 11/04
Concordo. Uma solução muito agradável
j sad
Esta é realmente uma solução intuitiva. Obrigado!
LeOn - Han Li
2

(Infelizmente) o vim também usa CtrlPgDn/ PgUppara percorrer as guias. Você precisará usar mappara mapear tabn/ tabppara algo utilizável.

Ignacio Vazquez-Abrams
fonte
2

Se você estiver usando gvim ou similar (ou seja, algo fora do terminal), pode imitar o gnome-terminalcomportamento descrito com:

" 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>

Então alt-1pula para a primeira guia, etc. Mas alt-9pula para a última guia (como no Chrome).

Você pode if has("gui_running")incluir isso (embora isso não pareça funcionar com o Neovim) ou colocá-lo .gvimrc.

Joe Freeman
fonte
2

Adicione-os ao .vimrc para ativar as teclas de atalho da navegação por guias:

<ctrl-l> alternar entre duas guias mais recentes;

<ctrl-j/k> vá para a última / próxima guia;

<ctrl-t> abra uma nova guia.

" 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
fonte
É possível mapear <Ctrl> - <Tab> para a última função da guia de alternância. Eu tentei nnoremap <silent> <C-Tab> :exe "tabn ".g:lasttab<cr>e vnoremap <silent> <C-Tab> :exe "tabn ".g:lasttab<cr>sem sorte.
zzeroo 18/09