Como posso recuperar minhas janelas em uma formação de grade?

12

Se eu tiver janelas organizadas em quatro quadrantes, a partir da seguinte sequência de comandos:

  • :tabnew
  • :vsplit
  • :split
  • <C-W>l
  • :split

então, digitar um comando como <C-W>Jfará com que eles não sejam mais quadrados; neste caso, forçará uma janela a flutuar na parte inferior.

Como posso fazer o oposto - isto é, forçar as janelas de volta a uma formação quadrada?

Eu li, :help window-movingmas não vi nada útil.

wchargin
fonte
1
Não sei ao certo o que você está tentando alcançar ao pressionar <CW> J, que move "a janela atual para a parte inferior, usando toda a largura da tela", o que significa que as janelas não está mais em uma formação de grade, por definição. O que você está realmente tentando fazer com as janelas?
Rich
3
@ Rich, acho que o OP está apenas exemplificando uma situação após a qual ele pode querer redefinir as janelas para a formação da grade.
Gonçalo Ribeiro
@ GonçaloRibeiro Correto.
wchargin
Embora não seja uma resposta, se você estiver procurando exemplos de código para criar sua própria solução, recomendo verificar o fabuloso projeto Microviche .
New Alexandria

Respostas:

4

Até onde eu sei, não há uma maneira fácil de organizar divisões abertas em uma grade de divisões. Nesse caso, a maneira mais fácil de retornar a uma grade é retificar manualmente a estrutura:

  1. fechar a divisão flutuando no topo
  2. retornar à divisão ocupando metade da tela
  3. reparti-lo com :split <file>

Isso retornará você a uma grade. A maneira de manobrar as divisões sem afetar o layout da janela é usar [count] Ctrl - W x , que troca a janela atual com a janela [count].

davidlowryduda
fonte
Eu sei que posso fazer isso, mas há algumas desvantagens. (1) Se a janela for a única visualização de um determinado buffer, e o buffer estiver sujo, você terá que :wqou :q!, nenhum dos quais é desejável. (2) Isso redefinirá todas as configurações específicas da janela, como a posição do cursor. (3) Isso interromperá as diferenças em andamento. Essencialmente, as janelas são cidadãos de primeira classe; destruí-los e criar novos simplesmente não é suficiente.
wchargin
@WChargin Parte disso desaparece se você configurar o vim para permitir buffers ocultos. Mas sim ...
derobert
2
Em vez de fechar a janela e dividir o buffer no local desejado, divida uma nova janela para onde deseja ir, troque-a pela janela que deseja mover e feche a nova janela (movida).
21815 Tommcdo
4

Você pode salvar seu layout favorito usando o winsaveviewcomando Aqui estou mapeando-o \svpor conveniência:

nnoremap <Leader>sv :let g:myLayout = winsaveview()<CR>

Certifique-se de executar isso antes de quebrar seu layout! ;-)

Agora, se você acidentalmente quebrar seu layout, poderá restaurá-lo:

nnoremap <Leader>rv :call winrestview(g:myLayout)<CR>
joeytwiddle
fonte
4

As teclas padrão para reorganizar as janelas funcionam apenas dentro do grupo de divisão local:

CTRL-W x   Exchange current window with next (in group)
CTRL-W r   Rotate windows down/right (in group)

Ou eles quebram a janela para o grupo superior:

CTRL-W  H | J | K | L   Move window to left/top/bottom/right-most edge

Eles são inadequados quando você deseja mover o buffer para um dos outros grupos de divisão.

Mas nessas ocasiões, o plugin WindowSwap pode ajudar . Permite trocar os buffers de duas janelas arbitrárias.

<leader> yw   "Yank window": Yank the current window

<leader> pw   "Paste window": Swap the current window with the yanked window
joeytwiddle
fonte