Bash, bagaimana cara memperbaiki ^ H dan ^ secara global? masalah backspace

12

Saya ingin memperbaiki masalah yang sering terjadi di mana shell pada server jauh berpikir kunci backspace terminal saya ^?dan kadang-kadang berpikir itu ^H, dan kebetulan salah dan menampilkan karakter yang salah ketika saya menekan backspace. Jika saya atur ke ^ H atau ^? dengan stty erase ^Hatau stty erase ^?dalam file .bashrc saya, dan menggunakan beberapa terminal lain untuk mengakses server, seringkali berakhir salah. Jadi saya terjebak harus mengetik secara manual stty erase [whatever]untuk memperbaikinya ketika saya melihat kunci backspace salah.

Yang ingin saya lakukan adalah mengikat keduanya ^?dan ^Hmundur, karena jika saya bisa melakukan ini, saya bisa menambahkannya ke semua file .bashrc saya, dan itu pasti akan mengakhiri mimpi buruk ini. Apakah ini mungkin? Jika ya, bagaimana caranya?

rapuh
sumber

Jawaban:

8

Halaman ini memiliki semua informasi yang Anda perlukan tentang masalah ini; Saya sarankan Anda membacanya. Sekarang, jika Anda menggunakan bash, itu harus cukup untuk membuat ~/.inputrcfile yang berisi baris-baris ini:

"\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

Sebagai bonus tambahan, mereka akan membuat Homedan Endbekerja juga.

terdon
sumber
2

Sebagian besar informasi di http://web.archive.org/web/20120621035133/http://www.ibb.net/~anne/keyboard/keyboard.html memang yang Anda butuhkan. Salah satu koreksi terhadap informasi, adalah saran mereka (untuk 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 ^? 

Walaupun ini akan membuat XTerm mengirim karakter yang tepat, dan mengubah stty untuk memiliki backspace sebagai ^?, ia masih akan melaporkan secara misterius ^Hsebagai backspace dalam beberapa kesempatan, melanggar ie backspace dalam mode insting Vim (lihat di sini: https://bugs.gentoo.org / 154090 ). Untuk menghindari ini, gunakan VT100.backarrowKey: falsesebaliknya, jadi:

*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 ^? 

(lihat juga [silakan masukkan tautan di sini])

amosonn
sumber
Baca "Mengapa saya perlu 50 reputasi untuk berkomentar" untuk memastikan Anda memahami bagaimana Anda dapat mulai berkomentar.
Pimp Juice,
Saya tidak memerlukan klarifikasi dari siapa pun. Sebaliknya, saya memberikan klarifikasi dan koreksi kecil untuk jawaban di atas. Tapi, jika ini agak didokumentasikan dalam jawaban, biarlah. Saya menambahkan teks sekitar sehingga menjadi jawaban lengkap.
Amosonn
Juga, tautan ini hilang dari jawaban saya, tetapi saya tidak dapat menambahkannya di sana. wiki.archlinux.org/index.php/Xterm#Fix_the_backspace_key
amosonn