Est-il possible de dire si une fenêtre est en bas ou en haut, à gauche ou à droite?

13

Je ne sais pas s'il y a une fonction pour vérifier la position d'une fenêtre, je veux dire est-elle actuellement assise en bas ou en haut, à gauche ou à droite ??

__________________________
|           |            |
|           |            |
|  left     |   right    |
|           |            |
|           |            |
|___________|____________|

__________________________
|                        |
|          top           |
|________________________|
|                        |
|         bottom         |
|_______________________ |
Aaron Shen
la source
Qu'essayez-vous de faire? (Problème XY)
mMontu
J'essaie d'écrire une fonction pour faire pivoter les séparations de fenêtres à la verticale si la disposition actuelle est horizontale et vice versa lorsqu'il n'y a que deux fenêtres. J'ai donc besoin de savoir quelle est la disposition actuelle des divisions et où est ma fenêtre actuelle
Aaron Shen
3
Pourquoi ne pas simplement utiliser ctrl-W_L? (ou ctrl-W_R)
Vitor
Je veux que ce soit une fonction de bascule pratique, il détectera automatiquement la disposition actuelle et effectuera la rotation correcte pour moi au lieu de cela, je dois y penser dans mon cerveau et choisir la bonne commande à utiliser. Tout ce que je dois faire, c'est toujours appuyer sur le même mappage de touches.
Aaron Shen
@AaronShen Jetez un œil aux commandes de restauration de fenêtre .
muru

Réponses:

4

Résumant les commentaires de la question:

- J'essaie d'écrire une fonction pour faire pivoter les séparations de fenêtres à la verticale si la disposition actuelle est horizontale et vice versa lorsqu'il n'y a que deux fenêtres.

- Pourquoi ne pas simplement utiliser ctrl-W_L? (ou ctrl-W_R)

- Je veux que ce soit une fonction de bascule pratique, il détectera automatiquement la disposition actuelle et effectuera la rotation correcte pour moi à la place que je dois y penser dans mon cerveau et choisir la bonne commande à utiliser. Tout ce que je dois faire, c'est toujours appuyer sur le même mappage de touches.

Pour les dispositions contenant seulement deux fenêtres, la fonction suivante devrait fonctionner:

function! Rotate()
   " save the original position, jump to the first window
   let initial = winnr()
   exe 1 . "wincmd w"

   wincmd l
   if winnr() != 1
      " succeeded moving to the right window
      wincmd J " make it the bot window
   else
      " cannot move to the right, so we are at the top
      wincmd H " make it the left window
   endif

   " restore cursor to the initial window
   exe initial . "wincmd w"
endfunction

nnoremap <F3> :call Rotate()<CR>
mMontu
la source
fonction géniale, bien que je ne connaisse pas tous les scripts vim, mais merci, cela fonctionne parfaitement !! btw, j'ajoute juste une vérification supplémentaire car cela ne fonctionne que lorsqu'il n'y a que deux fenêtres.
Aaron Shen
6

Je ne pense pas qu'il existe un moyen de vérifier cela, malheureusement.

Il pourrait y avoir un moyen de créer une fonction personnalisée qui vérifie ceci: Les numéros de fenêtre sont toujours numérotés de 1 en haut à gauche à n en bas à droite. Peut-être que l'on peut utiliser cela combiné avec les données de géométrie de winwidth(), winheight()et les valeurs de &lineset &columnspour créer la carte souhaitée?

Notez que, pour être général, cela devrait prendre en charge des dispositions plus complexes. Quelle devrait être la sortie si, par exemple, le côté gauche est divisé en deux? C'est peut-être la raison pour laquelle la fonction n'existe pas en premier lieu ...

Karl Yngve Lervåg
la source