ALT + Pfeil zwischen Wörtern in zsh und iTerm2

19

Ich habe mich auf einem Hosting-Provider-Server angemeldet und festgestellt, dass ALT + links und ALT + rechts in einer Shell-Eingabeaufforderung in GNU Screen zwischen den Wörtern verschoben wurden.

Welche Art von Tastenkombinationen muss ich konfigurieren und woher soll dieses Verhalten für mein lokales OS X zsh, das in iTerm2 ausgeführt wird, stammen?

Mikko Ohtamaa
quelle
Leute, die an dieser Frage interessiert sind, könnten auch interessiert sein zu wissen, dass zsh-Wörter keine bash-Wörter sind. FOO=BARist ein Wort für zsh und 2 Wörter für bash. Wenn Sie den Cursor auf das Ende von setzen foo --barund die Tastenkombination Alt + Rücktaste drücken, erhalten Sie in Bash foo --und in Zsh foo . Zsh fügt Bash viele Funktionen hinzu, aber es gibt auch viele verrückte Standardeinstellungen, die überschrieben werden müssen.
weberc2

Antworten:

28

Ich habe die Lösung hier gefunden: https://coderwall.com/p/h6yfda . Kopiert die wichtigsten Teile davon, falls der Link ausfällt.

  1. Gehen Sie zu Einstellungen, Profil, Schlüssel.
  2. Stellen Sie die linke Taste ⌥ ein, um als Escape-Zeichen zu fungieren.
  3. Suchen Sie die aktuelle Verknüpfung für ⌥ ← oder erstellen Sie eine neue mit den folgenden Einstellungen:
    • Tastaturkürzel: ⌥ ←
    • Aktion: Escape-Sequenz senden
    • Esc +: b
  4. Wiederholen Sie diesen Vorgang für die Tastenkombination ⌥ → mit den folgenden Einstellungen:
    • Tastaturkürzel: ⌥ →
    • Aktion: Escape-Sequenz senden
    • Esc +: f
Willington Vega
quelle
1
Es ist erwähnenswert, dass es spezifisch für einen bestimmten Terminalemulator ist - nicht für zsh im Allgemeinen.
Hi-Angel
6

Sie suchen nach den Stichwörtern backward-wordund forward-word. Wenn Sie sich also in einer Shell befinden, in der die Tastenkombinationen nicht funktionieren, versuchen Sie bindkey -L | grep backward-word, zu überprüfen, ob sie überhaupt konfiguriert sind. Weitere Informationen hierzu finden Sie in zshzle (1) .

Sie können die Tastenzuordnung manuell festlegen, indem Sie Folgendes eingeben:

bindkey ' Ctrl+ v Alt+ Right' vorwort

Bindetaste ' Ctrl+ v Alt+ Left' Rückwärtswort

Ich hatte auch einige Probleme mit Tastenkombinationen und das Problem war fast immer, dass die Option / Alt-Taste etwas anderes als das erwartete Meta / Escape gesendet hat.

Sebastian Stumpf
quelle
Sie können auch emacs-forward-wordund verwenden emacs-backward-word. Der Unterschied besteht darin, dass Sie vorwärts zum Wortende und rückwärts zum Wortanfang springen, anstatt immer am Wortanfang zu springen.
Aalex Gabi
Dieser ist die robusteste und sauberste Lösung. Es kann sich an verschiedene Arten von Tastenzuordnungen und / oder alle Arten von ssh-tmux-zsh-Kombinationen anpassen. Andere Lösungen, die eine fest codierte Escape-Sequenz beinhalten, lösen nur einige der Fälle in einem bestimmten System.
HKTonyLee
3

Ich kann nicht für iTerm sprechen, aber dies sind die Tastenkombinationen, mit denen ich dieses Problem unter GNOME Terminal auf Fedora 19 unter ZSH 5.0.7 mit Oh-my-zsh gelöst habe:

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

where \e== Die Escape-Tastenfolge (wie in Abschnitt 4.1.1 dokumentiert )

und [== O(Großbuchstabe O; wie in Abschnitt 4.2.1 dokumentiert ), in einigen Fällen. Denn zB tmuxist bei mir unter diesem Punkt eine Substitution notwendig, ohne tmuxdass jedoch eine Substitution vorgenommen werden muss und [==[

Die Tastencodes für eine Sequenz können durch catDrücken der gewünschten Sequenz abgerufen werden . Zum Beispiel sollten die Ergebnisse des Pressens <Alt+Right>so interpretiert werden:

$ cat
^[[1;3C

^[== \e== Die Escape-Tastenfolge

[== [ohne tmuxODER [== O(Großbuchstabe o) mittmux

1;3 == Ich bin mir nicht sicher, aber es sollte logisch bedeuten <Alt>

C == Die rechte Pfeiltaste

Dann wird diese Sequenz als erstes Argument bindkeyin der ~/.zshrcDatei für die Persistenz angegeben und ist gebunden , was bedeutet, dass der Tastenanschlag in Argument 1 einen bestimmten Editorbefehl (oder ein Widget in zsh-Ausdrücken) für das Widget ausführt, welches im ersten Zeile des obigen Beispiels ist forward-word.

Die ~/.zshrcsollte neu bezogen werden, nachdem diese beiden Befehle mit angehängt wurden:

$ source ~/.zshrc

Ein Ärger auf meinem System ist nun, dass diese spezielle Kombination dazu führte, dass der Terminalemulator jedes Mal, wenn der Befehl ausgegeben wurde, einen Piepton ausgab

'Edit'->'Profile Preferences'->'Terminal Bell' Kontrollkästchen.

Rivanov
quelle
1

Was für mich am besten funktionierte, um die Befehlszeilennavigation von iTerm2 intuitiver zu gestalten (ich bin ein junger Erwachsener, der nicht in einer Befehlszeile aufgewachsen ist, aber viel Zeit in Texteditoren und IDEs verbracht hat), war zu:

  • Gehen Sie zu Einstellungen -> Profil -> Schlüssel
  • Unter der Liste der Tastenzuordnungen befindet sich ein Feld zum Hinzufügen / Entfernen oder Laden von Presets (Kombinationsfeld).
  • Wählen Sie die Natural Text EditingOption in der Dropdown-Liste Voreinstellungen.

Dadurch werden die Schlüssel des Editors standardmäßig auf ein Standard-Arrangement gesetzt, ohne dass ich jede Option einzeln ändern muss.

loganjones16
quelle
0

Ich schlage vor, Sie verwenden zkbd, um Tastenkombinationen zu konfigurieren. Ich benutze es und Alt+ Left/ Alt+ Rightfunktioniert gut auf iTerm2. Siehe zshcontrib(1)Details zu zkbd.

Daniel Serodio
quelle