การโยงคีย์แบบกำหนดเองสำหรับโหมดเชลล์ vi คือ“ set -o vi”?


18

ฉันเพิ่งค้นพบสิ่งมหัศจรรย์ของset -o viและอยากรู้อยากเห็นถ้ามันเป็นไปได้ที่จะปรับแต่งโหมดเปลือก vi นี้ในบางวิธีเดียวกันกับที่คุณสามารถปรับแต่ง vi หรือ vim?

ยกตัวอย่างเช่นการสร้างคีย์ที่กำหนดเองผูกพันกับแผนที่คีย์สะดวกมากขึ้นหรือคำสั่งผสมที่สำคัญในการesc?

หากไม่รองรับในปัจจุบันมันจะยากแค่ไหนในการปรับเปลี่ยนซอร์สโค้ดของโปรแกรมและฮาร์ดโค้ดในการปรับแต่งบางอย่างหรือว่าเป็นแนวคิดที่ไม่ดี


ฉันพบคำตอบที่นี่ < unix.stackexchange.com/questions/27699/remap-bash-vi-keys >
DinizBr

คำตอบ:


17

ได้คุณสามารถเปลี่ยนการแมปกุญแจ (สำหรับโหมด vi หรือ emacs-like) ด้วยbindbuiltin นี่เป็นฟีเจอร์ readline (ดังนั้นคุณสามารถมีการโยงเหมือน vi ในโปรแกรม readline ทั้งหมดไม่ใช่แค่ทุบตี)

กุญแจที่คุณกำลังค้นหาเรียกว่าvi-movement-modeและเริ่มต้นที่\e(หลบหนี) คุณสามารถผูกมันเข้ากับ (และนี่มันค่อนข้างโง่) เท่ากับแบบนี้ บรรทัดที่สองกำจัดการผูกเพื่อหลบหนี:

$ bind "=":vi-movement-mode 
$ bind -r "\e"

การวิ่งbind -pจะแสดงกุญแจทั้งหมดที่คุณสามารถผูกและการผูกปัจจุบันของพวกเขา (ถ้ามี)

คุณสามารถใส่bindคำสั่งใน.bashrcหรือคุณสามารถแก้ไข~/.inputrcเพื่อให้มันใช้กับโปรแกรม readline ทั้งหมดที่คุณเรียกใช้ เอกสารกำกับ readline มีรายละเอียดครบถ้วน


1
นี่มันเจ๋งมาก. ขอบคุณมาก. ฉันสามารถคิดหาวิธีที่จะผูกคอมโบที่สำคัญเช่นbind "Control-Space":vi-movement-mode- มันใช้งานได้ดี แต่สำหรับตัวอย่างในกลุ่มที่ฉันพิมพ์อักขระสองตัวในหนึ่งแถวเป็นทริกเกอร์ถึงescคือถ้าคุณพิมพ์jjคุณจะกลับสู่โหมดปกติ สิ่งนี้ไม่ทำงานเมื่อฉันพยายามผูกด้วยมีวิธีพิเศษในการทำให้ใช้งานได้หรือไม่
โยนาห์

@Jonah ไม่ได้ที่ฉันรู้ปิดมือ แต่ผมยังไม่ได้อ่านข้อมูลเอกสารที่ ReadLine เมื่อเร็ว ๆ นี้ ...
derobert

@chishaku คุณต้องนำหน้าชื่อของโจนาห์ด้วยเครื่องหมาย at ( @) มิเช่นนั้นจะไม่ได้รับการแจ้งเตือน
Derobert

2
@Jonah ฉันแค่พยายามทำสิ่งเดียวกัน คุณเคยคิดเรื่องนี้ไหม?
chishaku

1
unix.stackexchange.com/questions/303282/…คุณต้องการราคาด้วยเหตุผลบางอย่างbind '"jk":vi-movement-mode'
Hielke Walinga
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.