Warum funktioniert Strg-Pfeil in Bash unter OS X nicht?

14

Ich verwende Ctrl- und Ctrl- auf jedem Linux-System, auf dem ich arbeite, aber diese Tastenkombinationen funktionieren nicht in Bash auf meinem Macbook Pro. Es wird Snow Leopard ausgeführt und ich verwende die integrierte Terminal-Anwendung.

Die Tastenkombinationen scheinen von nichts zuvor oder von Terminal erfasst zu werden, denn wenn ich zu einem meiner Linux-Server ssh, kann ich Ctrl- / verwenden , um zum nächsten / vorherigen Wort in der Befehlszeile zu springen. Wenn ich diese Tastenkombination jedoch in Bash auf meinem MacBook versuche, erhalte ich nur "C" für den rechten Pfeil und "D" für den linken Pfeil.

Irgendwelche Ideen, wie ich diese Schlüssel in Darwin Bash zum Laufen bringen kann?

Ryan Olson
quelle
2
Wenn Sie Leerzeichen verwenden, wechseln Sie mit Strg + Pfeil standardmäßig die Leerzeichen.
Mark4o
1
Ähnlich
Bis auf weiteres angehalten.

Antworten:

13

OS X verwendet die Standard-Emacs-Schlüsselbindung. Dies ist wahr, ist praktisch jede Anwendung unter OS X, es ist ziemlich schön. Das bedeutet, dass Dinge wie Ca und Ce am Anfang / Ende der Zeile stehen. Mit M-backspace bekommst du auch den raffinierten Backward-Word-Kill und mit Ck die Kill-Line.

Dies sollte bedeuten, dass in Ihrem Terminal Vorwärts- / Rückwärtswort an Mf bzw. Mb gebunden sind (M = Meta = alt / option), was jedoch nicht der Fall ist. Unter OS X sind Vorwärts- / Rückwärtswort standardmäßig an M- → und M- ← gebunden.

Sie können dieses Verhalten ändern, indem Sie die Konfiguration der GNU Readline Library für Ihr Konto ändern. Dies erfolgt in Ihrer ~/.inputrcDatei. Sie können eine große Liste bindbarer Befehle mit man readlinesowie in der Online-Dokumentation wie hier erhalten. .

Um Ihre Frage zu beantworten, möchten Sie neu zuordnen, was Readline tut, wenn es C- → und C- ← sieht, um das zu tun, was es auf Ihrem Linux-Server tut.

Die Syntax für eine ~/.inputrcDatei ist ziemlich einfach für das, was Sie tun möchten: key-sequence: action.

Dies sollte das sein, was Sie benötigen, um das gewünschte Verhalten zu erzielen:

"\e[5C": forward-word
"\e[5D": backward-word

Hier ist eine weitere Seite mit zusätzlichen nützlichen Bindungen.

(Sie könnten wahrscheinlich davonkommen, / etc / inputrc von Ihrer Linux-Box auf Ihr OS X zu kopieren ~ / .inputrc)

Tim Bielawa
quelle
Ein Hinweis: Wenn Sie tmux häufig mit xterm-keys benutzen, brauchen Sie auch \e[1;5Cund, \e[1;5Dum auch forward-wordund auszulösen backward-word.
Arne
2
Ein weiterer Hinweis: Wenn dies immer noch nicht funktioniert, liegt möglicherweise ein Konflikt mit der Mission Control / Spaces vor. Systemeinstellungen -> Tastatur -> Tastenkombinationen -> Mission Control, bewegen Sie sich nach links / rechts ein Leerzeichen
BHH1988
Ich verstehe nicht "OS X verwendet standardmäßig die Emacs-Schlüsselbindung." "Strg-Pfeil" ist auch eine Emacs-Tastaturbindung.
Greg
3

Tragen Sie ~/.inputrcfolgende Zeilen ein:

"\e[5C": forward-word
"\e[5D": backward-word
tig
quelle
0

In diesen Tagen scheinen sich die Escape-Sequenzen, die Strg-Pfeile im Terminal ausgeben, geändert zu haben. Folgendes funktioniert für mich ab heute (Ende 2018):

"\e[1;5C": forward-word "\e[1;5D": backward-word

Hinweis: Sie können die tatsächlichen Escape-Sequenzen jederzeit ermitteln, indem Sie cat -vdas Terminal eingeben und Strg-Linkspfeil oder Strg-Rechtspfeil drücken. Hier ist eine Beispielausgabe für meinen eigenen Strg-Linkspfeil:

^[[1;5C ^[[1;5C

.inputrcErsetzen Sie das Fluchtzeichen ^[durch \eund setzen Sie das Ergebnis in doppelte Anführungszeichen , um es in Umgangssprache zu übersetzen .

DomQ
quelle
0

Wie @ bhh1988 erwähnt, verhindert die Mission Control-Konfiguration, dass die Strg-Tasten mit den Pfeiltasten in arbeiten bash. Ich wollte diese Verknüpfungen nicht stören, also benutze ich stattdessen die Wahltaste (dh die Alt-Taste). Derzeit ist Mojave mit einer deutschen Tastatur (ich weiß nicht, ob das relevant ist). Ich habe Folgendes eingegeben .inputrc, um mit der Option-Links-Taste und der Option-Rechts-Taste zwischen den Wörtern zu wechseln.

"\e\e[C": forward-word
"\e\e[D": backward-word
Peter Evans
quelle