So bewegen Sie den Cursor Wort für Wort im OS X-Terminal

762

Ich kenne die Kombination Ctrl+ A, um zum Anfang des aktuellen Befehls und Ctrl+ Ezum Ende zu springen.

Aber gibt es eine Möglichkeit, Wort für Wort zu springen, wie es Alt+ / in Kakaoanwendungen tut?

der Blechmann
quelle
2
Welche Shell benutzt du? Bash?
Sargun Dhillon
4
iTerm2 ist so viel schöner als das eingebaute Terminal. Ich habe unten Anweisungen zum Anpassen der Tastatur veröffentlicht :)
cwd
21
Die ALTVerknüpfungen wurden in der neuesten OS X-Version zu Terminal hinzugefügt.
Mosty Mostacho
7
Dies ist meiner Meinung nach kein Thema, die Bash-Shell ist eine relevante Programmierumgebung, und Readline-Bindungen sind in den meisten gängigen Linux-CLI-Apps allgegenwärtig. Schauen Sie sich auch die Anzahl der Upvotes an, die die Community gesprochen hat.
GL2014
11
Wiedereröffnung der Abstimmung, OS X Terminal zählt sehr viel als Programmierwerkzeug.
Djechlin

Antworten:

567

Standardmäßig können Sie das ziemlich bizarre Esc+ verwenden F, um zum Anfang des nächsten Wortes zu gelangen, und Esc+ B, um zum Anfang des aktuellen Wortes zu gelangen.

Kristian J.
quelle
47
Es war unpraktisch, beide Tasten erneut zu drücken, um den Befehl erneut auszuführen. Ich finde es ziemlich lahm, dies im Mac OSX Terminal zu tun, verglichen mit dem GNOME Terminal.
Phương Nguyễn
245
Sie können "Option als Metaschlüssel verwenden" unter Terminal> Einstellungen> Einstellungen> [Profil]> Tastatur aktivieren . Dann müssen Sie den Esc nicht separat manuell eingeben.
Chris Seite
7
Auch wenn Sie am Ende einer Zeile Esc+ oder Fam Anfang der Zeile die andere Tastenkombination drücken, wird stattdessen nur der Buchstabe eingefügt. Nervig!
Noldorin
10
Zu "bizarr": "F" und "B" stehen für "Vorwärts" und "Zurück". Strg-F bewegt den Cursor ein Zeichen vorwärts und Strg-B bewegt den Cursor ein Zeichen zurück. Die Verwendung des Meta-Modifikators (oder ESC) bedeutet "Bewegen nach Wörtern". Dies sind Emacs-kompatible Bindungen. Wenn Sie bash verwenden, können Sie vi-kompatible Bindungen verwenden oder sie vollständig mit anpassen ~/.inputrc.
Chris Seite
5
Die Verwendung von Option als Meta ist leider keine Option für diejenigen von uns, die den Optionsschlüssel zum Eingeben wichtiger Shell-Symbole wie ~ und | benötigen (wie auf einer französischen Tastatur).
Eric O Lebigot
417

Unter Mac OS X funktionieren die folgenden Tastaturkürzel standardmäßig. Beachten Sie, dass Sie müssen make Option Schlüssel wirken wie Meta in Terminal - Einstellungen (unter Tastatur tab)

  • alt (⌥)+ FSpringen F orward durch ein Wort
  • alt (⌥)+ BZu springen B ackward durch ein Wort

Ich habe festgestellt, dass Standard-Emacs-Tastenkombinationen für die einfache Textnavigation bei Bash-Shells zu funktionieren scheinen. Sie können verwenden

  • alt (⌥)+ D, um ein Wort ab der aktuellen Cursorposition zu löschen
  • ctrl+ Aum zum Zeilenanfang zu springen
  • ctrl+ Eum zum Zeilenende zu springen
  • ctrl+ K, um die Zeile ab der Cursorposition zu beenden
  • ctrl+, Yum Text aus dem Kill-Puffer einzufügen
  • ctrl+ Rum die Suche nach Befehlen umzukehren, die Sie in der Vergangenheit aus Ihrem Verlauf eingegeben haben
  • ctrl+ Sum die Suche weiterzuleiten (funktioniert in zsh für mich aber nicht bash)
  • ctrl+ Fum mit einem Zeichen vorwärts zu kommen
  • ctrl+ Bum sich um ein Zeichen rückwärts zu bewegen
  • ctrl+ W, um das Wort rückwärts von der Cursorposition zu entfernen
Varun Katta
quelle
1
Vielen Dank! Ich habe mich gefragt, warum es nicht sofort funktioniert hat, genau das habe ich gebraucht.
Flov
11
Sie können Meta in iterm2 wie folgt ändern: Einstellungen -> Profile -> Tasten -> Linke Optionstaste fungiert als +ESC, dann können Sie OPTION f / b verwenden, um das Wort entsprechend vorwärts und rückwärts zu verschieben. Mehr
Alan Dong
5
[ Strg + W ] - um das Wort rückwärts von der Cursorposition zu entfernen
YemSalat
[Strg + u] - um den gesamten Eintrag zu löschen
Cornelius
286

So können Sie es machen

Standardmäßig verfügt das Terminal über die folgenden Verknüpfungen, um Wort für Wort (links und rechts) zu verschieben:

  • esc+ B(links)
  • esc+ F(rechts)

Sie können alt+ konfigurieren und diese Sequenzen für Sie generieren:

  • Öffnen Sie die Terminaleinstellungen ( cmd+ ,).
  • Wählen Sie auf der Registerkarte Einstellungen die Option Tastatur und doppelklicken Sie, ⌥ ←falls vorhanden, oder fügen Sie sie hinzu, wenn dies nicht der Fall ist.
  • Stellen Sie den Modifikator wie gewünscht ein und geben Sie die Tastenkombination in das Feld ein: esc+ B, um den Text zu generieren \033b(Sie können diesen Text nicht manuell eingeben).
  • Wiederholen Sie dies für Wort rechts ( esc+ Fwird \033f)

Alternativ können Sie auf diesen Blog-Beitrag bei textmate verweisen:

http://blog.macromates.com/2006/word-movement-in-terminal/

Fil
quelle
7
Für Benutzer von MacOSX 10+ und iTerm: Entweder weisen Sie die Tastenkombination in den globalen Einstellungen zu oder als Profilschlüsselkombination. Stellen Sie sicher , wählen Sie : „Send Escape - Sequenz“ auf der Dropdown auswählen und Eingabe nur Bfür Rücken oder Ffür nach vorn in die Esc+Feld
Gus
+1 für eine großartige Mnemonik, an die ich vorher nicht gedacht habe. Ich werde mich jetzt definitiv / leider nicht daran erinnern, weil ich diese Sequenzen konfiguriert alt leftund alt rightgeneriert habe
Arc676
Wenn ich die Schlüsselzuordnung zum Terminal hinzufüge, wird sie an '^ [B' anstelle von Esc-B gebunden.
Andrea Bergonzo
164

Wechseln Sie zu iTerm2 . Es ist kostenlos und viel schöner als ein einfaches altes Terminal. Es hat auch viel mehr Optionen für die Anpassung, wie Tastaturkürzel.

Ich finde es auch cmdtoll, dass Sie mit und 1-9 zwischen Registerkarten wechseln können. Probieren Sie es aus und Sie werden nie wieder zum regulären Terminal zurückkehren :)

So richten Sie benutzerdefinierte Tastatureinstellungen in iterm2 ein

  • Installieren Sie iTerm2
  • Starten Sie und gehen Sie dann zum Einstellungsbereich.
  • Wählen Sie die Registerkarte Tastaturprofile
  • Sie müssen entweder das Profil in etwas Neues kopieren und dann die Pfeiltastenverknüpfungen wie ^+ Right/ löschen, Leftoder wenn Sie sich nicht für eine Sicherung interessieren, löschen Sie sie einfach aus dem Standardprofil.
  • Stellen Sie als Nächstes sicher, dass Ihr geändertes Profil ausgewählt ist (mit einem Stern).

Bild 1.png

  • Wählen Sie nun die Tastaturregisterkarte (ganz oben)

iTerm 2

  • Klicken Sie auf das Pluszeichen, um eine neue Tastenkombination hinzuzufügen
  • Geben Sie im ersten Feld CMD+ einLeft arrow
  • Wählen Sie im zweiten Feld "Escape-Code senden".
  • Geben Sie im dritten Feld den Buchstaben ein B

Bild 2.png

  • Wiederholen Sie dies mit den gewünschten Tastenkombinationen. escape+ Bbewegt ein Wort nach links, escape+ fbewegt ein Wort nach rechts.
  • Möglicherweise möchten Sie auch cmd+ einrichten d, um das Wort vor dem Cursor mit escape+ zu löschend

Ich habe oft die falsche Taste ( cmd/ control/ alt) mit einer Pfeiltaste gedrückt und daher habe ich meine Pfeiltastenkombinationen mit diesen Tasten so eingestellt, dass sie vorwärts und rückwärts springen, aber bitte tun Sie, was am besten zu Ihnen passt.

cwd
quelle
4
Egal was ich mache, ich kann nicht eingeben Ctrl + Arrow Leftoder Right- Upund Downfunktioniert: / versucht mit und ohne das neue Profil als Standard festgelegt
Tobi
4
Lösung: Ich musste die Verknüpfungen zur Missionssteuerung unter den MacOS-Systemeinstellungen -> Tastatur :) deaktivieren
Tobi
Die obige Anweisung funktioniert nicht mehr mit iTerm2. Bitte beachten Sie meine Antworten unten für iTerm2 Build 3.3.4.
Hängen
150

Eigentlich gibt es einen viel besseren Ansatz. Halten Sie option( altauf einigen Tastaturen) gedrückt und drücken Sie die Pfeiltasten nach links oder rechts, um sich nach Wort zu bewegen. So einfach ist das.

option
option

Ebenfalls ctrle werden Sie zum Ende der Leitung zu nehmen und ctrlawerden Sie zum Start nehmen.

mdubez
quelle
2
Manchmal funktioniert dies in bestimmten Fällen nicht. Als ich Terminal.app öffnete, war es für mich in Ordnung, aber für IntelliJ wurde es nur gedruckt [Dund [C. Um dies zu beheben, fügen Sie bind '"[D": backward-word'und bind '"[C": forward-word'zu meinem hinzu .bashrc.
Jamie Counsell
@JamieCounsell Ich habe Binding zu meinem hinzugefügt, .bashrcaber es hat nicht funktioniert, stimmt etwas nicht für mich? (Ich benutze RubyMine)
23
@ 张艳军 Ich bin nicht sicher, ob RubyMine .bashrcbeim Booten des Terminals liest . Versuchen Sie zu echo "here"sehen, ob diese Meldung angezeigt wird, wenn Sie ein neues Terminal öffnen. Außerdem müssen Sie das Terminal schließen und erneut öffnen oder ausführen source ~/.bashrc, damit es die neue Datei liest.
Jamie Counsell
79

Ich habe Alt+ / arbeiten: Öffnen Sie Einstellungen »Einstellungen» Tastatur , setzen Sie den Eintrag für den Optionscursor links , um eine Zeichenfolge an die Shell zu senden: \ 033b , und setzen Sie den Optionscursor rechts , um eine Zeichenfolge an die Shell zu senden: \ 033f . Sie können dies auch für andere Steuertastenkombinationen verwenden.

Peter Hilton
quelle
20
Um \ 033b zu erhalten, müssen Sie tatsächlich Esc drücken und dann b.
Matthew Schinckel
7
Ich bin auf Snow Leopard und finde, dass es nur funktioniert, wenn Sie es aktivieren Enable option as meta key. Übrigens ist es sehr cool. Der Schlüssel ist sicher viel bequemer zu erreichen als Esc + B oder Esc + F
Phương Nguyễn
2
Was genau ist hier aus Neugier los? Warum unterscheidet sich dieser Code zunächst in OSX? Wie kann ich andere solche Codes finden?
Koobz
in meinem Mac seine Einstellungen> Profile> Tasten links Optionstaste gesetzt als + Ecs
Arun
38

Eigentlich hängt es davon ab, welche Shell Sie verwenden, jedoch haben die meisten Shells ähnliche Bindungen. Die Bindungen, auf die Sie sich beziehen (z. B. Ctrl+ Aund Ctrl+E ), sind Bindungen, die Sie in vielen anderen Programmen finden, und sie werden seit Ewigkeiten verwendet. Übrigens funktionieren sie auch in den meisten UI-Apps.

Hier ist ein Blick auf die Standardbindungen für Bash:

Wichtigste Bash-Tastaturkürzel

Bitte beachten Sie auch, dass Sie sie anpassen können. Sie müssen eine Datei mit dem Namen erstellen, wie Sie möchten. Ich habe meine .bash_key_bindings benannt und sie in mein Home-Verzeichnis gestellt. Dort können Sie einige allgemeine Bash-Optionen festlegen und auch Tastenkombinationen festlegen. Um sicherzustellen, dass sie angewendet werden, müssen Sie eine Datei mit dem Namen ".bashrc" ändern , die beim Start von bash eingelesen wird (Sie müssen sie erstellen, falls sie nicht vorhanden ist), und dort den folgenden Aufruf ausführen:

bind -f ~/.bash_key_bindings

~ bedeutet Home-Verzeichnis in Bash, wie oben angegeben. Sie können die Datei beliebig benennen und an einer beliebigen Stelle platzieren, solange Sie den richtigen Pfad + Namen für die Bindung eingeben.

Lassen Sie mich Ihnen einige Auszüge aus meiner .bash_key_bindings-Datei zeigen:

set meta-flag on
set input-meta on
set output-meta on
set convert-meta off
set show-all-if-ambiguous on
set bell-style none
set print-completions-horizontally off

Diese stellen nur ein paar Optionen ein (z. B. Deaktivieren der Glocke; dies kann alles auf der Bash-Webseite nachgeschlagen werden).

"A": self-insert
"B": self-insert
"C": self-insert
"D": self-insert
"E": self-insert
"F": self-insert
"G": self-insert
"H": self-insert
"I": self-insert
"J": self-insert

Diese stellen sicher, dass die Zeichen allein nichts anderes tun, als sicherzustellen, dass das Zeichen "getippt" ist (sie fügen sich in die Shell ein).

"\C-dW": kill-word
"\C-dL": kill-line
"\C-dw": backward-kill-word
"\C-dl": backward-kill-line
"\C-da": kill-line

Das ist ziemlich interessant. Wenn ich alleine Ctrl+ Ddrücke (ich habe d zum Löschen ausgewählt), passiert nichts. Wenn ich dann aber einen Kleinbuchstaben w eingebe, wird das Wort links vom Cursor gelöscht. Wenn ich jedoch Großbuchstaben eingebe, wird das Wort rechts vom Cursor getötet. Gleiches gilt für l und L für die gesamte Zeile ab dem Cursor. Wenn ich ein "a" eingebe, wird die gesamte Zeile tatsächlich gelöscht (alles vor und nach dem Cursor).

Ich habe ein Wort vorwärts auf Ctrl+ Fund ein Wort rückwärts auf Ctrl+ gesetztB

"\C-f": forward-word
"\C-b": backward-word

Wie Sie sehen, können Sie eine Verknüpfung erstellen, die sofort zu einer Aktion führt, oder Sie können eine Verknüpfung erstellen, die nur eine Zeichenfolge einleitet, und dann müssen Sie ein (oder mehrere) Zeichen eingeben, damit eine Aktion ausgeführt wird im Beispiel weiter oben gezeigt.

Wenn Sie mit den Standardbindungen nicht zufrieden sind, können Sie sie nach Ihren Wünschen anpassen. Hier ist ein Link zum Bash-Handbuch für weitere Informationen.

Mecki
quelle
Wie ist der commandSchlüsselcode? In Ihrem Beispiel controlist \C, aber wie ist command?
Paschalis
Grundsätzlich möchte ich Strg + A auf cmd + links abbilden (gehe zum Anfang der Zeile)
Paschalis
1
@Paschalis Unter MacOS X ist die Befehlstaste Metain bash ( \M), cmd + left zugeordnet \M-\e[D. Sie können cmd + ... jedoch nichts zuordnen. Alle Befehlsverknüpfungen werden von der Terminal-App selbst verarbeitet (und somit verschluckt) (diese werden nie an die Shell weitergeleitet), und cmd + links wird dem "vorherigen Fenster" zugeordnet, wenn Sie mehrere haben Terminalfenster öffnen sich. Mit der Terminal-App ist dies leider nicht möglich.
Mecki
18

Verwenden Sie die Voreinstellung Natural Text Editing !

Geben Sie hier die Bildbeschreibung ein

Im Wesentlichen bindet es unter anderem Option + LeftArrow an ^[b Sequenz und Option + Rechtspfeil an^[f

Dies funktioniert sowohl in Fish and Bash als auch im psql-Terminal.

Dziamid
quelle
Dies ist die effizienteste Methode zum Festlegen einer guten alten Zuordnung für Schlüssel. Vielen Dank!
Fedesismo
Falls jemand wie ich verwirrt ist, beachten Sie, dass diese Voreinstellung nur auf der Unterregisterkarte Profilschlüssel verfügbar ist , nicht auf der Registerkarte Schlüssel der obersten Ebene .
Ben-Albrecht
15

Wenn Sie zufällig ein Vim-Benutzer sind, können Sie den Vim-Modus von bash ausprobieren. Führen Sie dies aus oder fügen Sie es in Ihre ~/.bashrcDatei ein:

set -o vi

Standardmäßig befinden Sie sich im Einfügemodus. Wenn Sie die Escape- Taste drücken, können Sie sich wie im normalen Vim-Modus bewegen. Bewegung nach Wort ist also woder b, und die üblichen Bewegungstasten funktionieren auch .

jches
quelle
15

Wenn Sie Use option as meta keyauf der Registerkarte "Tastatur" der Einstellungen einchecken, werden die Standardbefehle für den Emacs-Stil für Vorwärts- und Rückwärtswort und ⌥F(Alt + F) und ⌥B( Alt+ B) verwendet.

Ich würde empfehlen, From Bash to Z-Shell zu lesen . Wenn Sie Ihre Bash / Zsh-Fähigkeiten steigern möchten!

Matt
quelle
1
Ja das funktioniert Das Problem ist jedoch, wenn ich geschweifte Klammern ([] {} |) eingeben möchte, die sich auf Option-7, Option-8 und Option-9 befinden. Optionen sind jetzt Meta, also endet es mit Meta-7, Meta-8 ... Irgendwelche Ideen?
Martin Wickman
12

Ab Mac OS X Lion 10.7 ist Terminal standardmäßig Option- Left/Right Arrowto Esc- zugeordnet b/f, sodass dies jetzt für Bash- und andere Programme integriert ist, die diese Emacs-kompatiblen Tastenkombinationen verwenden.

Chris Page
quelle
12

Halten Sie die Wahltaste gedrückt und klicken Sie auf die Stelle, an der sich der Cursor bewegen soll

Dan Alboteanu
quelle
1
Keine schlechte Problemumgehung.
duyn9uyen
8

In Bash sind diese an Esc- Bund Esc- gebunden F. Bash hat viele, viele weitere Tastaturkürzel. Schauen Sie sich die Ausgabe von bind -pan, um zu sehen, was sie sind.

Andy Lynch
quelle
4

Klicken Sie unter iterm2" Einstellungen"> "Profil"> "Tasten" auf die +folgenden Tastenzuordnungen und zeichnen Sie eine neue Verknüpfung auf. Für Aktion , wählen Sie Send Escape Sequenceund geben boderf für rückwärts und vorwärts auf.

Als ich versuchte, eine für ( Ctrl+ ) aufzunehmen, bemerkte ich im Feld Tastaturkürzel , dass der Pfeil nie angezeigt wurde. Es stellte sich heraus, dass ich zuerst die Systemeinstellungen> Tastatur> Verknüpfungen> Missionssteuerungs- Shorcuts des Standard-Mac deaktivieren musste, damit die Dinge funktionieren, da sie die Standardverknüpfungen von iterm2 überschreiben. Sollte auch für die Standard-Terminal-App gelten.

Tastatursystemeinstellungen

qix
quelle
1

Neue Antwort für Benutzer von iTerm2 Build 3.3.4:

Schritt 1: (macOS X) Systemeinstellungen> Tastatur> Registerkarte "Verknüpfungen"> Missionssteuerung auswählen (linkes Feld)> Deaktivieren Sie Verknüpfungen mit den Bezeichnungen "Nach links um ein Leerzeichen verschieben" und "Nach rechts um ein Leerzeichen verschieben".

Schritt 2: (iTerm2 Build 3.3.4) Einstellungen> Profile> Wählen Sie * Standard (linkes Feld)> Registerkarte Tasten> Löschen Sie sowohl die Einträge "⌥->" als auch "⌥ <-"> Legen Sie beide Tasten "Linke Option (⌥)" fest: "und" Right Option (⌥) Key: "zu Esc +

Kein Herumspielen mit Shell-Profilen, kein Herumspielen mit minderwertigem masOS-Terminal (Standard), kein awkwards Esc + F / B, spülen und unsinnig wiederholen.

Beschlossene Sache!!!

Viel Spaß mit diesem Tipp, meine PROGRAMMIERKollegen!

Hängen
quelle
0

Wie bereits beantwortet, können Sie set -o viIhre ~/.bashrczu verwendenden vi/ vimSchlüsselbindungen hinzufügen oder den folgenden Teil hinzufügen .bashrc, um mit Ctrlund Pfeiltasten zu verschieben:

# bindings to move 1 word left/right with ctrl+left/right in terminal, just some apple stuff!
bind '"\e[5C": forward-word'
bind '"\e[5D": backward-word'
# bindings to move 1 word left/right with ctrl+left/right in iTerm2, just some apple stuff!
bind '"\e[1;5C": forward-word'
bind '"\e[1;5D": backward-word'

Um die Wirkung dieser Codezeilen zu starten, source ~/.bashrcstarten Sie entweder eine neue Terminalsitzung.

Chinmay
quelle