Bash วิธีการแก้ไขทั่วโลก ^ H และ ^? ปัญหา backspace


12

ฉันต้องการแก้ไขปัญหานี้บ่อยครั้งที่เชลล์บนเซิร์ฟเวอร์ระยะไกลคิดว่าคีย์ backspace ของเทอร์มินัลของฉัน^?และบางครั้งก็คิดว่ามันเป็น^Hและเกิดขึ้นไม่ถูกต้องและส่งออกอักขระที่ไม่ถูกต้องเมื่อฉันกด backspace หากฉันตั้งเป็น ^ H หรือ ^ ด้วยstty erase ^Hหรือstty erase ^?ในไฟล์. bashrc ของฉันและใช้เทอร์มินัลอื่น ๆ เพื่อเข้าถึงเซิร์ฟเวอร์มันมักจะผิดพลาด ดังนั้นฉันจึงต้องพิมพ์ด้วยตนเองstty erase [whatever]เพื่อแก้ไขเมื่อฉันสังเกตเห็นว่าปุ่ม backspace ผิด

สิ่งที่ฉันต้องการทำคือผูกทั้งสอง^?และ^Hย้อนกลับเพราะถ้าฉันสามารถทำสิ่งนี้ได้ฉันสามารถเพิ่มมันลงในไฟล์. bashrc ทั้งหมดของฉันและมันจะจบฝันร้ายนี้อย่างแน่นอน เป็นไปได้ไหม ถ้าเป็นเช่นนั้นได้อย่างไร

คำตอบ:


8

หน้านี้มีข้อมูลทั้งหมดที่คุณต้องการในเรื่องนี้; ฉันแนะนำให้คุณอ่าน ตอนนี้ถ้าคุณกำลังใช้bashงานมันควรจะเพียงพอที่จะสร้าง~/.inputrcไฟล์ที่มีบรรทัดเหล่านี้:

"\e[3~": delete-char
# this is actually equivalent to "\C-?": delete-char
# VT
"\e[1~": beginning-of-line
"\e[4~": end-of-line
# kvt
"\e[H":beginning-of-line
"\e[F":end-of-line
# rxvt and konsole (i.e. the KDE-app...)
"\e[7~":beginning-of-line
"\e[8~":end-of-line

ในฐานะที่เป็นโบนัสเพิ่มเติมพวกเขาจะทำHomeและEndทำงานได้ดี


2

ข้อมูลส่วนใหญ่ในhttp://web.archive.org/web/20120621035133/http://www.ibb.net/~anne/keyboard/keyboard.htmlเป็นสิ่งที่คุณต้องการอย่างแท้จริง การแก้ไขหนึ่งข้อมูลเป็นของข้อเสนอแนะ (สำหรับ XTerm):

*VT100.Translations: #override \
          <Key>BackSpace: string(0x7F)\n\
          <Key>Delete:    string("\033[3~")\n\
          <Key>Home:      string("\033[1~")\n\
          <Key>End:       string("\033[4~")
*ttyModes: erase ^? 

ในขณะที่สิ่งนี้จะทำให้ XTerm ส่งตัวละครที่ถูกต้องและเปลี่ยน stty ให้เป็น backspace ในขณะที่^?มันยังคงรายงาน^Hเป็น backspace ภายใต้บางโอกาสโดยแบ่งเป็น backspace เช่นใน backspace ในโหมด Vim instert (ดูที่นี่: https://bugs.gentoo.org / 154090 ) เพื่อหลีกเลี่ยงปัญหานี้ให้ใช้VT100.backarrowKey: falseแทนดังนั้น:

*VT100.backarrowKey: false
*VT100.Translations: #override \
          <Key>Delete:    string("\033[3~")\n\
          <Key>Home:      string("\033[1~")\n\
          <Key>End:       string("\033[4~")
*ttyModes: erase ^? 

(โปรดดู [กรุณาใส่ลิงค์ที่นี่])


อ่าน"ทำไมฉันต้องมี 50 ชื่อเสียงในการแสดงความคิดเห็น"เพื่อให้แน่ใจว่าคุณเข้าใจว่าคุณสามารถเริ่มแสดงความคิดเห็นได้อย่างไร
Pimp Juice IT

ฉันไม่ต้องการคำชี้แจงใด ๆ จากใคร ค่อนข้างฉันให้คำอธิบายและแก้ไขเล็กน้อยสำหรับคำตอบข้างต้น แต่ถ้าเป็นเอกสารในคำตอบให้ลองทำดู ฉันเพิ่มข้อความรอบทำให้คำตอบเต็ม
amosonn

นอกจากนี้ลิงก์นี้หายไปจากคำตอบของฉัน แต่ฉันไม่สามารถเพิ่มได้ wiki.archlinux.org/index.php/Xterm#Fix_the_backspace_key
amosonn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.