È possibile dire se una finestra è in basso o in alto, a sinistra o a destra?


13

Non so se c'è qualche funzione per controllare la posizione di una finestra, intendo dire che è attualmente in basso o in alto, a sinistra o a destra ??

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

__________________________
|                        |
|          top           |
|________________________|
|                        |
|         bottom         |
|_______________________ |

Cosa stai cercando di fare? (Problema XY)
lunedì

Sto cercando di scrivere una funzione per ruotare la finestra si divide in verticale se il layout corrente è orizzontale e viceversa quando ci sono solo due finestre. Quindi ho bisogno di sapere qual è l'attuale layout delle suddivisioni e dov'è la mia finestra attuale
Aaron Shen,

3
Perché non semplicemente usare ctrl-W_L? (o ctrl-W_R)
Vitor il

Voglio che sia una comoda funzione di attivazione / disattivazione, rileverà automaticamente il layout corrente e farà la rotazione corretta per me invece che devo pensarlo nel mio cervello e scegliere il comando giusto da usare. Tutto quello che devo fare è premere sempre la stessa mappatura dei tasti.
Aaron Shen,

@AaronShen Dai un'occhiata ai comandi di ripristino della finestra .
muru,

Risposte:


4

Riassumendo i commenti della domanda:

- Sto cercando di scrivere una funzione per ruotare le finestre divise in verticale se il layout attuale è orizzontale e viceversa quando ci sono solo due finestre.

- Perché non usare semplicemente ctrl-W_L? (o ctrl-W_R)

- Voglio che sia una comoda funzione di attivazione / disattivazione, rileverà automaticamente il layout corrente e farà la rotazione corretta per me invece che devo pensarlo nel mio cervello e scegliere il comando giusto da usare. Tutto quello che devo fare è premere sempre la stessa mappatura dei tasti.

Per i layout contenenti solo due finestre dovrebbe funzionare la seguente funzione:

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>

funzione fantastica, anche se non conosco tutti gli script VIM, ma grazie, funziona perfettamente !! a proposito, aggiungo solo un ulteriore controllo perché funziona solo quando ci sono solo due finestre.
Aaron Shen,

6

Sfortunatamente non penso che ci sia modo di verificarlo.

Potrebbe esserci un modo per creare una funzione personalizzata che controlli questo: i numeri delle finestre sono sempre numerati da 1 in alto a sinistra a n in basso a destra. Forse si può usare questo combinato con i dati geometrici da winwidth(), winheight()ed i valori di &linese &columnsper creare la mappa desiderata?

Nota, per essere generale, questo dovrebbe supportare layout più complessi. Quale dovrebbe essere l'output se, ad esempio, il lato sinistro è diviso in due? Forse questo è il motivo per cui la funzione non esiste in primo luogo ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.