Pour passer rapidement du fractionnement vertical au fractionnement horizontal dans Vim


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?


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.


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.


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.


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


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.


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>

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.