Czy można stwierdzić, czy okno znajduje się u dołu, u góry, w lewo czy w prawo?

13

Nie wiem, czy jest jakaś funkcja do sprawdzania pozycji okna, to znaczy, czy obecnie siedzi ono u dołu, u góry, w lewo czy w prawo?

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

__________________________
|                        |
|          top           |
|________________________|
|                        |
|         bottom         |
|_______________________ |
Aaron Shen
źródło
Co próbujesz zrobić? (Problem XY)
mMontu,
Próbuję napisać funkcję do obracania podziałów okien do pionu, jeśli obecny układ jest poziomy i odwrotnie, gdy są tylko dwa okna. Muszę więc wiedzieć, jaki jest obecny układ podziałów i gdzie jest moje obecne okno
Aaron Shen
3
Dlaczego nie po prostu użyć ctrl-W_L? (lub ctrl-W_R)
Vitor,
Chcę, aby była to wygodna funkcja przełączania, automatycznie wykryje bieżący układ i wykona dla mnie właściwy obrót, zamiast tego muszę pomyśleć w moim mózgu i wybrać właściwe polecenie do użycia. Wszystko, co muszę zrobić, to zawsze trafić w to samo mapowanie klawiszy.
Aaron Shen,
@AaronShen Spójrz na okno przywracania poleceń .
muru

Odpowiedzi:

4

Podsumowując komentarze do pytania:

- Próbuję napisać funkcję obracania podziałów okien na pionowe, jeśli obecny układ jest poziomy i odwrotnie, gdy są tylko dwa okna.

- Dlaczego nie użyć po prostu ctrl-W_L? (lub ctrl-W_R)

- Chcę, aby była to wygodna funkcja przełączania, automatycznie wykryje bieżący układ i wykona dla mnie prawidłowy obrót, zamiast tego muszę przemyśleć to w mózgu i wybrać właściwe polecenie do użycia. Wszystko, co muszę zrobić, to zawsze trafić w to samo mapowanie klawiszy.

W przypadku układów zawierających tylko dwa okna powinna działać następująca funkcja:

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
źródło
niesamowita funkcja, chociaż nie znam wszystkich skryptów vima, ale dzięki, działa idealnie !! btw, dodaję tylko jedną dodatkową kontrolę, ponieważ działa tylko wtedy, gdy są tylko dwa okna.
Aaron Shen
6

Niestety nie sądzę, aby można to sprawdzić.

Może istnieć sposób na utworzenie niestandardowej funkcji, która to sprawdza: Numery okien są zawsze ponumerowane od 1 w lewym górnym rogu do n w prawym dolnym rogu. Być może można użyć to w połączeniu z danymi z geometrii winwidth(), winheight()a wartości &linesi &columnsstworzyć pożądany mapę?

Uwaga: aby być ogólnym, powinno to obsługiwać bardziej złożone układy. Jaki powinien być wynik, jeśli na przykład lewa strona jest podzielona na dwie części? Być może właśnie dlatego ta funkcja nie istnieje ...

Karl Yngve Lervåg
źródło