วิธีการทำแผนที่ซ้ำเมื่อกดปุ่มค้าง


11

ฉันมี.vimrcการแมปแบบง่าย ๆ เพื่อปรับขนาดหน้าต่างแยกได้อย่างง่ายดาย:

noremap <Leader><UP>    <C-w>+
noremap <Leader><DOWN>  <C-w>-

มันใช้งานได้ดี แต่เมื่อฉันต้องการปรับขนาดหน้าต่าง 10 บรรทัดฉันต้องกดและปล่อยLeader+ UP10 ครั้ง

ฉันจะทำซ้ำการแมปนี้ในขณะที่กดปุ่มได้อย่างไร สิ่งที่ฉันต้องการคือเมื่อฉันกดLeader+ UPการแมปจะถูกนำไปใช้หนึ่งครั้งหลังจากนั้นในช่วงเวลาสั้น ๆ มันจะถูกนำไปใช้อีกครั้งและอื่น ๆ ในขณะที่ฉันกดปุ่มค้างไว้

หมายเหตุ:ฉันรู้ว่าเป็นไปได้ที่จะนำหน้า<C-w>+ด้วยการนับและฉันสามารถเข้ารหัสในการทำแผนที่หรือเพียงแค่ใส่จำนวนก่อนที่จะใช้การทำแผนที่ แต่นั่นไม่ใช่วิธีที่ฉันต้องการจะทำ

Note2:ฉันรู้ว่าการแมปยอดนิยมเพื่อปรับขนาดหน้าต่างคือการใช้+และ-ปุ่มที่กดได้ง่ายกว่าหลายครั้ง แต่ฉันไม่ต้องการใช้ปุ่มเหล่านั้นเพื่อทำเช่นนั้น

คำตอบ:


14

คุณสามารถลองป้อน ... เป็นกลุ่มsubmode ! สำหรับกรณีของคุณมีดังนี้:

call submode#enter_with('grow/shrink', 'n', '', '<leader><up>', '<C-w>+')
call submode#enter_with('grow/shrink', 'n', '', '<leader><down>', '<C-w>-')
call submode#map('grow/shrink', 'n', '', '<down>', '<C-w>-')
call submode#map('grow/shrink', 'n', '', '<up>', '<C-w>+')

ซึ่งหมายความว่าคุณป้อน submode ด้วยLeader-UpหรือLeader-Down(ซึ่งจะขยาย / ย่อขนาดหน้าต่างหนึ่งครั้ง) จากนั้นคุณจะต้องกดUpหรือDownขยายหรือลดขนาดหน้าต่างจนกว่าคุณจะออกจาก submode

ดูความช่วยเหลือสำหรับปัญหาการหมดเวลา แต่เพื่อปิดใช้งาน:

"disable submode timeouts:
let g:submode_timeout = 0

... ซึ่งหมายความว่าคุณจะอยู่ใน submode ว่าไปเรื่อย ๆ จนกว่าคุณจะกดอื่น ๆ ที่สำคัญกว่าUpหรือหรือจนกว่าคุณจะตีDownEsc

Aaand เคล็ดลับที่มีประโยชน์ต่อไปที่ฉันอยากแนะนำ:

" don't consume submode-leaving key
let g:submode_keep_leaving_key = 1

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


ฉันลองใช้วิธีแก้ปัญหา แต่ดูเหมือนจะไม่ทำงาน: เมื่อฉันกด <kbd> ผู้นำ </kbd> + <kbd> UP </kbd> ฉันมีข้อความ--submode: grow/shrink --และหน้าต่างถูกปรับขนาดหนึ่งบรรทัด แต่คำสั่งไม่ได้ ' ซ้ำแล้วซ้ำอีก ฉันลองกับ combinaisons 4 แห่งg:submode_keep_leaving_keyและg:submode_timeoutเป็น 0 หรือ 1 ฉันไม่แน่ใจว่าฉันทำอะไรผิดหรือเปล่า ฉันมักจะใช้เสียงเรียกเข้าในเทอร์มินัล แต่ตอนนี้ฉันสามารถทดสอบได้เฉพาะกับ gVim บน windows แต่ฉันไม่แน่ใจว่ามันเปลี่ยนอะไรบางอย่าง
statox

2
คำสั่งไม่ซ้ำอัตโนมัติคุณยังต้องกดปุ่มUpหรือDownตัวคุณเองหลาย ๆ ครั้งตามต้องการ (แต่ไม่ต้องกดปุ่มLeaderแรก)
VanLaser

โอ้ตอนนี้ฉันเข้าใจโค้ดได้ดีขึ้นแล้ว! มันทำงานได้อย่างสมบูรณ์แบบขอบคุณ!
statox

2
คำตอบที่สมบูรณ์แบบและปลั๊กอินที่น่าทึ่ง! (หมายเหตุ: คุณต้องติดตั้งปลั๊กอินvim-submodeก่อนที่จะเพิ่มคำสั่งข้างต้นให้กับคุณ~/.vimrc)
weibeld

1

ด้วยwinresizerกดCtrl- eและปรับขนาด!

คุณจะใช้ปุ่ม hjkl ปกติ (และอาจจะเป็นปุ่มลูกศร)

คุณสามารถ "ยอมรับ" การปรับขนาดหรือ "ยกเลิก" ได้

นอกจากนี้ยังมีโหมดย้ายที่คุณสลับหน้าต่างไปมาและโหมดโฟกัสที่คุณสลับหน้าต่างที่คุณใช้งานอยู่

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