Respuestas:
Puede reubicar una pestaña :tabm
utilizando argumentos absolutos relativos o de índice cero.
absoluto:
:tabm i
relativo:
:tabm +i
:tabm -i
Es una característica relativamente nueva. Entonces, si no funciona, intente actualizar su vim.
:tabm
acepta argumentos relativos en vim 7.3.
¿Te refieres a mover la pestaña actual? Esto funciona usando tabmove.
:tabm[ove] [N] *:tabm* *:tabmove*
Move the current tab page to after tab page N. Use zero to
make the current tab page the first one. Without N the tab
page is made the last one.
Tengo dos combinaciones de teclas que mueven mi pestaña actual, una hacia la izquierda o la derecha. ¡Muy útil!
EDITAR: Aquí está mi macro VIM. No soy un gran codificador de ViM , así que tal vez podría hacerse mejor, pero así es como funciona para mí:
" Move current tab into the specified direction.
"
" @param direction -1 for left, 1 for right.
function! TabMove(direction)
" get number of tab pages.
let ntp=tabpagenr("$")
" move tab, if necessary.
if ntp > 1
" get number of current tab page.
let ctpn=tabpagenr()
" move left.
if a:direction < 0
let index=((ctpn-1+ntp-1)%ntp)
else
let index=(ctpn%ntp)
endif
" move tab page.
execute "tabmove ".index
endif
endfunction
Después de esto, puede vincular claves, por ejemplo, así en su .vimrc
:
map <F9> :call TabMove(-1)<CR>
map <F10> :call TabMove(1)<CR>
Ahora puede mover su pestaña actual presionando F9 o F10.
Estaba buscando lo mismo y después de algunas publicaciones encontré una forma más simple que una función:
:execute "tabmove" tabpagenr() # Move the tab to the right
:execute "tabmove" tabpagenr() - 2 # Move the tab to the left
El tabpagenr () devuelve la posición real ficha y tabmove utiliza índices.
Mapeé la derecha a Ctrl + L y la izquierda a Ctrl + H:
map <C-H> :execute "tabmove" tabpagenr() - 2 <CR>
map <C-J> :execute "tabmove" tabpagenr() <CR>
:execute "tabmove" tabpagenr() + 1 <CR>
para moverme a la derecha. Para MacVim 8.0.1420 (144) .
:tabm n
Donde n
hay un número que denota la posición (comenzando desde cero)
Creo que una mejor solución es mover la pestaña hacia la izquierda o hacia la derecha a su posición actual en lugar de calcular el valor numérico de la nueva posición en la que la quieres.
noremap <A-Left> :-tabmove<cr>
noremap <A-Right> :+tabmove<cr>
Con los mapas de teclas anteriores, podrá mover la pestaña actual:
Además de las excelentes sugerencias en otras respuestas, también puede arrastrar las pestañas con el mouse para moverlas, si tiene habilitado el soporte para mouse.
Esto está activado de forma predeterminada en MacVim y otras implementaciones de GUI vim, ya sea utilizando las pestañas de widget de GUI o las pestañas de estilo de terminal en modo GUI.
También funciona en modo tty puro Vim, si tiene set mouse=a
y tiene un terminal adecuado (xterm y la mayoría de sus emuladores, como gnome-terminal, Terminal.app, iTerm2 y PuTTY / KiTTY, por nombrar una vista). Tenga en cuenta que los clics del mouse más allá de la columna 222 también requieren set ttymouse=sgr
; Ver en Vim, ¿por qué mi mouse no pasa de la columna 220? para antecedentes sobre eso.
He escrito un complemento llamado vim-tabber que proporciona algunas funcionalidades adicionales para intercambiar pestañas, cambiarlas y agregar a las capacidades de los comandos de manipulación de pestañas incorporados, sin dejar de ser en gran medida compatible con las funciones incorporadas. Incluso si elige no usar el complemento, hay información general sobre el uso de pestañas en el archivo README.
Por alguna razón, la respuesta de la función dejó de funcionar para mí. Sospecho un conflicto con vim-ctrlspace . Independientemente, la matemática en la respuesta de la función es innecesaria, ya que Vim puede mover pestañas de izquierda a derecha con funciones integradas. Solo tenemos que manejar el caso de envoltura , porque Vim no es fácil de usar.
" Move current tab into the specified direction.
"
" @param direction -1 for left, 1 for right.
function! TabMove(direction)
let s:current_tab=tabpagenr()
let s:total_tabs = tabpagenr("$")
" Wrap to end
if s:current_tab == 1 && a:direction == -1
tabmove
" Wrap to start
elseif s:current_tab == s:total_tabs && a:direction == 1
tabmove 0
" Normal move
else
execute (a:direction > 0 ? "+" : "-") . "tabmove"
endif
echo "Moved to tab " . tabpagenr() . " (previosuly " . s:current_tab . ")"
endfunction
" Move tab left or right using Command-Shift-H or L
map <D-H> :call TabMove(-1)<CR>
map <D-L> :call TabMove(1)<CR>
-tabm
y +tabm
en mi vim 7.4 no mueven correctamente las pestañas. Además, mi :help tabm
no enumera esto como una sintaxis válida. Así que reemplacé el último else execute ...endif
con el elseif a:direction == 1 execute "tabmove" s:current_tab else execute "tabmove" s:current_tab - 2 endif
uso de la respuesta de Pablo
tabmove
y el signo -
/ +
en la execute
línea.
Aquí está mi macro, usando argumentos relativos de la respuesta de @ maybeshewill:
" Shortcuts to move between tabs with Ctrl+Shift+Left/Right
function TabLeft()
if tabpagenr() == 1
execute "tabm"
else
execute "tabm -1"
endif
endfunction
function TabRight()
if tabpagenr() == tabpagenr('$')
execute "tabm" 0
else
execute "tabm +1"
endif
endfunction
map <silent><C-S-Right> :execute TabRight()<CR>
map <silent><C-S-Left> :execute TabLeft()<CR>
Se encarga de la caja de envoltura.