Bash, wie kann man ^ H und ^ global reparieren? Probleme mit der Rücktaste

12

Ich möchte dieses häufige Problem beheben, bei dem die Shell auf einem Remote-Server denkt, dass die Rücktaste meines Terminals ist ^?und manchmal denkt ^H, dass dies der Fall ist , und zufällig falsch ist und das falsche Zeichen ausgibt, wenn ich die Rücktaste drücke. Wenn ich es auf ^ H oder ^ setze? mit stty erase ^Hoder stty erase ^?in meiner .bashrc-Datei und wenn Sie ein anderes Terminal verwenden, um auf den Server zuzugreifen, ist dies häufig falsch. Ich muss also nicht mehr manuell eingeben, um das Problem stty erase [whatever]zu beheben, wenn ich bemerke, dass die Rücktaste falsch ist.

Was ich tun möchte, ist, beide ^?und ^Hdie Rücktaste zu binden , denn wenn ich das kann, kann ich es einfach allen meinen .bashrc-Dateien hinzufügen, und es wird diesen Albtraum mit Sicherheit beenden. Ist das möglich? Wenn das so ist, wie?

Fragsworth
quelle

Antworten:

8

Diese Seite enthält alle Informationen, die Sie jemals zu diesem Thema benötigen werden. Ich schlage vor, Sie lesen es. Wenn Sie jetzt verwenden bash, sollte es ausreichen, eine ~/.inputrcDatei mit den folgenden Zeilen zu erstellen :

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

Als zusätzlichen Bonus werden sie auch machen Homeund Endarbeiten.

Terdon
quelle
2

Die meisten Informationen in http://web.archive.org/web/20120621035133/http://www.ibb.net/~anne/keyboard/keyboard.html sind in der Tat das, was Sie brauchen. Eine Korrektur der Informationen betrifft ihren Vorschlag (für 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 ^? 

Während dies XTerm dazu bringt, das richtige Zeichen zu senden und stty so zu ändern, dass Rücktaste als vorhanden ist ^?, wird es unter bestimmten Umständen immer noch fälschlicherweise ^Hals Rücktaste gemeldet , dh die Rücktaste im Vim-Instert-Modus wird unterbrochen (siehe hier: https://bugs.gentoo.org) / 154090 ). Um dies zu vermeiden, verwenden Sie VT100.backarrowKey: falsestattdessen Folgendes:

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

(siehe auch [bitte Link hier einfügen])

Amosonn
quelle
Lesen Sie "Warum brauche ich 50 Reputationen zum Kommentieren?" , Um sicherzustellen, dass Sie verstehen, wie Sie mit dem Kommentieren beginnen können.
Pimp Juice IT
Ich brauchte von niemandem eine Klärung. Vielmehr habe ich die obige Antwort klargestellt und geringfügig korrigiert. Aber wenn dies eher in einer Antwort dokumentiert ist, soll es so sein. Ich habe den Rundum-Text hinzugefügt, um eine vollständige Antwort zu erhalten.
Amosonn
Außerdem fehlt dieser Link in meiner Antwort, aber ich kann ihn dort nicht hinzufügen. wiki.archlinux.org/index.php/Xterm#Fix_the_backspace_key
amosonn