Comment puis-je remettre mes fenêtres dans une formation de grille?

12

Si j'ai des fenêtres disposées en quatre quadrants, à partir de la séquence de commandes suivante:

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

puis en entrant une commande telle <C-W>Jque celles-ci ne seront plus carrées; dans ce cas, il forcera une fenêtre à flotter en bas.

Comment puis-je faire le contraire, c'est-à-dire forcer les fenêtres à revenir dans une formation carrée?

J'ai lu :help window-movingmais je n'ai rien vu d'utile.

wchargin
la source
1
Je ne suis pas certain de ce que vous essayez de réaliser lorsque vous appuyez sur <CW> J, ce qui déplace "la fenêtre actuelle vers le bas, en utilisant toute la largeur de l'écran", cela signifie que les fenêtres ne plus être en formation de grille, par définition. Qu'essayez-vous réellement de faire avec vos fenêtres?
Rich
3
@ Rich Je pense que OP illustre simplement une situation après laquelle il peut vouloir réinitialiser les fenêtres à la formation de la grille.
Gonçalo Ribeiro
@ GonçaloRibeiro Correct.
wchargin
Bien que ce ne soit pas une réponse, si vous cherchez des exemples de code pour créer votre propre solution, je vous recommande de vérifier le fabuleux projet Microviche .
New Alexandria

Réponses:

4

Pour autant que je sache, il n'y a pas de moyen facile d'organiser les divisions ouvertes en une grille de divisions. Dans ce cas, le moyen le plus simple de revenir dans une grille est de rectifier manuellement la structure:

  1. fermer le split flottant en haut
  2. revenir à la scission en occupant la moitié de l'écran
  3. re-diviser avec :split <file>

Cela vous ramènera à une grille. La façon de manoeuvrer les divisions sans affecter la disposition des fenêtres est d'utiliser [count] Ctrl - W x , qui échange la fenêtre courante avec la fenêtre [count].

davidlowryduda
la source
Je sais que je peux le faire, mais il y a quelques inconvénients. (1) Si la fenêtre est la seule vue d'un tampon donné et que le tampon est sale, vous devrez :wqou :q!, aucun des deux n'est souhaitable. (2) Cela réinitialisera tous les paramètres spécifiques à la fenêtre, comme la position du curseur. (3) Cela interrompra tout différentiel en cours. Essentiellement, les fenêtres sont des citoyens de première classe; les détruire et en créer de nouveaux ne suffit tout simplement pas.
wchargin
@WChargin Une partie de cela disparaît si vous définissez vim pour autoriser les tampons cachés. Mais ouais ...
derobert
2
Au lieu de fermer la fenêtre et de diviser le tampon à l'emplacement souhaité, divisez une nouvelle fenêtre où vous voulez qu'elle aille, échangez-la avec la fenêtre que vous souhaitez déplacer, puis fermez la nouvelle fenêtre (déplacée).
tommcdo
4

Vous pouvez enregistrer votre mise en page préférée à l'aide de la winsaveviewcommande. Ici, je le mappe pour plus \svde commodité:

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

Assurez-vous de l'exécuter avant de casser votre mise en page! ;-)

Maintenant, si vous cassez accidentellement votre mise en page, vous pouvez la restaurer:

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

Les clés par défaut pour réorganiser les fenêtres ne fonctionnent que dans leur groupe de partage local:

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

Ou ils ouvrent la fenêtre au groupe supérieur:

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

Ceux-ci sont inadéquats lorsque vous souhaitez déplacer le tampon dans l'un des autres groupes fractionnés.

Mais dans de telles occasions, le plugin WindowSwap peut vous aider . Il vous permet d'échanger les tampons de deux fenêtres arbitraires.

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

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