เป็นไปได้ไหมที่จะบอกว่าหน้าต่างอยู่ด้านล่างหรือด้านบนซ้ายหรือขวา?


13

ฉันไม่รู้ว่ามีฟังก์ชั่นบางอย่างเพื่อตรวจสอบตำแหน่งของหน้าต่างหรือไม่ฉันหมายความว่ามันกำลังนั่งอยู่ที่ด้านล่างหรือด้านบนซ้ายหรือขวาหรือไม่?

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

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

คุณพยายามจะทำอะไร? (XY ปัญหา)
mMontu

ฉันพยายามเขียนฟังก์ชั่นเพื่อหมุนแยกหน้าต่างเป็นแนวตั้งหากเค้าโครงปัจจุบันเป็นแนวนอนและในทางกลับกันเมื่อมีเพียงสองหน้าต่าง ดังนั้นฉันต้องรู้ว่าอะไรคือเลย์เอาต์แยกปัจจุบันและหน้าต่างปัจจุบันของฉันคืออะไร
Aaron Shen

3
ทำไมไม่ใช้เพียงctrl-W_L? (หรือctrl-W_R)
Vitor

ฉันต้องการให้มันเป็นฟังก์ชั่นสลับที่สะดวกมันจะตรวจจับเลย์เอาต์ปัจจุบันโดยอัตโนมัติและทำการหมุนที่ถูกต้องสำหรับฉันแทนฉันต้องคิดในสมองและเลือกคำสั่งที่เหมาะสมที่จะใช้ สิ่งที่ฉันต้องทำคือกดปุ่มการแมปเดียวกันเสมอ
Aaron Shen

@AaronShen มีลักษณะที่คำสั่งหน้าต่างการฟื้นฟู
muru

คำตอบ:


4

การสรุปความคิดเห็นของคำถาม:

- ฉันพยายามเขียนฟังก์ชั่นเพื่อหมุนหน้าต่างแยกเป็นแนวตั้งหากเค้าโครงปัจจุบันเป็นแนวนอนและในทางกลับกันเมื่อมีเพียงหน้าต่างสองบาน

- ทำไมไม่เพียงแค่ใช้ ctrl-W_L (หรือ ctrl-W_R)

- ฉันต้องการให้ฟังก์ชั่นสลับใช้งานสะดวกมันจะตรวจจับเลย์เอาต์ปัจจุบันโดยอัตโนมัติและทำการหมุนที่ถูกต้องสำหรับฉันแทนฉันต้องคิดในสมองของฉันและเลือกคำสั่งที่เหมาะสมที่จะใช้ สิ่งที่ฉันต้องทำคือกดปุ่มการแมปเดียวกันเสมอ

สำหรับเค้าโครงที่มีหน้าต่างเพียงสองบานฟังก์ชันต่อไปนี้ควรใช้งาน:

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>

ฟังก์ชั่นที่ยอดเยี่ยมถึงแม้ว่าฉันจะไม่รู้สคริปต์ทั้งหมด แต่ก็ขอบคุณมันทำงานได้อย่างสมบูรณ์แบบ !! btw ฉันเพิ่มการตรวจสอบเพิ่มเติมอีกหนึ่งรายการเพื่อให้ใช้งานได้เฉพาะเมื่อมีหน้าต่างสองบานเท่านั้น
Aaron Shen

6

ฉันไม่คิดว่าจะมีวิธีตรวจสอบสิ่งนี้โชคไม่ดี

อาจมีวิธีสร้างฟังก์ชั่นที่กำหนดเองซึ่งตรวจสอบสิ่งนี้: หมายเลขหน้าต่างจะถูกกำหนดหมายเลขจาก 1 ที่มุมบนซ้ายไปยังnทางด้านขวาล่างเสมอ บางทีหนึ่งสามารถใช้รวมกับข้อมูลเรขาคณิตจากwinwidth(), winheight()และค่านิยมของ&linesและ&columnsเพื่อสร้างแผนที่ที่ต้องการ?

หมายเหตุเพื่อให้เป็นแบบทั่วไปสิ่งนี้ควรสนับสนุนเค้าโครงที่ซับซ้อนมากขึ้น เอาต์พุตควรเป็นเช่นไรหากด้านซ้ายแบ่งออกเป็นสอง บางทีนี่อาจเป็นเหตุผลที่ฟังก์ชั่นนี้ไม่มีอยู่ในตอนแรก ...

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.