วันนี้ฉันมีคำถามอื่นอีก:
ทำไมเมื่อฉันใส่สิ่งเหล่านี้เข้าไป.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); ขอบคุณสำหรับคำตอบอย่างละเอียด! :)