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


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?


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.


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.


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.


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


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.


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>

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.