Para alternar rapidamente da divisão vertical para a horizontal, no Vim

596

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.

Léo Léopold Hertz 준영
fonte
2
talvez o plugin dwm.vim seja meio útil
ДМИТРИЙ МАЛИКОВ

Respostas:

894

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?

Mark Rushakoff
fonte
27
Portanto, se você tiver duas janelas divididas horizontalmente e estiver na janela inferior, basta usar ^ WL.
Php demais
7
.... O poder ... Meu vim-fu dobrou hoje, obrigado. Há uma tonelada de interessante ^ w comandos (b, w, etc)
Alex Hart
Seria bom se isso funcionou quando usando o plugin NERDTree :-)
Eno
3
@Eno Funciona bem para mim. Basta fechar o painel NERDTree antes de 'girar' as divisões e, em seguida, abrir novamente. : NERDTreeToggle (eu o mapeei para uma tecla de função por conveniência).
Lambart 26/03
2
Eu adicionei alguns mapeamentos de líderes à minha configuração do vim: :nmap <leader>th <C-w>t<C-w>He:nmap <leader>tk <C-w>t<C-w>K
Ian Marcinkowski 8/16
324

Ctrl- wseguido por H, J, Kou L(capital) irá mover a janela atual para o extremo left, bottom, topou right, respectivamente, como navegação normal cursor.

Os equivalentes em minúsculas movem o foco em vez de mover a janela.

respectTheCode
fonte
5
é muito melhor, pois os usuários usam o hjkl para alternar entre buffers.
Afshin Mehrabani
30
A resposta aceita é boa, mas para mim, essa resposta é mais fácil de lembrar. Obrigado!
Jon Carter
Funciona melhor com o nerdtree também.
Arcseldon 7/11
Funciona para mim no macOS prefixando Ctrl- w(não sei se isso ^significa Ctrlno seu exemplo).
Giovanni Benussi
@GiovanniBenussi sim, acho que ^significa Ctrl.
precisa saber é o seguinte
47

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.

Steve
fonte
32

Os seguintes comandos ex (re) dividirão qualquer número de janelas:

  • Para dividir verticalmente (por exemplo, divisores verticais entre janelas), digite :vertical ball
  • Para dividir horizontalmente, digite :ball

Se houver buffers ocultos, a emissão desses comandos também tornará os buffers ocultos visíveis.

Marca
fonte
Essa deve ser a resposta aceita, pois a resposta aceita atual funcionará apenas para dois arquivos. Esta resposta é mais completa.
precisa saber é o seguinte
:vert[ical] ballno doc :vert balltambém está ok e mais curto.
Titou
:ballreduz 3 janelas verticais para 2 janelas horizontais, enquanto :vert ball mapeia corretamente 3 janelas horizontais para 3 janelas verticais.
Titou
27

No VIM, observe o seguinte para ver diferentes alternativas para o que você pode ter feito:

: ajuda janela de abertura

Por exemplo:

Ctrl- W s
Ctrl- W o
Ctrl- W v
Ctrl- W o
Ctrl- W s
...

Anon
fonte
11

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.


Abrir ajuda em uma divisão vertical por padrão

Adicione as duas linhas a .vimrc:

cabbrev help vert help
cabbrev h vert h

:vert[ical] {cmd}sempre executa o cmdem uma janela dividida verticalmente.

Serge Stroobandt
fonte
6

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>
Adam Faryna
fonte
Funciona ainda melhor para mim se forçá-lo a permanecer na mesma divisão 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 endifespero que isso faça sentido.
mjhoffmann 5/01
5

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.

Jabba
fonte