Para cambiar de división vertical a división horizontal rápidamente en Vim

596

¿Cómo puede cambiar sus ventanas actuales de división horizontal a división vertical y viceversa en Vim?

Lo hice hace un momento por accidente, pero no puedo encontrar la llave de nuevo.

Léo Léopold Hertz 준영
fuente
2
quizás el plugin dwm.vim será un poco útil
ДМИТРИЙ МАЛИКОВ

Respuestas:

894

La lista de correo de Vim dice (formateado para una mejor legibilidad):

Para cambiar dos ventanas divididas verticalmente para dividir horizontalmente

Ctrl- w t Ctrl-w K

Horizontalmente a verticalmente:

Ctrl- w t Ctrl-w H

Explicaciones:

Ctrl- w t hace que la primera ventana (topleft) sea actual

Ctrl- w K mueve la ventana actual a ancho completo en la parte superior

Ctrl- w H mueve la ventana actual a altura completa en el extremo izquierdo

Tenga en cuenta que t es minúscula, y K y H son mayúsculas.

Además, con solo dos ventanas, parece que puede soltar la parte Ctrl- w tporque si ya está en una de las dos ventanas, ¿cuál es el punto de actualizarla?

Mark Rushakoff
fuente
27
Entonces, si tiene dos ventanas divididas horizontalmente y está en la ventana inferior, simplemente use ^ WL.
demasiado php
77
.... El poder ... Mi vim-fu se duplicó hoy, gracias. Hay un montón de comandos ^ w interesantes (b, w, etc.)
Alex Hart
Sería bueno que esto funcionó cuando se usa el complemento NERDTree :-)
Eno
3
@Eno funciona bien para mí. Simplemente cierre su panel NERDTree antes de 'rotar' las divisiones, luego vuelva a abrirlo. : NERDTreeToggle (lo tengo asignado a una tecla de función para mayor comodidad).
Lambart
2
He agregado algunas asignaciones de líderes a mi configuración de vim: :nmap <leader>th <C-w>t<C-w>Hy:nmap <leader>tk <C-w>t<C-w>K
Ian Marcinkowski
324

Ctrl- wseguido por H, J, Ko L(capital) se moverá la ventana actual a la extrema left, bottom, topo right, respectivamente, como la navegación del cursor normal.

Los equivalentes en minúsculas mueven el foco en lugar de mover la ventana.

respectTheCode
fuente
55
es mucho mejor ya que los usuarios usan hjkl para moverse entre buffers.
Afshin Mehrabani
30
La respuesta aceptada es buena, pero para mí, esta respuesta es más fácil de recordar. ¡Gracias!
Jon Carter
Funciona mejor con nerdtree también.
arcseldon el
Me funciona en macOS con el prefijo Ctrl- w(no sé si ^significa Ctrlen su ejemplo).
Giovanni Benussi
@GiovanniBenussi sí, creo que ^significa Ctrl.
ma11hew28
47

Cuando se tienen dos o más ventanas abiertas horizontal o verticalmente y desea cambiar a todos a la otra orientación, puede utilizar lo siguiente:

(cambiar a horizontal)

:windo wincmd K

(cambiar a vertical)

:windo wincmd H

Efectivamente va a cada ventana individualmente y usa ^WKo ^WH.

Steve
fuente
32

Los siguientes comandos ex (re) dividirán cualquier número de ventanas:

  • Para dividir verticalmente (por ejemplo, hacer divisores verticales entre ventanas), escriba :vertical ball
  • Para dividir horizontalmente, escriba :ball

Si hay búferes ocultos, la emisión de estos comandos también hará visibles los búferes ocultos.

marca
fuente
Esta debería ser la respuesta aceptada, ya que la respuesta aceptada actual solo funcionará para dos archivos. Esta respuesta es más completa.
DrStrangepork
:vert[ical] ballen el documento :vert balltambién está bien y es más corto.
Titou
:ballreduce 3 ventanas verticales a 2 ventanas horizontales, mientras que :vert ball asigna correctamente 3 ventanas horizontales a 3 verticales.
Titou
27

En VIM, eche un vistazo a lo siguiente para ver diferentes alternativas de lo que podría haber hecho:

: ayuda abrir ventana

Por ejemplo:

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

Luego
fuente
11

División horizontal a vertical

Ctrl+ Wpara comando de ventana, seguido de Shift+ Ho Shift+L


División vertical a horizontal

Ctrl+ Wpara comando de ventana, seguido de Shift+ Ko Shift+J

Ambas soluciones se aplican cuando solo existen dos ventanas.


Abrir ayuda en una división vertical por defecto

Agregue ambas líneas a .vimrc:

cabbrev help vert help
cabbrev h vert h

:vert[ical] {cmd}siempre ejecuta el cmden una ventana dividida verticalmente.

Serge Stroobandt
fuente
6

Inspirado por la respuesta de Steve, escribí una función simple que alterna entre divisiones verticales y horizontales para todas las ventanas en la pestaña actual. Puede vincularlo a la asignación como en la última línea a continuación.

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
fuente
Funciona aún mejor para mí si lo obligo a permanecer en la misma división if winnr() == 1 windo wincmd J windo wincmd k else windo wincmd J endif y if winnr() == 1 windo wincmd L windo wincmd h else windo wincmd L endifespero que tenga sentido.
mjhoffmann
5

Siguiendo el consejo anterior de Mark Rushakoff , aquí está mi mapeo:

" 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 intercambiar dos ventanas si no están en buen estado.

Jabba
fuente