Wie überspringe ich Wörter im OS X-Terminal?

11

Angenommen, ich habe einen langen Befehl im Mac OSX-Terminal geschrieben, d. H.

say "Hello, how are you? I am good thank you. How is it going with you? Fine, thanks"

und jetzt möchte ich das Wort ändern Hellozu Hi.

Dazu muss ich jetzt die linke Tastaturtaste gedrückt halten (oder gedrückt halten), bis der "Cursor" das Ende des Wortes erreicht Hello, und es dann löschen. Die übliche Technik zum Halten der Option funktioniert nicht wie in den meisten anderen OS X-Anwendungen.

Gibt es eine Möglichkeit, stattdessen jeweils ein Wort zu überspringen (oder eine andere kürzere Möglichkeit, den Cursor dorthin zu bringen)?

Yuval
quelle

Antworten:

19

Die Befehlszeilenbearbeitung ist eine Funktion Ihrer Shell, nicht von Terminal . Wahrscheinlich ist Ihre Shell Bash und wahrscheinlich ist der Befehlszeilen-Bearbeitungsstil auf "Emacs" eingestellt.

Hier sind einige der Tastenkombinationen im Emacs-Stil, die Sie möglicherweise nützlich finden:

  • Ca: beginning-of-line
  • Ce: end-of-line
  • Mf: forward-word
  • Mb: backward-word
  • CD: delete-char
  • Md: kill-word(lösche das nächste 'Wort')
  • M-DEL: backward-kill-word

C- x bedeutet Control+ x, also ist Ca Control+ a.

M- x bedeutet Meta+ x, aber es gibt wahrscheinlich keine Meta-Taste auf Ihrer Tastatur. Sie können stattdessen ESC x verwenden (dh Escapedann x). Das Terminal verfügt über eine Einstellung zum automatischen Senden von ESC, bevor Tasten gedrückt Optiongehalten werden. Mit dieser Funktion wird die erweiterte Zeichenbehandlung deaktiviert, die Mac OS X normalerweise bei Verwendung des Modifikators Option bietet. Also, wenn Sie einige erweiterte Zeichen verwenden und haben wollen Option+ xsenden ESC x , dann können Sie diese aktivieren Terminal - Option.

In Ihrem Beispiel gibt es viele Möglichkeiten, zu „Hallo“ zu wechseln:

  • Suche nach "Hallo": Cr H ello Cj (oder ESC)
    • In normalen Emacs würden Sie einfach RET ( Return) verwenden, um die Suche am aktuellen Speicherort zu beenden und zur Bearbeitung zurückzukehren. In Bash führen die Standardbindungen jedoch dazu, dass RET (dh Cm) immer die aktuelle Zeile ausführt, selbst wenn eine inkrementelle Suche aktiv ist. Der Cj / ESC-Teil ist also eine Abweichung von normalen Emacs.
  • Zum Anfang der Zeile springen und vorwärts gehen: Ca Mf Cf (oder )
  • Springe zum Anfang der Zeile und bewege dich dann mit Worten: Ca Mf Mf Mb
  • Verwenden Sie Mb häufig (nur dann wirklich machbar, wenn Sie Option Meta zuordnen).

Es gibt auch verschiedene Möglichkeiten, um den gewünschten Ersatz zu erreichen:

  • Löschen Sie das Wort und ersetzen Sie es: Md H i
  • Zeichen löschen und ersetzen: Cd Cd Cd Cd Cd H i
  • Gehen Sie an „H“ vorbei und löschen Sie die folgende Arbeit. Ersetzen Sie sie: Vgl. Md i
  • Gehen Sie an „H“ vorbei und löschen Sie die verbleibenden Zeichen. Ersetzen Sie sie: Cf Cd Cd Cd Cd i

Wenn Sie am Ende des Wortes stehen geblieben sind (möglicherweise über Ca Mf Mf), können Sie M-DEL H i verwenden.

Sie könnten so etwas wie bind -P | lessandere interessante Bindungen finden. Weitere Informationen finden Sie im Readline- Abschnitt der Bash- Manpage (oder in den Readline-Teilen der Bash- Infoseiten ).

Chris Johnsen
quelle
Ok, das bezieht sich nicht wirklich auf die Frage, aber wie setzen Sie die Wörter, die wie Tastaturtasten aussehen, dort ein?
Wuffers
1
@Herr. Mann: Verwenden Sie <kbd>Elemente. Eine Teilmenge von HTML ist hier im Markup zulässig . Das Erscheinungsbild ist auf die ortslokale Gestaltung des Tags zurückzuführen (Hintergrund, Rahmenfarbe, Rahmenstil, Rahmenbreite usw.). Sie können das Quell-Markup meines Beitrags überprüfen ("Quelle anzeigen" auf dieser Seite ). Siehe meta.stackexchange.com/questions/5527 , obwohl der ausgefallene Stil in MSO deaktiviert ist: meta.stackexchange.com/questions/1939/#23571
Chris Johnsen
Ich bin mir nicht sicher, ob dies offensichtlich ist oder nicht. Ich habe eine Minute gebraucht, um es herauszufinden, aber ich bin auf einem MBP ohne Meta-Schlüssel und verwende eine Standard-Terminal-Konfiguration. Um mich bei Wörtern vorwärts und rückwärts zu bewegen, kann ich Esc und dann F oder Esc und dann B drücken. Ich wollte das nur erwähnen, weil ich oben versucht habe, Esc + x und dann f oder b zu drücken ...
CWD
Gibt es eine Möglichkeit, die Umgebung oder die Shell so zu ändern, dass ich Strg- oder Fn + Pfeiltasten drücken kann, um meiner IDE zu entsprechen?
Codecowboy
1
Sie können auch vi-Bindungen verwenden, indem Sie set -o viIhre .bashrc! gnu.org/software/bash/manual/html_node/…
Will Munn
2

Die Standard-Readline-Bindung für forward-wordist Meta-F ( bash(1)Manpage, Abschnitt READLINE , Unterabschnitt Befehle zum Verschieben ). Ich bin mir nicht sicher, was Meta in OS X bedeutet. Option vielleicht.

Ignacio Vazquez-Abrams
quelle
+1 - du hast tatsächlich recht. Dies funktioniert in Bash unter OSX
Yuval