Kann man erkennen, ob sich ein Fenster unten oder oben befindet, links oder rechts?

13

Ich weiß nicht, ob es eine Funktion gibt, mit der die Position eines Fensters überprüft werden kann. Ich meine, sitzt es derzeit unten oder oben, links oder rechts?

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

__________________________
|                        |
|          top           |
|________________________|
|                        |
|         bottom         |
|_______________________ |
Aaron Shen
quelle
Was versuchst du zu machen? (XY-Problem)
mMontu
Ich versuche, eine Funktion zu schreiben, mit der Fenstersplits in vertikaler Richtung gedreht werden, wenn das aktuelle Layout horizontal ist, und umgekehrt, wenn nur zwei Fenster vorhanden sind. Also muss ich wissen, wie das aktuelle Split-Layout aussieht und wo mein aktuelles Fenster ist
Aaron Shen
3
Warum nicht einfach benutzen ctrl-W_L? (oder ctrl-W_R)
Vitor
Ich möchte, dass es eine bequeme Umschaltfunktion ist, die das aktuelle Layout automatisch erkennt und die richtige Drehung für mich vornimmt, stattdessen muss ich es in meinem Gehirn überlegen und den richtigen Befehl auswählen. Alles, was ich tun muss, ist immer die gleiche Tastenzuordnung zu treffen.
Aaron Shen
@AaronShen Schauen Sie sich das Fenster mit den Wiederherstellungsbefehlen an .
muru

Antworten:

4

Fassen Sie die Kommentare der Frage zusammen:

- Ich versuche, eine Funktion zu schreiben, mit der Fenstersplits in vertikaler Richtung gedreht werden, wenn das aktuelle Layout horizontal ist, und umgekehrt, wenn nur zwei Fenster vorhanden sind.

- Warum nicht einfach Strg-W_L benutzen? (oder Strg-W_R)

- Ich möchte, dass es eine bequeme Umschaltfunktion ist, die das aktuelle Layout automatisch erkennt und die richtige Drehung für mich vornimmt, stattdessen muss ich es in meinem Gehirn überlegen und den richtigen Befehl auswählen. Alles, was ich tun muss, ist immer die gleiche Tastenzuordnung zu treffen.

Für die Layouts mit nur zwei Fenstern sollte die folgende Funktion funktionieren:

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
quelle
Tolle Funktion, obwohl ich nicht alle VIM-Skripte kenne, aber danke, es funktioniert perfekt !! Übrigens, ich füge nur einen zusätzlichen Check hinzu, denn es funktioniert nur, wenn es nur zwei Fenster gibt.
Aaron Shen
6

Leider gibt es keine Möglichkeit, dies zu überprüfen.

Es gibt möglicherweise eine Möglichkeit, eine benutzerdefinierte Funktion zu erstellen, die dies überprüft: Die Fensternummern werden immer von 1 oben links bis n unten rechts nummeriert . Vielleicht kann man dies mit den Geometriedaten kombiniert verwendet aus winwidth(), winheight()und die Werte &linesund &columnsdie gewünschte Karte zu erstellen?

Um allgemein zu sein, sollte dies komplexere Layouts unterstützen. Was soll die Ausgabe sein, wenn zum Beispiel die linke Seite zweigeteilt ist? Vielleicht ist das der Grund, warum die Funktion gar nicht existiert ...

Karl Yngve Lervåg
quelle