Pour passer rapidement du fractionnement vertical au fractionnement horizontal dans Vim

596

Comment pouvez-vous basculer vos fenêtres actuelles du fractionnement horizontal au fractionnement vertical et vice versa dans Vim?

Je l'ai fait il y a un instant par accident mais je ne retrouve plus la clé.

Léo Léopold Hertz 준영
la source
2
peut-être que le plugin dwm.vim sera un peu utile
ДМИТРИЙ МАЛИКОВ

Réponses:

894

La liste de diffusion Vim indique (reformatée pour une meilleure lisibilité):

Pour changer deux fenêtres divisées verticalement en fenêtres horizontales

Ctrl- w t Ctrl-w K

Horizontalement à verticalement:

Ctrl- w t Ctrl-w H

Explications:

Ctrl- w t rend la première fenêtre (topleft) actuelle

Ctrl- w K déplace la fenêtre actuelle sur toute sa largeur tout en haut

Ctrl- w H déplace la fenêtre actuelle à pleine hauteur à l'extrême gauche

Notez que le t est en minuscules, et le K et H sont en majuscules.

De plus, avec seulement deux fenêtres, il semble que vous pouvez supprimer la partie Ctrl- w tparce que si vous êtes déjà dans l'une des deux seules fenêtres, quel est l'intérêt de l'actualiser?

Mark Rushakoff
la source
27
Donc, si vous avez deux fenêtres divisées horizontalement et que vous êtes dans la fenêtre inférieure, vous utilisez simplement ^ WL.
trop de php
7
.... La puissance ... Mon vim-fu a doublé aujourd'hui, merci. Il y a une tonne de commandes ^ w intéressantes (b, w, etc.)
Alex Hart
Ce serait bien si cela fonctionnait lors de l'utilisation du plugin NERDTree :-)
Eno
3
@Eno fonctionne bien pour moi. Basculez simplement votre panneau NERDTree fermé avant de «faire pivoter» les séparations, puis basculez-le de nouveau pour l'ouvrir. : NERDTreeToggle (je l'ai mappé à une touche de fonction pour plus de commodité).
Lambart
2
J'ai ajouté quelques mappings de leader à ma configuration vim: :nmap <leader>th <C-w>t<C-w>Het:nmap <leader>tk <C-w>t<C-w>K
Ian Marcinkowski
324

Ctrl- wsuivi H, J, Kou L(capital) se déplacera la fenêtre en cours à l'extrême left, bottom, topou rightrespectivement , comme la navigation du curseur normal.

Les équivalents en minuscules déplacent le focus au lieu de déplacer la fenêtre.

respectTheCode
la source
5
c'est beaucoup mieux puisque les utilisateurs utilisent hjkl pour se déplacer entre les tampons.
Afshin Mehrabani
30
La réponse acceptée est bonne, mais pour moi, cette réponse est plus facile à retenir. Merci!
Jon Carter
Fonctionne mieux avec nerdtree aussi.
arcseldon
Cela fonctionne pour moi sur macOS en préfixant Ctrl- w(je ne sais pas si cela ^signifie Ctrldans votre exemple).
Giovanni Benussi
@GiovanniBenussi oui, je pense ^ signifie Ctrl.
ma11hew28
47

Lorsque vous avez deux fenêtres ou plus ouvertes horizontalement ou verticalement et que vous souhaitez les basculer toutes dans l'autre orientation, vous pouvez utiliser ce qui suit:

(passer à l'horizontale)

:windo wincmd K

(passer à la verticale)

:windo wincmd H

Cela va effectivement à chaque fenêtre individuellement et en utilisant ^WKou ^WH.

Steve
la source
32

Les commandes ex suivantes vont (re) diviser n'importe quel nombre de fenêtres:

  • Pour diviser verticalement (par exemple, faire des séparateurs verticaux entre les fenêtres), tapez :vertical ball
  • Pour diviser horizontalement, tapez :ball

S'il existe des tampons masqués, l'exécution de ces commandes rendra également les tampons masqués visibles.

marque
la source
Cela devrait être la réponse acceptée, car la réponse acceptée actuelle ne fonctionnera que pour deux fichiers. Cette réponse est plus complète.
DrStrangepork
:vert[ical] balldans le doc :vert ballest donc aussi ok et plus court.
Titou
:ballréduit 3 fenêtres verticales à 2 fenêtres horizontales, tout en :vert ball mappant correctement 3 fenêtres horizontales à 3 verticales.
Titou
27

Dans VIM, jetez un œil à ce qui suit pour voir différentes alternatives à ce que vous auriez pu faire:

: aide ouverture de fenêtre

Par exemple:

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

Anon
la source
11

Division horizontale à verticale

Ctrl+ Wpour la commande de fenêtre, suivi de Shift+ Hou Shift+L


Division verticale à horizontale

Ctrl+ Wpour la commande de fenêtre, suivi de Shift+ Kou Shift+J

Les deux solutions s'appliquent lorsqu'il n'existe que deux fenêtres.


Ouvrir l'aide dans une division verticale par défaut

Ajoutez ces deux lignes à .vimrc:

cabbrev help vert help
cabbrev h vert h

:vert[ical] {cmd}exécute toujours le cmddans une fenêtre divisée verticalement.

Serge Stroobandt
la source
6

Inspiré par la réponse de Steve, j'ai écrit une fonction simple qui bascule entre les séparations verticales et horizontales pour toutes les fenêtres de l'onglet actuel. Vous pouvez le lier au mappage comme dans la dernière ligne ci-dessous.

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
la source
Fonctionne encore mieux pour moi si je le force à rester dans la même division comme ça if winnr() == 1 windo wincmd J windo wincmd k else windo wincmd J endif et à if winnr() == 1 windo wincmd L windo wincmd h else windo wincmd L endifHope qui a du sens.
mjhoffmann
5

En suivant le conseil de Mark Rushakoff ci - dessus , voici ma cartographie:

" 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

Edit: utilisez Ctrl- w rpour échanger deux fenêtres si elles ne sont pas en bon état.

Jabba
la source