Respostas:
Você pode realocar uma guia :tabm
usando argumentos absolutos relativos ou com índice zero.
absoluto:
:tabm i
relativo:
:tabm +i
:tabm -i
É um recurso relativamente novo. Portanto, se não funcionar, tente atualizar o seu vim.
:tabm
aceita argumentos relativos no vim 7.3.
Você quer dizer mover a guia atual? Isso 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.
Eu tenho duas ligações de teclas que movem minha guia atual para a esquerda ou para a direita. Muito conveniente!
EDIT: Aqui está minha macro VIM. Eu não sou um grande programador de ViM , então talvez isso possa ser melhorado, mas é assim que funciona para mim:
" 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
Depois disso, você pode vincular chaves, por exemplo, no seu .vimrc
:
map <F9> :call TabMove(-1)<CR>
map <F10> :call TabMove(1)<CR>
Agora você pode mover sua guia atual pressionando F9 ou F10.
Eu estava procurando o mesmo e depois de alguns posts, encontrei uma maneira mais simples do que uma função:
:execute "tabmove" tabpagenr() # Move the tab to the right
:execute "tabmove" tabpagenr() - 2 # Move the tab to the left
O tabpagenr () retorna a posição real da guia e tabmove usa índices.
Mapeei a direita para Ctrl + L e a esquerda para Ctrl + H:
map <C-H> :execute "tabmove" tabpagenr() - 2 <CR>
map <C-J> :execute "tabmove" tabpagenr() <CR>
:execute "tabmove" tabpagenr() + 1 <CR>
para mover para a direita. Para MacVim 8.0.1420 (144) .
:tabm n
Onde n
está um número que indica a posição (começando do zero)
Eu acho que uma solução melhor é mover a guia para a esquerda ou direita para sua posição atual, em vez de descobrir o valor numérico da nova posição em que você deseja.
noremap <A-Left> :-tabmove<cr>
noremap <A-Right> :+tabmove<cr>
Com os mapas de teclas acima, você poderá mover a guia atual:
Além das sugestões de outras respostas, você também pode simplesmente arrastar as guias com o mouse para movê-las, se o suporte ao mouse estiver ativado.
Por padrão, está ativado no MacVim e em outras implementações da GUI vim, seja usando as guias do widget da GUI ou as guias de estilo do terminal no modo GUI.
Ele também funciona no modo tty puro do Vim, se você tiver set mouse=a
e possuir um terminal adequado (xterm e a maioria dos emuladores, como gnome-terminal, Terminal.app, iTerm2 e PuTTY / KiTTY, para citar uma visualização). Observe que os cliques do mouse além da coluna 222 também exigem set ttymouse=sgr
; consulte No Vim, por que meu mouse não passa da 220ª coluna? para saber mais sobre isso.
Eu escrevi um plugin chamado vim-tabber que fornece algumas funcionalidades adicionais para trocar de guia, alterá- las e aumentar os recursos dos comandos internos de manipulação de guias, mantendo-se amplamente compatível com os recursos internos. Mesmo se você optar por não usar o plug-in, há algumas informações gerais de uso da guia no README.
Por alguma razão, a resposta da função parou de funcionar para mim. Suspeito de um conflito com o vim-ctrlspace . Independentemente disso, a matemática na resposta da função é desnecessária, pois o Vim pode mover as guias para a esquerda e para a direita com as funções incorporadas. Nós apenas temos que lidar com o caso de embalagem , porque o Vim não é 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
e +tabm
no meu vim 7.4 não movem corretamente as guias. Também o meu :help tabm
não lista isso como uma sintaxe válida. Então eu ter a última else execute ...endif
com elseif a:direction == 1 execute "tabmove" s:current_tab else execute "tabmove" s:current_tab - 2 endif
uso de Pablo resposta
tabmove
e o sinal -
/ +
na execute
linha.
Aqui está minha macro, usando argumentos relativos da resposta 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>
Ele lida com o estojo de embalagem.