เหตุใดจึงไม่ Ctrl + m และ Ctrl + q ใช้ในทางลัด bash


15

เมื่อเร็ว ๆ นี้ฉันได้ตรวจสอบปุ่มทางลัดทุบตีและพยายามหาปุ่มที่เหมาะสมสำหรับรหัสเปิดใช้งาน tmux ของฉัน

ฉันคิดว่ามันน่าสนใจที่ctrl + mและctrl + qไม่ได้ใช้ในทางลัดทุบตีตามhttps://en.wikipedia.org/wiki/Bash_(Unix_shell)

ทำไมพวกเขาไม่ใช้? ฉันรู้สึกว่าctrl + mมีประโยชน์มาก

ชุดค่าผสมทั้งสองนี้มีจุดประสงค์จากการออกแบบเพื่อDIY (define it yourself)การใช้งานหรือไม่ หรือมีเรื่องอื่นหรือไม่


1
การใช้งานALT + mนั้นสะดวกยิ่งกว่า
Rolf

คำตอบ:


16

Ctrl + M ส่งอักขระเดียวกัน (RET) เหมือนกับปุ่ม Enter ในเทอร์มินัล โปรแกรมไม่มีวิธีที่จะแยกพวกเขาออกดังนั้นจึงไม่สามารถกำหนดค่าคีย์เหล่านี้แยกกันได้

Ctrl + Q ถูกใช้แล้วสำหรับXONโดยค่าเริ่มต้นดังนั้นจึงไม่สามารถใช้งานได้โดย Bash แต่คุณควรจะสามารถใช้มันใน tmux ได้เนื่องจาก tmux ใช้โหมดอินพุตดิบ

โปรแกรม GUI สามารถอ่านจากคีย์บอร์ดได้ว่ากดแป้น m ด้วยตัวปรับแต่ง Ctrl และใช้ Ctrl + m เป็นทางลัด แต่เชลล์หรือโปรแกรมเทอร์มินัลใด ๆ รับชุด Ctrl + Key รวมกันเป็นอักขระ ASCII จาก 0 ถึง 26

Ctrl+@ = 0
Ctrl+A = 1
Ctrl+B = 2

และอื่น ๆ คุณสามารถลองสิ่งนี้เพื่อดูค่า

cat ctrlkeys <<EOF
^A^B^C^D^E^F
EOF
od -c ctrlkeys
0000000 001 002 003 004 005 006  \n

ในการป้อนค่าให้กด Ctrl + v ก่อน Ctrl + [af] เพื่อรับค่าที่ไม่ถูกตีความเป็นค่า raw

เมื่อคุณดูตาราง ascii (7) คุณจะเห็นรหัสควบคุมในตารางที่มีอักขระที่เกี่ยวข้อง @ .. Z ทางด้านซ้าย ตัวอย่างเช่น

015   13    0D    CR  '\r' (carriage ret)     115   77    4D    M

หรือ

011   9     09    HT  '\t' (horizontal tab)   111   73    49    I

เลเยอร์ถัดไปที่ตีความรหัสควบคุมก่อนทุบตีคือ stty (เปลี่ยนและพิมพ์การตั้งค่าเทอร์มินัล)

stty -a
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O;

ดู stty (1) ความหมายของlnextหรือและstartstop

ดู readline (3) เป็น bash และโปรแกรม GNU cli อื่น ๆ ใช้ไลบรารีนั้นเพื่อควบคุมบรรทัดอินพุตและแน่นอน bash (1) / READLINE ส่วน readline ของหน้า bash manual

หมายเหตุ: XYZ (NUM) หมายถึงหน้า XYZ คู่มือจากส่วน NUM man NUM XYZดังนั้นผลมาจากการ


1
Bash มีการเชื่อมโยงเริ่มต้นสำหรับ Cs (XOFF) ดังนั้นจึงสามารถใส่ Cq ได้เช่นกัน
Gilles 'หยุดชั่วร้าย'

ตามความเป็นจริงแล้วไลบรารี GNU Readline ที่ Bash ใช้ binds C-qกับสิ่งเดียวกันกับที่เป็นC-vโคลนของฟังก์ชัน Emacs quoted-insertซึ่งมีประโยชน์ในการหารหัสหลบหนีที่สร้างขึ้นโดยคีย์และคอมโบคีย์ นี่คือส่วนที่เกี่ยวข้องของคู่มือ Readline: tiswww.case.edu/php/chet/readline/readline.html#SEC9
ssokolow
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.