iTerm 2: Wie stelle ich Tastaturkürzel ein, um zum Anfang / Ende der Zeile zu springen?

395

Ich kann sehen, dass Ctrl+ left/ rightzum Anfang / Ende der Zeile springt. Wie ändere ich dies auf Cmd+ left/ right arrow?

Folgen Sie diesem Artikel , damit Alt+ left/ für das right arrowWortspringen richtig funktioniert .

chris
quelle
Ich habe es hier beschrieben: github.com/nikoloza/articles/blob/master/devtools/…
nikoloza
1
Wenn Sie möchten, dass diese Verknüpfungen auch in VIM funktionieren, lesen
Razvan Grigore

Antworten:

735

Fügen Sie in iTerm2 die folgenden Profilverknüpfungsschlüssel hinzu

FOR  ACTION         SEND
⌘←  "SEND HEX CODE"      0x01 
⌘→  "SEND HEX CODE"      0x05
⌥←  "SEND ESC SEQ"  b
⌥→  "SEND ESC SEQ"  f

Hier ist ein Bild für diejenigen, die es brauchen

iTerm Key Key hinzufügen

Matthias
quelle
3
Wissen Sie, wie der Code / die Sequenz für Befehl + Löschen lautet? (Löschen Sie die Eingabeaufforderung)
Steven Lu
10
Ich habe meinen ersten Kommentar an anderer Stelle beantwortet. Der Hex-Code 0x15 gibt Strg + U an, wodurch die Zeile gelöscht wird. Ich finde jedoch 0x01 Strg + A, um die Tmux-Nutzung zu stören. Daher beabsichtige ich, es stattdessen der Home-Taste zuzuordnen (gleiche Funktionalität wie Fn + Links auf einer Mac-Tastatur).
Steven Lu
7
Die Escape-Sequenz für Home ist [1 ~ und die Escape-Sequenz für End ist [4 ~
Steven Lu
3
Funktioniert wie ein Zauber, super!
Juto
25
Die korrekte Bindung gilt ⌘← "SEND ESC SEQ" OHfür Home und ⌘→ "SEND ESC SEQ" OFEnd (dies sind Großbuchstaben, keine Nullen). Dies simuliert das tatsächliche Drücken der Home- und End-Tasten und funktioniert als solches in Bash, Vim usw.
Timothy Zorn
433

Um zwischen Wörtern und dem Anfang / Ende von Zeilen in iTerm2 zu springen, wählen Sie eine der beiden folgenden Lösungen.

1. Einfache Lösung (empfohlen)

  1. Öffnen Sie die Einstellungen
  2. Klicken Sie auf die Registerkarte "Profil"
  3. Wählen Sie links in der Liste ein Profil aus (z. B. "Standard") und klicken Sie auf die Registerkarte "Schlüssel"
  4. Klicken Sie auf die Schaltfläche "Voreinstellungen" und wählen Sie "Natürliche Textbearbeitung".

Geben Sie hier die Bildbeschreibung ein


2. Schlüssel manuell zuordnen (Erweitert)

Wenn Sie die oben erwähnte Voreinstellung "Natürliche Textbearbeitung" nicht verwenden möchten, können Sie die benötigten Tasten manuell zuordnen:

  1. Öffnen Sie die Einstellungen
  2. Klicken Sie auf die Registerkarte "Schlüssel"
  3. Klicken Sie auf das [+]Symbol

Sie können jetzt die folgenden Tastaturkürzel hinzufügen:

Bewegen Sie den Cursor ein Wort nach links

  • Tastaturkürzel: +
  • Aktion: Hex-Code senden
  • Code: 0x1b 0x62

Geben Sie hier die Bildbeschreibung ein

Bewegen Sie den Cursor ein Wort nach rechts

  • Tastaturkombination: +
  • Aktion: Hex-Code senden
  • Code: 0x1b 0x66

Bewegen Sie den Cursor zum Zeilenanfang

  • Tastaturkombination: +
  • Aktion: Hex-Code senden
  • Code: 0x01

Bewegen Sie den Cursor zum Zeilenende

  • Tastaturkombination: +
  • Aktion: Hex-Code senden
  • Code: 0x05

Wort löschen

  • Tastaturkombination: +←Delete
  • Aktion: Hex-Code senden
  • Code: 0x1b 0x08

Zeile löschen

  • Tastaturkombination: +←Delete
  • Aktion: Hex-Code senden
  • Code: 0x15

Rückgängig machen

  • Tastaturkombination: +z
  • Aktion: Hex-Code senden
  • Code: 0x1f

Vergessen Sie nicht , die vorherigen Bindungen zu entfernen :

  • Öffnen Sie die Registerkarte "Profile"
  • Klicken Sie auf die Unterregisterkarte "Schlüssel".
  • Entfernen Sie die Zuordnungen für die Tastenkombinationen + und +
sqren
quelle
2
Dies funktionierte gut für mich in iTerm2 und war sehr einfach zu verfolgen, danke!
Natetronn
3
Nur klären, was die Originalbindungen für ⌥ ← tun? Ich sehe es Says send Hex Codes: 0x1b 0x1b 0x5b 0x44. Wäre gut zu wissen, falls die Leute dies nicht entfernen wollten.
August
5
Das Springen zum Anfang und Ende der Zeile hat bei mir mit zsh nicht funktioniert. Die Verwendung von "Hex Code" "0x01" / "0x05", wie in der oberen Antwort vorgeschlagen, hat bei mir funktioniert.
Flip
2
Der Sprung zum Anfang und Ende der Zeile hat auch bei mir nicht funktioniert. Top Antwort hat funktioniert.
Hisabimbola
3
Hat iTerm eine Möglichkeit, diese in einem Preset zu bündeln, das wir einfach laden können? Es scheint ärgerlich, manuell einzugeben, aber das hat bei mir funktioniert und war großartig. Vielen Dank!
August
259

Ich sehe, dass es bereits viele gute Antworten gibt, aber dies sollte die native OSX-Funktionalität in mehr als nur Ihrer Shell so nahe wie möglich bringen. Ich habe überprüft, ob dies in ZSH-, Bash-, Node-, Python-i-, iex- und irb / pry-Sitzungen funktioniert (mit rb-readline gem für readline, sollte aber für alle funktionieren).

Ö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:

Löschen Sie alle Zeichen links vom Cursor

+ ←DeleteHex-Codes senden:

0x15Kompatibler, aber manchmal besteht die Funktionalität darin, die gesamte Zeile und nicht nur die Zeichen links vom Cursor zu löschen. Ich persönlich benutze dies und überschreibe dann meinen zsh-Bindungsschlüssel ^U, um nur Dinge links vom Cursor zu löschen (siehe unten).

oder

0x18 0x7fWeniger kompatibel, funktioniert nicht im Knoten und standardmäßig nicht in zsh. Siehe unten, um zsh zu beheben (bash / irb / pry sollte in Ordnung sein). Führt die gewünschte Funktionalität aus, wenn es funktioniert.

Löschen Sie alle Zeichen rechts vom Cursor

+ fn+ ←Deleteoder + Delete→Hex-Codes senden:0x0b

Löschen Sie ein Wort links vom Cursor

+ ←DeleteHex-Codes senden:

0x1b 0x08 Pausen in Elixirs IEX scheinen überall gut zu funktionieren

oder

0x17 Funktioniert überall, hört aber nicht bei normalen Wortumbrüchen im IRB auf und löscht stattdessen, bis ein wörtliches Leerzeichen angezeigt wird.

Löschen Sie ein Wort rechts vom Cursor

+ fn←Deleteoder + Delete→Hex-Codes senden:0x1b 0x64

Bewegen Sie den Cursor an den Anfang der Zeile

+ Hex-Codes senden:0x01

Bewegen Sie den Cursor an das Zeilenende

+ Hex-Codes senden:0x05

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

Rückgängig machen

+ zHex-Codes senden:0x1f

Redo wird normalerweise nicht in Bash, Zsh oder Readline gebunden, sodass wir es auf einen nicht verwendeten Hexcode setzen können, den wir dann in Zsh korrigieren können

+ + Zoder + yHex-Codes senden:0x18 0x1f

Nun, wie man Probleme behebt, die nicht funktionieren

Für zsh können Sie die Bindung für die noch nicht funktionsfähigen + ←Deleteund + + Z/ + einrichten, yindem Sie Folgendes ausführen :

# changes hex 0x15 to delete everything to the left of the cursor,
# rather than the whole line
$ echo 'bindkey "^U" backward-kill-line' >> ~/.zshrc

# binds hex 0x18 0x7f with deleting everything to the left of the cursor
$ echo 'bindkey "^X\\x7f" backward-kill-line' >> ~/.zshrc

# adds redo
$ echo 'bindkey "^X^_" redo' >> ~/.zshrc

# reload your .zshrc for changes to take effect
$ source ~/.zshrc

Ich kann keine Lösung für das Hinzufügen von Redo in Bash oder Readline finden. Wenn also jemand eine Lösung für eine dieser Lösungen kennt, kommentieren Sie diese bitte unten und ich werde versuchen, sie hinzuzufügen.

Für alle, die nach der Nachschlagetabelle zum Konvertieren von Schlüsselsequenzen in Hex suchen, finde ich diese Tabelle sehr hilfreich.

Travis
quelle
2
Das ist wirklich nützlich, macht einen großen Unterschied! Ich möchte darauf hinweisen, dass einige Leute mit dem $vor verwechselt werden können echo(einfach entfernen?). Davon abgesehen ist es perfekt. Vielen Dank.
Edmundo
1
@Christophe Es sieht also so aus, als ob die Schlüsselbindung da ist, wie sie sein sollte. Entweder haben Sie einen Fehler beim Hinzufügen der Hex-Werte gemacht, oder die Tastenkombination für das Rückwärtswort wird überschrieben. Führen Sie aus, bindkey | grep "\^\[b"und das zeigt an, ob etwas anderes es überschreibt, nachdem es festgelegt wurde. Es sollte nur zurückkehren #=> "^[b" backward-word. Wenn es überschrieben wird, müssen Sie herausfinden, wo es überschrieben wird, und es entfernen. Wenn dies nicht möglich ist, können Sie es ausführen echo 'bindkey "^[b" backward-word' >> ~/.zshrc, es in die letzte Zeile Ihres hinzufügen .zshrc, dann iTerm neu starten und es sollte funktionieren
Travis
2
@Christophe Überprüfen Sie die keysRegisterkarte in den iTerm- Einstellungen, um festzustellen, ob + auch etwas zugeordnet ist. Wenn ja, entfernen Sie es. Sie können testen, ob Ihr bGerät ordnungsgemäß funktioniert, indem Sie schnell escloslassen und dann drücken b. Das sollte ein Wort nach links springen. Alternativ können Sie + auf hex 0x1b 0x42 oder 0x1b 0x5b 0x31 0x3b 0x35 0x44 . Ich habe überprüft, dass beide für mich funktionieren. Ich denke wirklich, dass Sie + in iTerm überschrieben wurden, entweder in Ihrem profile keysTab oder keysTab.
Travis
3
Tolle! Ich habe gerade von hier etwas über Undo plus Redo-Bindungen erfahren.
Ecbrodie
3
Ich habe dies manuell gemacht und dachte, warum kann ich dazu kein Profil importieren? Dann habe ich GabLeRoux / iterm2-macos-dynamic-profile basierend auf diesen Anweisungen erstellt. Es funktioniert einwandfrei, danke 🍻
GabLeRoux
48

Befolgen Sie das oben aufgeführte Tutorial, um Ihre wichtigsten Einstellungen in iterm2 einzurichten .

  1. Erstellen Sie einen neuen Shorcut-Schlüssel
  2. Wählen Sie als Aktion "Escape-Sequenz senden"
  3. Dann, um Set cmd-links , unten im Text , dass:
    • Geben Sie [Hfür Zeilenanfang
      ODER ein
    • Geben Sie [Fals Zeilenende ein
Jaime Bellmyer
quelle
1
F springt nur ein Wort in meinem iterm2
Matthias
1
ITerm => Einstellungen => Schlüssel
pfrank
Ich liebe das! Die anderen Lösungen haben bei mir nicht funktioniert. Ich verbringe Stunden frustriert damit, dass ich Strg + A und Strg + E in iterm2 nicht verwenden konnte. Aber ich wollte den Fisch dafür nicht aufgeben. Das funktioniert total danke!
Fliegen Sie am
Andere Lösungen haben auch bei mir nicht funktioniert, aber diese hat funktioniert.
Braham Snyder
42

In iTerm 3.0.12 können Sie zur Natural Text EditingVoreinstellung wechseln :

Geben Sie hier die Bildbeschreibung ein

iTerm → Einstellungen → Profile → Schlüssel

Warnung Da es sich um eine Voreinstellung handelt, kann sie die zuvor gebundenen Schlüssel überschreiben. Es ist daher besser, Ihre aktuellen Tastenkombinationen zu speichern, bevor Sie eine Voreinstellung anwenden.

Nik Kov
quelle
2
Könnten Sie Ihre Antwort näher erläutern? Wie in, was beinhaltet diese Voreinstellung und könnte überschreiben?
Carles Alcolea
Danke für die Antwort. Auch darin chiming ist wahrscheinlich am besten Praxis dies Ihre eigenen Profil anwenden auf diese Weise Sie nicht mit den Standardeinstellungen schrauben und kann das Profil als natürlicher Textbearbeitung „Modus“ umschalten
August
29

Unter dem obigen Link http://hackaddict.blogspot.com/2007/07/skip-to-next-or-previous-word- finden Sie eine schnelle Referenz für alle, die in iTerm2 zum Zeilenende oder zum Zeilenende gehen möchten. in-iterm.html stellt fest, dass in iTerm2:

  • Ctrl+ A, springt zum Zeilenanfang, während
  • Ctrl+ E, springt zum Ende der Zeile.
Ioannis Filippidis
quelle
Warum steht diese Antwort nicht ganz oben?
Gangadhar JANNU
1
@ GangadharJannu: Stimme voll und ganz zu. Es geht direkt zum ans. Sollte oben sein.
Catbuilts
10

Ich habe Travis Answer verwendet und ein dynamisches Profil erstellt, das Sie anhand der Anweisungen importieren können.

GabLeRoux / iterm2-macos-dynamic-profile

Anweisungen befinden sich in der Readme-Datei und es ist viel schneller, diese zu importieren, als sie alle manuell hinzuzufügen. Ich habe dies gemäß der Anfrage von @ gooli beantwortet, da dies in einem Kommentar versteckt war. Hoffe es gefällt euch 🍻

GabLeRoux
quelle
2
Kam ein Jahr später hierher zurück und war so glücklich, dies zu finden!
Elifiner
9

Nur um allen zu helfen, die das gleiche Problem haben, aber speziell die Zsh-Shell mit iTerm 2 verwenden. Es stellt sich heraus, dass Zsh nicht /etc/inputrcrichtig liest und daher keine Tastenkombinationen versteht, die Sie über die Einstellungen eingerichtet haben!

Um dies zu beheben, müssen Sie Ihrer .zshrcDatei einige Tastenkombinationen hinzufügen , z.

# key bindings
bindkey "\e[1~" beginning-of-line
bindkey "\e[4~" end-of-line

Beachten Sie die Backslashes im obigen Beispiel vor dem "e". Der verknüpfte Artikel zeigt sie nicht an. Fügen Sie sie daher .zshrcbeim Hinzufügen von Bindungen zu Ihrer Datei hinzu.

Nerdwood
quelle
4

Die altmodischen Emacs-Bindungen können weiterhin in iterm2 und os x terminal funktionieren:

Einstellungen -> Profile -> Schlüssel (Unterregisterkarte in Profilen)

  • Set Left/Right option <kbd>⌥</kbd> key acts as +Esc(ähnlich im os x Terminal)

Dies sollte ermöglichen alt- fund alt- bfür Worte mit Worten zu bewegen. (Immer noch ctrl- aund ctrl- eimmer wie gewohnt arbeiten)

Wenn metadiese alten Bindungen festgelegt sind, funktionieren sie, während einige iterm2-Bindungen nicht verfügbar sind.

halb selbst
quelle
2

Wie in Erläutert hier , können Sie es mit einem einfachen Schritten tun:

Standardmäßig funktionieren Wortsprünge (Option + → oder ←) und Wortlöschungen (Option + Rücktaste) nicht. Um diese zu aktivieren, gehen Sie zu "iTerm → Einstellungen → Profile → Tasten → Voreinstellung laden ... → Natürliche Textbearbeitung → Boom! Head explodiert".

Islam.Ibrahim
quelle
2

Die einzigen Dinge, die funktionieren, um zum Anfang und Ende der Zeile zu gelangen, sind

⌘← "SEND ESC SEQ" OH - um an den Zeilenanfang zu gelangen
⌘→ "SEND ESC SEQ" OF - um zum Zeilenende zu gelangen

add787
quelle
1

bind -p zeigt eine Liste gebundener Escape-Schlüssel in Ihrer Shell an, die Ihnen helfen kann, mehr Ideen / Suchbegriffe zu erhalten.

Jose Alban
quelle
5
bind -pfunktioniert nur in Bourne-Shells (bash, sh) für zsh, csh tcsh, use bindkey.
Travis
0

Bei mir hat folgende Kombination funktioniert:
| Key Action Esc+ End result | |-----------------------------------------------------| | Send Escape Sequence a Send ^[ a | | Send Escape Sequence e Send ^[ e |

Halil Özgür
quelle