Como você pode mudar suas janelas atuais da divisão horizontal para a vertical e vice-versa no Vim?
Fiz isso um momento atrás por acidente, mas não consigo encontrar a chave novamente.
Como você pode mudar suas janelas atuais da divisão horizontal para a vertical e vice-versa no Vim?
Fiz isso um momento atrás por acidente, mas não consigo encontrar a chave novamente.
Respostas:
A lista de discussão do Vim diz (reformatada para melhor legibilidade):
Para alterar duas janelas divididas verticalmente para divididas horizontalmente
Ctrl- w t Ctrl-w K
Horizontalmente para verticalmente:
Ctrl- w t Ctrl-w H
Explicações:
Ctrl- w t atualiza a primeira janela (topleft)
Ctrl- w K move a janela atual para a largura total no topo
Ctrl- w H move a janela atual para a altura máxima na extrema esquerda
Observe que ot é minúsculo e K e H são maiúsculos.
Além disso, com apenas duas janelas, parece que você pode soltar a Ctrl- w tparte porque se você já está em um de apenas duas janelas, que é o ponto de torná-lo atual?
:nmap <leader>th <C-w>t<C-w>H
e:nmap <leader>tk <C-w>t<C-w>K
Ctrl- wseguido por H, J, Kou L(capital) irá mover a janela atual para o extremo left
, bottom
, top
ou right
, respectivamente, como navegação normal cursor.
Os equivalentes em minúsculas movem o foco em vez de mover a janela.
Ctrl
- w
(não sei se isso ^
significa Ctrl
no seu exemplo).
^
significa Ctrl
.
Quando você tem duas ou mais janelas abertas na horizontal ou na vertical e deseja alternar todas para a outra orientação, pode usar o seguinte:
(mudar para horizontal)
:windo wincmd K
(mudar para vertical)
:windo wincmd H
Ele efetivamente vai para cada janela individualmente e usa ^WKor ^WH.
Os seguintes comandos ex (re) dividirão qualquer número de janelas:
:vertical ball
:ball
Se houver buffers ocultos, a emissão desses comandos também tornará os buffers ocultos visíveis.
:vert[ical] ball
no doc :vert ball
também está ok e mais curto.
:ball
reduz 3 janelas verticais para 2 janelas horizontais, enquanto :vert ball
mapeia corretamente 3 janelas horizontais para 3 janelas verticais.
Divisão horizontal para vertical
Ctrl+ Wpara o comando window, seguido por Shift+ Hou Shift+L
Divisão vertical para horizontal
Ctrl+ Wpara o comando window, seguido por Shift+ Kou Shift+J
Ambas as soluções se aplicam quando apenas duas janelas existem.
Adicione as duas linhas a .vimrc
:
cabbrev help vert help
cabbrev h vert h
:vert[ical] {cmd}
sempre executa o cmd
em uma janela dividida verticalmente.
Inspirado na resposta de Steve, escrevi uma função simples que alterna entre divisões verticais e horizontais para todas as janelas na guia atual. Você pode vinculá-lo ao mapeamento, como na última linha abaixo.
function! ToggleWindowHorizontalVerticalSplit()
if !exists('t:splitType')
let t:splitType = 'vertical'
endif
if t:splitType == 'vertical' " is vertical switch to horizontal
windo wincmd K
let t:splitType = 'horizontal'
else " is horizontal switch to vertical
windo wincmd H
let t:splitType = 'vertical'
endif
endfunction
nnoremap <silent> <leader>wt :call ToggleWindowHorizontalVerticalSplit()<cr>
if winnr() == 1 windo wincmd J windo wincmd k else windo wincmd J endif
e if winnr() == 1 windo wincmd L windo wincmd h else windo wincmd L endif
espero que isso faça sentido.
Seguindo a dica de Mark Rushakoff acima , aqui está o meu mapeamento:
" vertical to horizontal ( | -> -- )
noremap <c-w>- <c-w>t<c-w>K
" horizontal to vertical ( -- -> | )
noremap <c-w>\| <c-w>t<c-w>H
noremap <c-w>\ <c-w>t<c-w>H
noremap <c-w>/ <c-w>t<c-w>H
Editar: use Ctrl- w rpara trocar duas janelas se elas não estiverem na boa ordem.