เป็นกลุ่ม: เลื่อนหน้าต่างไปทางซ้าย / ขวา?


215

ใน Vim เป็นไปได้หรือไม่ที่จะ "ย้าย" หน้าต่างไปทางซ้ายหรือขวา? เช่นคล้ายกับ<c-w> rหรือ<c-w> xแต่ซ้าย / ขวาแทนที่จะขึ้น / ลง?

ตัวอย่างเช่นถ้าฉันมีรูปแบบนี้:

+---+---+---+
|   |   +---+
| A +---+---+
|   |   |   |
+---+---+---+

ฉันอยากจะเปลี่ยนเป็น:

+---+---+---+
|   |   +---+
+---+ A +---+
|   |   |   |
+---+---+---+

ซึ่งเป็นเรื่องยาก / <c-w> {H,J,K,L}น่ารำคาญจะทำอย่างไรกับ

คำตอบ:


425

Ctrl w ให้ "โหมดคำสั่ง windows" แก่คุณเพื่อให้สามารถปรับเปลี่ยนได้ดังต่อไปนี้:

  • Ctrl w+ R- เพื่อหมุนหน้าต่างขึ้น / ซ้าย

  • Ctrl w+ r- เพื่อหมุนหน้าต่างลง / ขวา

คุณยังสามารถใช้ "โหมดคำสั่ง windows" พร้อมปุ่มนำทางเพื่อเปลี่ยนตำแหน่งของหน้าต่าง:

  • Ctrl w+ L- ย้ายหน้าต่างปัจจุบันไปที่ "ทางขวาสุด"

  • Ctrl w+ H- ย้ายหน้าต่างปัจจุบันไปที่ "ซ้ายสุด"

  • Ctrl w+ J- ย้ายหน้าต่างปัจจุบันไปที่ "ด้านล่างสุด"

  • Ctrl w+ K- ย้ายหน้าต่างปัจจุบันไปที่ "ด้านบนสุด"

ตรวจสอบ:help window-movingข้อมูลเพิ่มเติม


2
<c-w> rหมุนในแนวตั้งเท่านั้น
David Wolever

10
@ David Wolever คุณต้องใช้ตัวอักษรตัวพิมพ์ใหญ่ในกรณีนี้เช่น Ctrl-W + Shift-L เป็นต้น ฉันคิดว่านี่อาจเป็นสิ่งที่คุณกำลังมองหา
Ricardo Valeriano

@ David - เพิ่งทดสอบสิ่งนี้และ <cw> r ทำงานในแนวนอนสำหรับฉัน
ostler.c.c

3
@ ostler.c สร้างการแบ่งตามแนวตั้งจากนั้นสร้างการแบ่งแนวนอนภายในคอลัมน์ใดคอลัมน์หนึ่ง ตอนนี้ใช้ <cw> r และจะวนรอบสองหน้าต่างภายในการแบ่งแนวตั้งเดียว
Chev

1
@ nn0p ไม่พวกมันเลื่อนหน้าต่างไปมา <cw> h จะเลื่อนเคอร์เซอร์ไปที่หน้าต่างถัดไปทางซ้ายในขณะที่ <cw> H จะย้ายหน้าต่างปัจจุบัน (พร้อมเคอร์เซอร์) ไปทางซ้ายสุด
MarSoft

60

อันนี้มีประโยชน์มากที่สุดสำหรับฉัน (และอาจเป็นคำตอบที่ถูกต้องสำหรับคำถาม):

  • Ctrl W+ xOR Ctrl W+ Ctrl x- หมุนหน้าต่างที่โฟกัสปัจจุบันด้วยหน้าต่างที่อยู่ใกล้ที่สุดไปทางขวา

มีประโยชน์มากเมื่อคุณอยู่ตรงกลางบานหน้าต่างและต้องการสลับกับบานหน้าต่างด้านขวา ขอบคุณสำหรับสิ่งนี้!
Daniel Andrei Mincă

8

คุณต้องการย้ายหน้าต่างหรือตำแหน่งเคอร์เซอร์ของคุณหรือไม่

ถัดไปไปที่หมุนหรือขี่จักรยานเหมือนที่คุณกล่าวถึงแล้วก็เป็นไปได้เท่านั้นที่จะย้ายหน้าต่างตัวเองไปไกลด้านบนด้านล่างซ้ายหรือขวาตามลำดับด้วย:

^W K
^W J
^W H
^W L

ฉันไม่คิดว่าจะมีวิธีเริ่มต้นในตัวในการย้ายหน้าต่างไปทางขวาหนึ่งแห่ง


1
ฉันต้องการย้ายหน้าต่างไม่ใช่เคอร์เซอร์
David Wolever

1
แล้วนี้เป็นเท่าที่คุณสามารถไปกับคำสั่งที่หน้าต่างที่เป็นกลุ่มถ้านี้เป็นประโยชน์กับคุณโปรดทำเครื่องหมายว่ามันเป็นวิธีการแก้ :-)
Bitterzoet

2
ฉันจะลงความเห็นของ @Bitterzoet ถ้าทำได้ ดูคำตอบข้างต้น
นาธาน

1

ดูเหมือนว่ากลุ่มจะทำไม่ได้กับแผนที่หลักมาตรฐาน เอกสารบอกว่าคำสั่ง ^ WK, J, H และ L ทำงานได้โดยการสร้างการแยกและการเปิดบัฟเฟอร์ในตำแหน่งตอนนี้ดังนั้นฉันจึงเขียนฟังก์ชั่นในลักษณะเดียวกัน: ซ่อนบัฟเฟอร์เลื่อนไปทางซ้ายแยกแล้ว เปิดบัฟเฟอร์เดิม:

" Rotate a window horizontally to the left
function! RotateLeft()
    let l:curbuf = bufnr('%')
    hide
    wincmd h
    split
    exe 'buf' l:curbuf
endfunc

" Rotate a window horizontally to the right
function! RotateRight()
    let l:curbuf = bufnr('%')
    hide
    wincmd l
    split
    exe 'buf' l:curbuf
endfunc

-6
  • ctrl + h เลื่อนเคอร์เซอร์ไปที่หน้าต่างถัดไป (ขวา)

  • ctrl + l ย้ายคำสาปไปยังหน้าต่างก่อนหน้า (ซ้าย)

เกี่ยวกับข้อมูลเพิ่มเติมโปรดดู: :help window-moving


3
ไม่ถูกต้อง. Ctrl+h/lไม่ใช่การเชื่อมโยงมาตรฐานสำหรับการนำทางหน้าต่าง (แม้ว่าสามารถกำหนดค่าได้แน่นอนและมีการเสนอโดยปลั๊กอินบางตัว) และนี่ก็ไม่ได้ตอบคำถามเดิม
MarSoft
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.