No vim, como posso alternar rapidamente entre as guias?

94

No gnome-terminal, eu posso apenas pressionar Alt + ( 1 , 2 , 3 , etc .) para mudar para abas específicas. Eu também posso usar Ctrl + ( PgUp / PgDn ) para percorrer as abas (reconhecidamente menos conveniente, mas pode ser remapeada).

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

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

    
por Matthew 11.04.2012 / 03:06

8 respostas

161

Guia Próxima: g t

Guia anterior: g T

Guia numerada: nnn g t

    
por 11.04.2012 / 04:19
33

Por que não fazer uso de seu líder (meu líder é mapeado para Espaço ):

" 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 ela é 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>
    
por 12.11.2013 / 21:59
13

Esta é a maneira mais fácil que encontrei de alternar entre as guias de maneira mais rápida e simples.
Adicione as próximas linhas ao seu .vimrc e divirta-se, 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 ir para a direita.

Ou apenas use: 1gt para ir para a aba um, e 2gt para a aba dois, e 3gt para ir ao tab 3, etc ... agora você tem a idéia.

    
por 03.03.2015 / 15:21
10

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

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

Coloque no seu arquivo .vimrc :

nnoremap H gT
nnoremap L gt

Agora, Shift-h (capital H) e Shift-l (capital L) alternarão rapidamente entre as guias e seguirão a convenção de que h e l correspondem à esquerda e à direita no vim em um teclado qwerty normal .

    
por 03.07.2016 / 12:59
1

(Infelizmente) o vim também usa Ctrl PgDn / PgUp para percorrer as abas. Você precisará usar map para mapear tabn / tabp para algo utilizável.

    
por 11.04.2012 / 03:25
0

Se você estiver usando o gvim ou algo similar (ou seja, algo fora do terminal), poderá imitar o comportamento gnome-terminal com o qual você descreve:

" 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-1 pula para a primeira guia, etc. Mas alt-9 pula para a última guia (como no Chrome).

Você pode querer quebrar isso em if has("gui_running") (embora isso não pareça funcionar com Neovim), ou colocar isso em .gvimrc .

    
por 02.10.2017 / 17:32
0

Aqui estão alguns mapeamentos fáceis para o seu .vimrc:

nnoremap <C-h> :tabprev
nnoremap <C-l> :tabnext

Prós:

  • Não é possível mover da linha inicial (permito ctrl e caps lock)
  • Reutiliza as chaves "esquerda" e "direita"
  • Parece similar a trocar as guias do navegador
por 13.01.2018 / 00:17
0

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

<ctrl-l> toggle between 2 most recent tabs;

<ctrl-j/k> goto the last/next tab;

<ctrl-t> open a new tab.

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

    
por 05.11.2018 / 03:25