¿Cómo puedo hacer que mis ventanas vuelvan a formar una cuadrícula?

12

Si tengo ventanas dispuestas en cuatro cuadrantes, a partir de la siguiente secuencia de comandos:

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

luego ingresar un comando como <C-W>Jhará que estos ya no sean cuadrados; en este caso, forzará una ventana a flotar en la parte inferior.

¿Cómo puedo hacer lo contrario, es decir, forzar las ventanas a una formación cuadrada?

He leído :help window-movingpero no vi nada útil.

wchargin
fuente
1
No tengo claro qué está tratando de lograr cuando presiona <CW> J, que mueve "la ventana actual a la parte inferior, utilizando todo el ancho de la pantalla". Esto significa que las ventanas ya no estar en una formación de cuadrícula, por definición. ¿Qué estás tratando de hacer con tus ventanas?
Rico
3
@Rich Creo que OP solo está ejemplificando una situación después de la cual puede querer restablecer las ventanas a la formación de cuadrícula.
Gonçalo Ribeiro
@ GonçaloRibeiro Correcto.
wchargin
Aunque no es una respuesta, si te encuentras buscando ejemplos de código para hacer tu propia solución, te recomiendo revisar el fabuloso proyecto Microviche .
Nueva Alejandría

Respuestas:

4

Hasta donde sé, no hay una manera fácil de organizar divisiones abiertas en una cuadrícula de divisiones. En este caso, la forma más fácil de volver a una cuadrícula es rectificar manualmente la estructura:

  1. cierra la división flotando en la parte superior
  2. volver a la división ocupando la mitad de la pantalla
  3. volver a dividirlo con :split <file>

Esto lo regresará a una cuadrícula. La forma de maniobrar las divisiones sin afectar el diseño de la ventana es usar [count] Ctrl - W x , que intercambia la ventana actual con la ventana [count].

davidlowryduda
fuente
Sé que puedo hacer esto, pero hay un par de inconvenientes. (1) Si la ventana es la única vista de un búfer dado, y el búfer está sucio, deberá hacerlo :wqo :q!, ninguno de los cuales es deseable. (2) Esto restablecerá cualquier configuración específica de la ventana, como la posición del cursor. (3) Esto romperá cualquier diferencia en progreso. Esencialmente, las ventanas son ciudadanos de primera clase; destruirlos y crear nuevos simplemente no es suficiente.
wchargin
@WChargin Algo de eso desaparece si configura vim para permitir búferes ocultos. Pero sí ...
derobert
2
En lugar de cerrar la ventana y dividir el búfer en la ubicación deseada, divida una nueva ventana donde quiera que vaya, cámbiela por la ventana que desea mover, luego cierre la nueva ventana (movida).
tommcdo
4

Puede guardar su diseño favorito con el winsaveviewcomando. Aquí lo estoy mapeando \svpara mayor comodidad:

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

¡Asegúrese de ejecutar eso antes de romper su diseño! ;-)

Ahora, si alguna vez rompe accidentalmente su diseño, puede restaurarlo:

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

Las teclas predeterminadas para reorganizar las ventanas solo funcionan dentro de su grupo de división local:

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

O rompen la ventana al grupo superior:

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

Estos son inadecuados cuando desea mover el búfer a uno de los otros grupos divididos.

Pero en tales ocasiones, el complemento WindowSwap puede ayudar . Le permite intercambiar los búferes de cualquiera de las dos ventanas arbitrarias.

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

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