วันนี้ฉันมีคำถามอื่นอีก:
ทำไมเมื่อฉันใส่สิ่งเหล่านี้เข้าไป.inputrc
พวกเขาทั้งสองทำสิ่งเดียวกัน
TAB: menu-complete
Shift-TAB: menu-complete-reverse
เช่นพวกเขาทั้งสองทำสิ่งที่คนสุดท้ายพูด
วันนี้ฉันมีคำถามอื่นอีก:
ทำไมเมื่อฉันใส่สิ่งเหล่านี้เข้าไป.inputrc
พวกเขาทั้งสองทำสิ่งเดียวกัน
TAB: menu-complete
Shift-TAB: menu-complete-reverse
เช่นพวกเขาทั้งสองทำสิ่งที่คนสุดท้ายพูด
คำตอบ:
Readline ไม่รู้อะไรเกี่ยวกับโมดิฟายเออร์ที่เรียกShift
และไม่สนใจชื่อโมดิฟายเออร์ที่ไม่รู้จักอย่างเงียบ ๆ ลองwibble-TAB
ดู
ในการผูกการกระทำกับShift+ Tabคุณจะต้องค้นหาลำดับการหลบหนีที่เทอร์มินัลของคุณส่ง ในทุบตีวิ่งcat
และประเภทCtrl+ Vแล้ว+Shift Tabสิ่งนี้จะแทรกลำดับการหลบหนีอย่างแท้จริง เป็นไปได้ว่าตัวอักษรตัวแรกจะเป็นตัวหนีแสดงเป็น^[
; เทอร์มินัลต่าง ๆ มีลำดับการหลีกเลี่ยงที่แตกต่างกัน แต่ความเป็นไปได้ทั่วไปคือ␛[Z
(เช่นการหลบหนีวงเล็บซ้ายตัวพิมพ์ใหญ่ Z) และ␛␉
(เช่นการหลบหนีแท็บ) ผูกกุญแจไว้อย่างเหมาะสมใน~/.inputrc
(ซึ่ง\e
หมายถึงอักขระหลบหนี)
"\e\t": menu-complete-backward
"\e[Z": menu-complete-backward
cat
หลีกเลี่ยงการผูก bash ใด ๆ โดยทั่วไปแล้ว bash จะมีการกด Ctrl + V เหมือนกันเพื่อแทรกตัวอักษรตัวถัดไปดังนั้นมันจึงไม่ได้สร้างความแตกต่าง
$ cat <Enter> <Shift+Tab>
จอแสดงผลใด^[[Z
ฉันจะเพิ่ม\e
ล่วงหน้าตามลำดับที่ได้รับเสมอCtrl+V
หรือไม่ สิ่งนี้แปลเป็น:"\e^[[Z": shell-expand-command
^[
ด้วย `\ e`
บน Xubuntu 16.04 เทอร์มินัล: xfce4-terminal 0.6.3, shell: bash
สำหรับShift+ Tabในการทำงานฉันต้องใช้:
bind '"\e[Z": menu-complete-backward'
~/.bash_profile
ใช้งาน: bind TAB:menu-complete
และbind '"\e[Z": menu-complete-backward'
(บันทึกการใช้คำพูดเดี่ยวและคู่!)
^[Z
ทำงานให้ฉัน (BASH); ขอบคุณสำหรับคำตอบอย่างละเอียด! :)