In der Bash fügt die Taste home/ end/ deleteeine Tilde ein, oder wenn die Escape-Taste vorangestellt ist:[1~
Also tippe ich echo hellp
, bewege den Cursor hel|lp
und tippe delete und bam, ich habe~tilde
Außerdem tippe ich echo hellp
, bewege den Cursor auf hel|lp
und tippe esc, dann lösche ich und bam, das habe ich[3~
$ echo hel~lp
hel~lp
$ echo hell[3~o
hell[3~o
~
Meine Version von Bash:
$ bash --version
GNU bash, version 3.1.17(1)-release (i686-pc-msys)
Copyright (C) 2005 Free Software Foundation, Inc.
Was ich will, ist Verhalten wie cmd.exe
:
- Ich möchte, dass Esc die aktuelle Zeile / den aktuellen Puffer löscht
- Ich möchte, dass Home den Cursor zum Zeilenanfang vor dem ersten Zeichen bewegt
- Ich möchte, dass End den Cursor an das Zeilenende vor dem ersten Zeichen bewegt
- Ich möchte löschen, um das nächste Zeichen (rechts vom Cursor) aus der aktuellen Zeile / dem aktuellen Puffer zu löschen
Was muss ich ändern, um dies zu beheben? Ist dies die Standardeinstellung für Ihre Bash?
Update: Ich arbeite auf einem Windows-Computer, auf dem ein Windows-Programm namens sh.exe (wie Sie oben unter GNU bash sehen können) ausgeführt wird, das mit mingw für msys kompiliert wurde:
$ uname -s -m -o
MINGW32_NT-5.1 i686 Msys
command-line
bash
keyboard-shortcuts
key-binding
Optional
quelle
quelle
Antworten:
Sie passen die Bash über eine
.inputrc
Datei in Ihrer an/home/username
, Sie können die Standarddatei kopierenhier ist meins (Kommentare beginnen mit #)
um herauszufinden , was Sie in Ihrem inputrc auf der linken Seite (der Escape - Code, wie es zwischen Laptop / Desktop ... variieren kann) eingeben müssen, an der Eingabeaufforderung geben Sie
echo '
dann Typ ,Ctrl-V
gefolgt von der Taste, wieHome
, geben Sie dann ein'
Beispielersetzen dann jeweils
^[
mit\e
Zusatz\M-
fürAlt
theoretisch Sie verwenden würden\C-
fürCtrl
aber es funktioniert noch nicht Arbeit (Fenster Begrenzung)Die verfügbaren Befehle (wie
backward-kill-line
) sind unter http://www.gnu.org/software/bash/manual/bashref.html#index-backward_002dkill_002dline-_0028C_002dx-Rubout_0029 aufgeführtSie können vorhandene Tastaturkürzel / -belegungen mit
bind -p
oder anzeigenLeg dich nicht mit TERMCAP an
quelle
find / -name 'inputrc.default'
findet nichts auf meinem Rechner. Meine Wohnung und mein Ende haben früher gearbeitet ... :( Auch zu Ihrer Information an andere: Um die .inputrc-Datei neu zu laden, verwenden Siebind -f ~/.inputrc
.$if mode=emacs
Block. Ich habe diese beiden Zeilen hinzugefügt und sie funktionieren wieder !! : D"\e[1~": beginning-of-line ... "\e[4~": end-of-line
.Nun, da Sie sagen, dass Sie unter Windows arbeiten und keinen geeigneten Terminal-Emulator wie PuTTY (mit Mintty , Puttycyg und anderen ) verwenden, würde ich Ihnen empfehlen, die readline-Dokumentation zu konsultieren und die Shortcuts für readline zu erlernen. Es wird auf lange Sicht besser sein.
Wenn Sie einen Terminalemulator anstelle des Konsolenfensters verwenden (hier nicht den Interpreter / die Shell), das / die mit Windows geliefert wird, erhalten Sie eine besser konfigurierbare Alternative. Sobald Sie versuchen, andere Programme wie Vim zu verwenden, wird es nur noch schlimmer.
Das Wichtigste: Verwenden Sie einen geeigneten Terminal-Emulator, auch unter Windows, oder lernen Sie die Readline-Verknüpfungen. Ich habe die getestet, die ich gerade am meisten benutze und sie funktionieren mit
msys.bat
.Die Datei zu bearbeiten würde sein
/usr/share/terminfo
(was nicht in MinGW nicht existiert) - Einsatztic
auf „Compile“ Regeln (die , weil jeder enthält nicht einmal weiß , dass die Unterstützung wäre schwer verkrüppelt werden). Ich habe jedoch noch keine nützliche Entwicklung gesehen, die es mir ermöglicht, diese Funktion auch unter Windows nahezu nutzbar zu machen. Aus diesem Grund sollten Sie zunächst einen geeigneten Terminalemulator verwenden. Aber ich bin mir sicher, dass ein Chirurg ein Küchenmesser für die Operation verwenden kann. Warum sollten Sie nicht die in Windows integrierten Konsolenfenster verwenden? Viel Glück.quelle
Überprüfen Sie, ob Readline installiert ist
Wenn dies bei einer Minimalinstallation von Debian / Ubuntu der Fall ist, liegt dies wahrscheinlich daran, dass Sie das
readline-common
Paket nicht installiert haben . Durch einfaches Installieren des Pakets wird das Problem behoben.ZB auf Docker mit Debian Stretch-Eingabe
ls
HOME:Bitte beachten Sie, dass nach der Installation von readline-common nur neue Login-Shells betroffen sind.
quelle
exec bash
Dies ist eine Möglichkeit, die aktuelle Bash-Instanz durch eine neue zu ersetzen, ohne das Terminal zu verlassen (wie dies beim Spielen in einem Container pTTY erforderlich ist).Ich fand auch Folgendes hilfreich: https://wiki.archlinux.org/index.php/Home_and_End_keys_not_working
Speziell:
Wenn Ihre Schlüssel nicht funktionieren, kann dies daran liegen, dass Ihr spezielles Terminal Escape-Codes sendet, die nicht in dieser Liste aufgeführt sind. Zuerst müssen Sie herausfinden, welche Escape-Codes gesendet werden. Um sie anzuzeigen, können Sie den Readline-Befehl "quoted-insert" verwenden oder den Befehl showkey --scancodes ausführen, der den Wert eines Schlüssels wörtlich ausgibt. Die Standardbindung für quoted-insert ist Strg + V.
Sie können beispielsweise die folgenden Eingaben in Ihr Terminal eingeben:
Und als Ausgabe erhalten
$ ^ [[1 ~ ^ [[4 ~
Das ^ [zeigt ein Escape-Zeichen in Ihrer Shell an. Dies bedeutet, dass Ihre Home-Taste einen Escape-Code von [1 ~ und Ihre End-Taste einen Escape-Code von [4 ~ hat. Da diese Escape-Codes nicht in der Readline-Standardkonfiguration aufgeführt sind, müssen Sie sie hinzufügen:
Beachten Sie, dass Readline mit \ e ein Escapezeichen kennzeichnet.
Das für mich relevante Stück war, dies in inputrc zu setzen:
quelle