Apakah mungkin untuk mengetahui apakah sebuah jendela ada di bagian bawah atau atas, kiri atau kanan?

13

Saya tidak tahu apakah ada beberapa fungsi untuk memeriksa posisi jendela, maksud saya apakah saat ini duduk di bagian bawah atau atas, kiri atau kanan ??

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

__________________________
|                        |
|          top           |
|________________________|
|                        |
|         bottom         |
|_______________________ |
Aaron Shen
sumber
Apa yang sedang Anda coba lakukan? (Masalah XY)
mMontu
Saya mencoba untuk menulis fungsi untuk memutar jendela menjadi vertikal jika tata letak saat ini horisontal dan sebaliknya ketika hanya ada dua jendela. Jadi saya perlu tahu apa tata letak pemisahan saat ini dan di mana jendela saya saat ini
Aaron Shen
3
Kenapa tidak pakai saja ctrl-W_L? (atau ctrl-W_R)
Pemilih
Saya ingin ini menjadi fungsi toggle yang nyaman, itu akan secara otomatis mendeteksi tata letak saat ini dan melakukan rotasi yang benar bagi saya bahwa saya harus memikirkannya di otak saya dan memilih perintah yang tepat untuk digunakan. Yang perlu saya lakukan adalah selalu menekan pemetaan kunci yang sama.
Aaron Shen
@AaronShen Lihat di jendela mengembalikan perintah .
muru

Jawaban:

4

Ringkas komentar dari pertanyaan:

- Saya mencoba menulis fungsi untuk memutar jendela menjadi vertikal jika tata letak saat ini horisontal dan sebaliknya ketika hanya ada dua jendela.

- Mengapa tidak menggunakan ctrl-W_L saja? (atau ctrl-W_R)

- Saya ingin itu menjadi fungsi toggle yang nyaman, itu akan secara otomatis mendeteksi tata letak saat ini dan melakukan rotasi yang benar bagi saya bahwa saya harus memikirkannya di otak saya dan memilih perintah yang tepat untuk digunakan. Yang perlu saya lakukan adalah selalu menekan pemetaan kunci yang sama.

Untuk tata letak yang hanya berisi dua jendela, fungsi berikut harus berfungsi:

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
sumber
fungsi luar biasa, walaupun saya tidak tahu semua skrip vim, tapi terima kasih, itu berfungsi dengan baik !! btw, saya menambahkan hanya satu cek tambahan karena hanya berfungsi ketika hanya ada dua jendela.
Aaron Shen
6

Sayangnya saya tidak menemukan cara untuk memeriksanya.

Mungkin ada cara untuk membuat fungsi kustom yang memeriksa ini: Nomor-nomor jendela selalu diberi nomor dari 1 di kiri atas ke n di kanan bawah. Mungkin orang dapat menggunakan ini dikombinasikan dengan data geometri dari winwidth(), winheight()dan nilai-nilai &linesdan &columnsuntuk membuat peta yang diinginkan?

Catatan, untuk menjadi umum, ini harus mendukung tata letak yang lebih kompleks. Apa yang seharusnya menjadi output jika misalnya sisi kiri dibagi menjadi dua? Mungkin inilah alasan mengapa fungsi tersebut tidak ada sejak awal ...

Karl Yngve Lervåg
sumber