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


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?


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.


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.


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.


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


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.


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>

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.