Gibt es eine Möglichkeit, zu einem früheren Teil eines Befehlszeilenbefehls im Mac Terminal zu springen?


9

Oft schreibe ich lange Befehle in der Bash-Shell - Dinge mit vielen Argumenten, Webadressen, Routen usw. Von Zeit zu Zeit wird mir klar, dass ich vergessen hatte, meinen "Bündelexec" an den Anfang des Befehls zu setzen, etwas falsch geschrieben oder Zitate vergessen. Oder so einfach wie "cd" statt "vim".

So beginnt der langweilige Vorgang des Haltens der linken Pfeiltaste, bis ich zum Anfang des Befehls zurückkomme.

Gibt es eine Möglichkeit, wieder an den Anfang der Zeile zu springen?


2
Möglicherweise möchten Sie die standardmäßige Terminal-App entfernen und iTerm herunterladen
Clement Herreman

Warum? Ich habe gerade nachgesehen und es scheint sich ziemlich ähnlich zu benehmen. (Der Home-Key funktioniert jetzt, aber da ich die anderen Keys habe, spielt das keine Rolle). Was bietet es, das es sich lohnt, alle meine Einstellungen und Konfigurationen und Aufgaben zu wiederholen und so weiter?
GlyphGryph

Das scheint etwas zu sein, das Sie mit .inputrc einrichten können
Rob

Um jeweils ein Wort zu springen, springen Sie mit ⌥B bzw. ⌥F vor und zurück.
fideli

@fideli, aber nur, wenn Sie "Option als Metaschlüssel verwenden" aktiviert haben. Beachten Sie, dass die Standardtastatureinstellungen von Terminal ab Mac OS X Lion 10.7 die Option Option-Nach-links / Nach-rechts-Taste auf Esc-b / f festlegen, sodass keine Konfiguration erforderlich ist.
Chris Page

Antworten:


12

Zusätzlich zu ^ A und ^ E können Sie das tun

  • Esc - b ein Wort zurückspringen
  • Esc - f ein Wort vorwärts springen
  • Ctrl - b einen Charakter zurückziehen
  • Ctrl - f einen Charakter vorrücken

Siehe das Bash-Handbuch für Befehle zum Bewegen .


Eine Sache zu beachten - dies ist von Emacs, und durch das Hinzufügen von emacs Option für Ihre Schalentiere können Sie mehr davon bekommen.
TC1

6

Sie können Emacs-Befehle verwenden, z.

  • ctrl -A um zum Anfang der Befehlszeile zu gelangen
  • ctrl -E um zum Ende der Kommandozeile zu gelangen

Dies ist bash, nicht spezifisch für Mac.


3
set -o vi

Dann Esc gefolgt von

^ Zeilenanfang $ Ende der Linie b ein wort rückwärts w ein wort weiter


Ich bin ein ziemlich großer Fan von Vim, daher ist das Prinzip Ihrer Antwort für mich großartig, aber die modale Befehlszeilenbearbeitung kann für das OP ein wenig verwirrend sein, insbesondere ohne zu erwähnen, wie man wieder tippen kann! Rückkehr zum Einfügemodus mit i (Einfügen) vor dem Cursor eingeben oder a (Anhängen), um nach dem Cursor zu schreiben.
Cascabel

Ich verwende vi seit Jahrzehnten als meinen primären Texteditor, aber ich bevorzuge die emacs-Tastenkombinationen für meine Shell.
Keith Thompson

Tatsächlich verwendet das OP vim für die gesamte Textbearbeitung, daher ist es sehr nützlich zu wissen, dass Sie vi-Standards setzen können. Vielen Dank!
GlyphGryph

@ Kieth Thompson: Früher dachte ich dasselbe. Ich dachte nur, Shell passt nicht gut zu diesem Modus, um Sachen zu wechseln (wie das irritierende) v Taste im vi-Modus). Aber nach einer Weile habe ich mich vim infiziert, also schlage ich vor, dass Sie es versuchen: P
kizzx2

1

Dies beantwortet Ihre Frage nicht, kann jedoch in einigen Fällen Ihr Problem lösen.

Im bash das !! Token wird durch Ihren vorherigen Befehl ersetzt. Wenn Sie also vergessen, etwas am Anfang eines Befehls hinzuzufügen (z. B. sudo ), können Sie so etwas tun

# ./super_secret_command --with-args
=> ACCESS DENIED

# sudo !!
sudo ./super_secret_command --with-args
=> ACCESS GRANTED

0

Sie können das reguläre konfigurieren Ctrl/Opt+Left/Right Verknüpfungen für die Verwendung in Terminal. Auf diese Weise müssen Sie nicht alles neu lernen, wenn Sie das Terminal verwenden.

Öffnen Terminal »Einstellungen…» Einstellungen »(Profil auswählen)» Tastatur .

Weisen Sie dort folgende Tastenkombinationen zu:

  • Control + Cursor Left: String senden \033[1~ zu schälen
  • Control + Cursor Right: String senden \033[4~ zu schälen
  • Option + Cursor Left: String senden \033[5D zu schälen
  • Option + Cursor Right: String senden \033[5C zu schälen

Ich mag auch folgendes ( Fn + Left/Right ):

  • Home: String senden \033[1~ zu schälen
  • End: String senden \033[4~ zu schälen

enter image description here


An Lion sind ⌥ ← und ⌥ → an gebunden M-b und M-f standardmäßig. Und ⌃ ← und ⌃ → sind die Standard-Kurzbefehle zum Ändern von Leerzeichen.
Lri

0

Ich brauchte das in Cygwin, nicht auf einem Mac, aber fügte Folgendes hinzu ~/.inputrc kann auch helfen:

"\e[1;5C": forward-word   # ctrl + right
"\e[1;5D": backward-word  # ctrl + left 

0

Ich bin kein Mac-Benutzer, aber was ist mit dem Zuhause Schlüssel? Das funktioniert gut auf einem Linux-Terminal.


1
Nein, das rollt zum oberen Rand des Terminalfensters.
GlyphGryph

Standardmäßig scrollen Home und End durch die Ansicht. Dies ist das Standardverhalten von Mac. Standardmäßig senden Sie mit Shift-Home und Shift-End jeweils "ESC [H" und "ESC [F". Diese sind alle in anpassbar Terminal & gt; Einstellungen & gt; Einstellungen & gt; [Profil] & gt; Tastatur .
Chris Page

0

Die beste Möglichkeit, sich in Mac Os X um die Befehlszeile zu bewegen, ist die Verwendung meines Profils: https://github.com/lingtalfi/mac-terminal-shortcuts

Es bietet die folgenden (intuitiven) Verknüpfungen:

ALT-left: move one word backward
ALT-right: move one word forward
CTRL-left: move to the beginning of the line
CTRL-right: move to the end of the line
ALT-backspace: kill one word backward
ALT-del: kill one word forward
ALT-up: set word after cursor to uppercase
ALT-down: set word after cursor to lowercase
home: move to the beginning of the line
end: move to the end of the line    
CTRL-backspace: Same as ALT-backspace
CTRL-del: Same as ALT-del
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.