Auf der Suche nach ALT + LeftArrowKey-Lösung in zsh

126

Ich habe erst kürzlich von Bash zu Zsh gewechselt, aber ich vermisse mein Alt+ LeftArrowKeyund Alt+ RightArrowKey, um ein Wort nach dem anderen hin und her zu gehen.

Wenn ich jetzt Alt+ drücke, LeftArrowKeygehe ich ein paar Buchstaben zurück und stecke dann fest. Ich werde nicht weiter rückwärts gehen und es wird nicht mit Alt+ RightArrowKeyzum Ende der Zeile zurückkehren, wie ich es erwarten würde. Ich kann nicht einmal die Pfeiltasten verwenden, um zum Ende der Zeile zu gelangen, nur zum vorletzten. Es können auch keine neuen Zeichen in die Zeile eingegeben oder gelöscht werden.

Wie bekomme ich meine geliebte Verknüpfung zurück?

Ich bin unter Mac OS X und benutze Terminal, wenn das wichtig ist.

Mads Ohm Larsen
quelle

Antworten:

239

Führen Sie catdie Taste aus und drücken Sie die Tasten, um die Codes anzuzeigen, die Ihre Verknüpfung sendet.
(Drücken Ctrl+ Cdie zu töten , catwenn Sie fertig sind.)
Für mich (ubuntu, konsole, xterm) drücken Alt+ sendet ^[[1;3D, so dass ich in meinem setzen würde .zshrc

bindkey "^[[1;3C" forward-word
bindkey "^[[1;3D" backward-word

(Eigentlich bevorzuge ich die Verwendung von Ctrl+ Pfeil, um Wort für Wort zu verschieben, wie in einem normalen Textfeld unter Windows oder Linux-GUI.)

Verwandte Frage: Korrigieren Sie die Schlüsseleinstellungen (Home / End / Insert / Delete) in .zshrc, wenn Sie Zsh im Terminator Terminal Emulator ausführen

lolesque
quelle
14
Du bist mein Retter! Auf meinem Mac gab "Alt + <-" "^ [b" und -> "^ [f", also habe ich diese hinzugefügt. Klappt wunderbar. Strg + Pfeile sind für den Wechsel zwischen Desktops auf dem Mac reserviert.
Mads Ohm Larsen
Eine Anmerkung ist, dass für Strg + <- Katze ^[[Dfür mich berichtet hat, während Strg + V berichtet hat ^[OD. Der Vorschlag von Strg + V hat funktioniert, der von Katze jedoch nicht. Darüber hinaus meldete Strg + V für Alt + <- und Alt + -> dasselbe. Ich konnte diese beiden hinzufügen, indem ich mir die Ausgabe der Katze ansah und jedes "[[" durch "O" ersetzte
Mike S
10
Meine Ausgabe unter cat ist ^[^[[Cfür Vorwärtswort und ^[^[[Dfür Rückwärtswort, aber das Aktualisieren für diese in .zshrc hat aus irgendeinem Grund nicht funktioniert.
Yunti
2
@Yunti - Putting bindkey "^[^[[D" backward-wordund bindkey "^[^[[C" forward-wordin ~ / .zprofile hat bei mir funktioniert!
Fernando Espinosa
Mann! Rettete mein Leben! danke für das Teilen!
Joao Henrique
185

Für alle, die iTerm verwenden, unabhängig von der Shell

Alle hier angebotenen Lösungen gehen meiner Meinung nach rückwärts. Sie weisen Ihre Shell im Wesentlichen an, auf eine Esc-Sequenz oder eine andere Schlüsselbindung zu warten, die Sie in Ihrem Terminal festgelegt haben, was zu Kompatibilitätsproblemen führt, wenn Sie Shells wechseln (Wenn Sie SSH in eine andere Shell wechseln, wechseln Sie von BASH zu ZSH usw., und Sie verlieren einige, wenn nicht alle Ihrer Tastenkombinationen).

Die meisten Shells haben eine Reihe von Standardsequenzen, die vorgebunden sind. Obwohl sie nicht 100% konsistent sind, sind sie nah genug. Der einfachste Weg, um eine Schlüsselbindung für eine bestimmte Aktion in der Shell zu erstellen, besteht darin, Ihre Terminalanwendung anzuweisen, sich an die Standard-Tastenkombinationen zu binden, die über alle Shells hinweg konsistent sind.

Ich schrieb eine Drucklösung für Ihren Terminal reagiert so nah an nativen Mac keybindings bekommen hier

Öffnen Sie die iTerm-Einstellungen + ,und navigieren Sie zur ProfilesRegisterkarte (die KeysRegisterkarte kann verwendet werden, aber durch Hinzufügen einer Tastenkombination zu Ihrem Profil können Sie Ihr Profil speichern und mit mehreren Computern synchronisieren) und zur keysUnterregisterkarte und geben Sie Folgendes ein:

Bewegen Sie den Cursor ein Wort nach links

+ Hex-Codes senden:0x1b 0x62

Bewegen Sie den Cursor ein Wort nach rechts

+ Hex-Codes senden:0x1b 0x66

Und das sollte Ihnen das gewünschte Verhalten nicht nur in ZSH geben, sondern auch, wenn Sie SSH auf einem Server ausführen, auf dem BASH, irb / pry, node usw. ausgeführt werden.

Travis
quelle
1
Ich hatte Probleme mit der akzeptierten Lösung, weil zsh gut funktionierte, aber nicht irb und andere Konsolen. Das Löschen vorheriger Einstellungen (im iTerm-Profil wie vorgeschlagen) funktioniert wie ein Zauber!
Llekn
1
Die Bindkey-Lösung würde auf dem Mac einen nervigen Fehler verursachen. Dies sollte der richtige Weg sein.
Weishi Zeng
@Lev Wahrscheinlich, weil entweder Ihre Shell nicht der Standardkonfiguration zugeordnet ist. Ausführen bindkey | grep forward-wordsollte "^[f" forward-wordangezeigt werden, aber wenn Sie dies nicht tun, haben Sie zwei Möglichkeiten. Karte zu einem der anderen zurückgegebenen oder "^[f" forward-wordzu Ihrem hinzufügen .zshrc.
Travis
Ich werde bemerken, dass "^[f"dies die am häufigsten verwendete Bindung für die forward-wordVerwendung über Shells hinweg zu sein scheint und die einzige, die standardmäßig in meiner Bash-Version festgelegt wurde.
Travis
Irgendwie funktionierte es bei mir mit der Befehlsschaltfläche anstelle der Option. Danke, Mann. :)
Vaibhav Jain
72

Das Hinzufügen von Folgendem zu ~ / .zshrc funktionierte für mich unter OSX Mountain Lion.

bindkey -e
bindkey '[C' forward-word
bindkey '[D' backward-word
Rob Sawyer
quelle
4
Diese Lösung löst bei jeder Verwendung eine "Glocke" in iTerm 2 aus, sodass das Wechseln zwischen Wörtern sehr ärgerlich werden kann.
Matthew Morek
1
Jeder findet heraus, wie man dies deaktiviert. ^ @MatthewMorek
Daniel Kobe
18
'\ e \ e' verhindert die Glocke. Meine Konfiguration auf El Capitan mit iTerm 2 im Terminal-Kompatibilitätsmodus ist bindkey "\e\e[D" backward-word bindkey "\e\e[C" forward-word
Johannes Gontrum
Vielen Dank, dies hat das Problem auf macOs Sierra gelöst. Ich bekomme weder auf dem Terminal noch auf iTerm2 Klingeltöne.
Raspo
Wie stellen Sie es so ein, dass es sich vom Ende der Wörter und nicht vom Anfang oder von ihnen entfernt?
Mafro34
22

Unter MacOS High Siera 10.13.6 oder Mojave 10.14.2 und unter Verwendung von iTerm2 mit ZSH Um mich von Wörtern zu entfernen, muss ich Folgendes sagen:

bindkey "\e\e[D" backward-word
bindkey "\e\e[C" forward-word

Eine andere Lösung funktioniert nicht

Vetalll
quelle
1
Dies ist die einzige Lösung, die auch für mich funktioniert hat. Danke dir! Mac OS Mojave
Jamescampbell
Funktioniert auch unter OS Catalina!
Reed Richards
7

Obwohl nicht unbedingt Ihre Frage zu beantworten, verbindlich die Standardeinstellung für forward-wordund backward-wordist alt-fresp. alt-b.

Dies funktioniert überall, erfordert nicht, dass Sie die Ausgangsreihe verlassen, und hat eine schöne mnemonische Eigenschaft (f = vorwärts, b = zurück), ist aber auch konsistent mit ctrl-fund ctrl-bsein forward-characterund backward-character.

Zerreiße deine Pfeiltasten!

0x89
quelle
4
funktioniert bei mir nicht in zsh / iterm2, druckt ƒ und ∫ (cb cf works).
Davorin
2

Damit es für mich funktioniert, habe ich diese Antwort verwendet , musste jedoch die Codes austauschen (links <-> rechts)

⌥ + ← Hex-Codes senden: 0x1b 0x66
⌥ + → Hex-Codes senden: 0x1b 0x62

und füge folgendes zu meinem hinzu ~/.zshrc

bindkey -e
bindkey "^[b" forward-word
bindkey '^[f' backward-word
iRonin
quelle
1

Auf Mavericks (10.9.4) ist der Code 1; 5 ... zum Binden von Alt mit Pfeilen habe ich meine .zshrc mit folgendem:

bindkey "^[[1;5C" forward-word
bindkey "^[[1;5D" backward-word

Sie können STRG + V und dann den Befehl verwenden, den Sie verwenden möchten

Verwenden Sie in Yosemite Robs Lösung

ZeoS
quelle
1
bindkey "[C" forward-word bindkey "[D" backward-word
Farkie
0

In zsh können Sie mit dem bindkeyBefehl Tastaturkürzel anzeigen.

Verwenden Sie bindkeydiese Option, um Optionen zu untersuchen, die ohne benutzerdefinierte Tastenkombinationen verfügbar sind.

Nämlich ^[b zu bewegen , um ein Wort nach hinten und ^[fein Wort vorwärts zu.

MCI
quelle