En vim, ¿cómo puedo cambiar rápidamente entre pestañas?

126

En gnome-terminal, puedo simplemente pulse Alt+ ( 1, 2, 3, etc.) para cambiar a lengüetas específicas. También puedo usar Ctrl+ ( PgUp/ PgDn) para recorrer las pestañas (es cierto que es menos conveniente, pero se puede reasignar).

Si quiero usar pestañas vim en lugar de pestañas gnome-terminal, escribir :tabny :tabpes bastante engorroso. Podría asignarlos a métodos abreviados de teclado, pero eso es mucho menos conveniente que saltar directamente a la pestaña 4 con Alt+ 4.

¿Hay una forma más rápida de cambiar entre pestañas en vim?

Mateo
fuente

Respuestas:

210

Siguiente pestaña: gt

Pestaña anterior: gT

Pestaña numerada: nnngt

efímero
fuente
1
Sé que podría escribir nnn g t, pero quiero hacerlo rápidamente , es decir, Alt + nnno Ctrl + nnn. Pero Alt + nya está tomado por gnome-terminal, y la unión a Ctrl + nno parece tener ningún efecto.
Mateo
66
¿Qué pasa con la asignación de teclas de función nnn g t? Ej :map <F2> 2gt. Existe el problema que a <F1>menudo GNOME asigna a su servicio de ayuda. O usted podría optar por alguna clave no se utiliza a menudo en modo normal, decir la coma, y el mapa de esta manera: :map , gt. Luego 1,lo llevará a la pestaña 1, 2,a la pestaña 2, y así sucesivamente.
garyjohn
2
Me pareció muy conveniente usar '<' y '>'
Igor Stoppa
Desplácese hacia abajo para obtener una mejor respuesta ..
The Vivandiere
41

¿Por qué no hacer uso de su líder (mi líder está asignado a 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>

Puede usar la configuración a continuación para alternar entre la pestaña activa actual y la última (aquí se asigna a Ctrl+ L, es decir, <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>
inestable
fuente
2
Es necesario au TabLeave * let g:lasttab = tabpagenr()para c-ltrabajar: stackoverflow.com/questions/2119754/...
Ciro Santilli新疆改造中心法轮功六四事件
1
Agregaría <leader>h/lpara gTygt
Brenden
25

Esta es la forma más fácil que encontré, para cambiar entre pestañas más rápido y simple.
Agregue las siguientes líneas a su .vimrc y disfrútelo, más trucos sobre las pestañas vim aquí .

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

Ahora puedes usar Ctrl para ir a la izquierda y Ctrl a la derecha.

O simplemente use:
1gtpara ir a la pestaña uno,
2gtpara ir a la pestaña dos,
3gtpara ir a la pestaña tres, etc. Ahora tiene la idea.

Arnold Gandarillas
fuente
Creo que esta es la mejor respuesta aquí. Muy conveniente tener. Acabo de deshabilitar esas combinaciones de teclas del sistema en OS X para que sean independientes del sistema.
Léo Léopold Hertz 준영
1
Usar las teclas de flecha lo retrasará. Los tengo deshabilitados
Pregunte y aprenda
Sí ... ¡La mejor respuesta!
The Vivandiere
Lamentablemente "Ctrl" me dio problemas en vmplayer, así que cambié a las teclas "Retroceso" y "Enter".
Boris Däppen
Usuarios de Mac: es posible que deba deshabilitar los atajos de teclado predeterminados de espacios de Control de misión: stackoverflow.com/questions/15719135/…
azatar
15

Como estoy en una Mac y no estoy usando MacVim (pero vim simple dentro de una terminal) he tenido algunas dificultades con las combinaciones de teclas que no se envían a la terminal.

La forma más compatible (y para mí más cómoda) de cambiar de pestaña rápidamente proviene del sitio Vim Wikia .

Colocar en su .vimrcarchivo:

nnoremap H gT
nnoremap L gt

Ahora Shift-h(capital H) y Shift-l(L mayúscula) se cambiará rápidamente entre pestañas, y sigue la convención de que he lcorresponden a izquierda y derecha en vim en un teclado QWERTY normal.

Stefan Magnuson
fuente
Me encanta esta solución, intuitiva y vim. No se necesitan teclas de flecha.
Ivan Ivković
Estoy de acuerdo. Una muy buena solución
j triste
Esta es realmente una solución intuitiva. ¡Gracias!
LeOn - Han Li
2

(Desafortunadamente) vim también usa CtrlPgDn/ PgUppara recorrer las pestañas. Tendrá que usar mappara asignar tabn/ tabpa algo utilizable.

Ignacio Vazquez-Abrams
fuente
2

Si está utilizando gvim o similar (es decir, algo fuera del terminal), puede imitar el gnome-terminalcomportamiento que describe con:

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

Entonces alt-1salta a la primera pestaña, etc. Pero alt-9salta a la última pestaña (como en Chrome).

Es posible que desee envolver esto if has("gui_running")(aunque esto no parece funcionar con Neovim), o poner esto .gvimrc.

Joe Freeman
fuente
2

Agregue estos a .vimrc para habilitar las teclas de acceso rápido de navegación de pestañas:

<ctrl-l> alternar entre las 2 pestañas más recientes;

<ctrl-j/k> Ir a la última / siguiente pestaña;

<ctrl-t> Abre una nueva pestaña.

" 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
fuente
¿Es posible asignar <Ctrl> - <Tab> a la última función de alternar pestaña. Lo he intentado nnoremap <silent> <C-Tab> :exe "tabn ".g:lasttab<cr>y vnoremap <silent> <C-Tab> :exe "tabn ".g:lasttab<cr>sin suerte.
zzeroo