Das Überspringen von Wörtern mit gedrückter Alt-Links-Taste funktioniert in Terminalemulatoren nicht

16

Auf einer Debian Wheezy-Maschine in der Vergangenheit habe ich mich an Alt + Links und Alt + Rechts gewöhnt, um zwischen Wörtern in der aktiven Befehlszeile zu wechseln (in Bash).

Da ich jedoch zu Hause ein Upgrade auf Jessie (Debian 8.0, Testzweig) durchgeführt habe, funktioniert dies nicht mehr: Statt zum vorherigen Wort zu springen, druckt Alt-Links etwas wie Doder [D. OTOH, wenn ich ssh öffne und mich mit meinem kopflosen Debian Wheezy verbinde, funktioniert es perfekt.

Außerdem habe ich gerade Fedora 20 in meinem neuen Job installiert und hier ist das Verhalten dasselbe. Dies gilt für bash, csh und ksh (gestartet unter env -i) sowie für rxvt-unicode und xfce4-terminal, es muss also etwas außerhalb dieser Ebene sein.

Wo sonst im Stapel soll ich nach dem Unterschied suchen?

Alois Mahdal
quelle
4
Ich würde empfehlen, Alt-B und Alt-F (sowie den Rest der Readline-Tasten) zu versuchen, da sie universeller sind und eine ganze Reihe von Befehlszeilenprogrammen Readline-Bindungen berücksichtigen.
demure

Antworten:

21

Wahrscheinlich wurde eine lokale ~/.inputrcoder globale /etc/inputrcDatei definiert, die beim Upgrade verloren gegangen ist. Eine einfache Lösung besteht darin, eine ~/.inputrcDatei mit den folgenden Zeilen zu erstellen :

## enable Alt-arrows 
"\e[1;3D": backward-word ### Alt left
"\e[1;3C": forward-word ### Alt right

Diese funktionieren mit xtermund terminatorund müssen gnome-terminalmöglicherweise für andere Terminals angepasst werden. Leider kann jeder Terminalemulator eine andere Syntax verwenden. Weitere Details finden Sie in meiner Antwort hier .

terdon
quelle
Ich meinte wirklich Alt, und es funktioniert immer noch auf dem Remote-Computer. Strg + Links / Rechts ist bereits in Rxvt enthalten, um die Registerkarte nach links und rechts zu verschieben (Umschalt + Links / Rechts, um die Registerkarten zu wechseln, und Umschalt + Nach unten, um eine neue zu öffnen).
Alois Mahdal
1
Übrigens, während Strg + Links / Rechts in GUI-Editoren üblich ist, sind Terminals eine völlig andere Welt, in der ich diese Kombination noch nicht gesehen habe.
Alois Mahdal
10

terdon hat mich in die richtige richtung gebracht: inputrc file.

Der Täter ist, dass readline6 nicht intuitiv ~ / .inputrc anstelle von / etc / inputrc verwendet, was readline (3) weder hervorhebt noch widerlegt:

Der Name dieser Datei stammt aus dem Wert der Umgebungsvariablen INPUTRC. Wenn diese Variable nicht gesetzt ist, ist der Standard ~ / .inputrc. Wenn diese Datei nicht existiert oder nicht gelesen werden kann, lautet der endgültige Standard / etc / inputrc.

Während also in beiden Debian - Maschinen / etc / inputrc zu , dass die von einem dritten identisch ist libreadline6 Paket (die Version ist das gleiche wie gut), auf der neueren Maschine ~ / .inputrc mit einzelner Zeile vorhanden ist : set bell-style none. Wenn diese Datei gelöscht wird, funktioniert alles einwandfrei (siehe Hinweise unten).

Ich kann Fedora erst morgen überprüfen, aber ich denke, es ist das gleiche Problem. Update: Auf Fedora gab es ~ / .inputrc nicht. Hier ist die / etc / inputrc einfach anders, so dass sie dies möglicherweise nicht definiert. Als Hotfix habe ich einfach Debians Inputrc als ~ / .inputrc gespeichert.


Anmerkungen:

Das Rätsel, wie es während des Upgrades von 7 auf 8 geändert wurde, ist immer noch ungelöst, kann aber teilweise auf mein schlechtes Gedächtnis und das Jonglieren einiger unbeabsichtigter Punktedateien zurückgeführt werden. (Übrigens handelte es sich nicht um ein APT-Upgrade, sondern um ein erneutes Installieren und manuelles Verschieben von Punktdateien, so dass sich die ~ .inputrc möglicherweise irgendwie in die Quere kam.)

Außerdem, wenn ich OK sage, meine ich, dass es mit Strg überall außer Rxvt funktioniert (OK, ich habe nur xfce4-terminal angekreuzt, aber wir wissen, dass Rxvt der übliche Rebell ist), wobei dies Alt neu zugeordnet wird, anscheinend weil Strg von Rxvt übernommen wird -Funktionalität - Aktive Registerkarte in Liste verschieben.

Wie in der Manpage erwähnt, können Sie mit bash den eingebauten Bindebefehl verwenden, um zu untersuchen, was Sie aktuell haben.

Alois Mahdal
quelle
Schöner Fang, +1. Eigentlich ist es intuitiver als Sie denken. Standardmäßig haben benutzerspezifische Punktdateien Vorrang vor den systemweiten Standardeinstellungen. Andernfalls können Benutzer ihre Einstellungen nicht ändern.
Terdon
In der aktualisierten Antwort erfahren Sie, wie Sie die Tastenkombination Alt + Pfeile aktivieren.
Terdon
2
Das ist normal, du brauchst $include /etc/inputrcoben drauf, ~/.inputrcwenn du das auch lesen willst.
Chris Down
@terdon Es ist durchaus sinnvoll, Benutzereinstellungen vor systemweiten Einstellungen zu bevorzugen, aber was ich als intuitiver ansehen würde, wäre, dass ~ / .initrc mit / etc / initrc "zusammengeführt" würde (dh / etc / initrc wäre $included standardmäßig).
Alois Mahdal
1
Siehe: 1. fest codierte Optionen, 2. / etc / initrc, 3. ~ / .initrc --vs-- 1. fest codierte Optionen 2. / etc / initrc ODER ~ / .initrc. Der erste Weg ist viel flexibler, da er leicht auf eine niedrigere Ebene erweitert werden kann (z. B. pro Projekt, ich gebe zu, dass dieses Beispiel mit readline nicht so viel Sinn macht, aber Sie verstehen, worum es geht).
Alois Mahdal