Wie springe ich zurück zum ersten Zeichen in der * nix Kommandozeile?

17

Wenn Sie einen langen Befehl in die * nix-Befehlszeile schreiben und zum ersten Zeichen zurückkehren müssen, um am Anfang etwas hinzuzufügen (z. B. a nohup, wenn Sie feststellen, dass der Vorgang lang ist, oder a sudo, wenn Sie Es kann einige Zeit dauern, bis der Cursor zum ersten Zeichen zurückkehrt.

Gibt es eine Abkürzung, mit der Sie direkt dorthin springen können?

Ich benutze einen Mac, Homeist also keine Option

clami219
quelle
2
Wenn Sie mit einem Apple-Laptop arbeiten, entspricht Fn + Links / Rechts Home / End. (Und damit verbunden sind Fn + Auf / Ab PageUp / Ab.)
duskwuff
2
Diejenigen, die diese Frage lesen, werden tatsächlich nach der Shell gefragt, insbesondere nach der Befehlszeilenbearbeitung in der Shell. Die Antwort von Strg-A ist (höchstwahrscheinlich) bash mit der Emacs-Stilbearbeitung, der Standardeinstellung.
Rich Homolka
4
Eine Alternative, wenn Sie nur hinzufügen müssen, sudoist die Eingabe sudo !!. Das !!wird durch den vorherigen Befehl ersetzt.
Matthew Crumley

Antworten:

29

Ctrl+Asollte arbeiten. Ctrl+Eentspricht dem Ende der Kommandozeile.

Choroba
quelle
1
Groß! Das funktioniert auch auf dem Mac einwandfrei!
Clami219
1
Dies gilt auch für viele Code-Editoren.
Jwosty
2
@ clami219: Es funktioniert tatsächlich in den meisten Textkontexten in OSX. Emacs Bindungen ist eine wunderbare Sache ...
Tommy
Danke, es funktioniert auch unter Linux.
Gideon
10

Dies hängt von der jeweiligen Shell ab.

Einige Shells (wie AT & T ksh88) bieten praktisch keine Eingabezeilenbearbeitung.

In Shells, die den viBearbeitungsmodus implementieren (dies muss möglicherweise mit aktiviert werden set -o vi), erfolgt dies durch Drücken von Esc(um vom Einfügemodus zu wechseln) und anschließendem 0Springen zum Zeilenanfang oder $zum Zeilenende. Rufen Sie dann den Einfügemodus erneut auf, indem Sie i- drücken, der Cursor bleibt an seiner Position - oder a- der Cursor bewegt sich um eins nach rechts, um Text anzufügen.

vi Die Bearbeitung im Modus wurde kürzlich vom POSIX-Standard vorgeschrieben.

Die viel gebräuchlichere emacs Bearbeitungsart (Gott sei Dank, sie hat nichts mit dem Emacs-Editor-Schrägstrich-Betriebssystem zu tun) verwendet man, Ctrl-Aum an den Anfang der Zeile Ctrl-Ezu springen und an das Ende der Zeile zu springen. Dieser Modus erfordert die Ausführung set -o emacsauf vielen Shells (am bekanntesten AT & T ksh93), ist jedoch in mksh und GNU bash standardmäßig aktiviert .

Die meisten modernen Shells unterstützen sowohl emacsals auch viModi. (Für beide Modi ist ein Tty erforderlich.)

In vielen Shells können Sie die Tastenkombinationen anpassen. In der Regel für den emacsModus, obwohl einige Shells auch das Anpassen der Tastenkombination für den viModus ermöglichen. Wenn Sie einen Schlüssel haben Sie lieber haben diese gebunden zu sein , müssen Sie zuerst herauszufinden , die Tastenfolgen es (zum Beispiel erzeugt, auf meinem System, Alt-CursorLeftproduziert Esc+[+1+;+3+D( ^[[1;3D; ^Xist Ctrl-Xund ^[ist Esc), so dass ich so etwas wie eingeben können

bind '^[[1;3D=beginning-of-line'
bind '"\e[1;3D":beginning-of-line'

Diese Tastenkombination wird je nach Shell geändert. Sie können sie normalerweise entweder in der Startdatei ( ~/.mkshrc, ~/.kshrc) oder für GNU bash in beibehalten ~/.inputrc. Beachten Sie, dass nicht alle Shells die Bindung aller Schlüssel in allen Versionen unterstützen.

Sie können normalerweise herausfinden, welche Zeichen ein Schlüssel erzeugt, indem Sie einfach catauf der Shell laufen , den Schlüssel eingeben und zusehen. Drücken Sie dann ^C( Ctrl-C), um den Vorgang abzubrechen cat.

Mirabilos
quelle
Ich benutze gerne ^ D, das Unix-Endzeilenzeichen, um cat zu beenden. In meinen Augen ist es ^ D, weil der Textstrom "fertig" ist.
Aaron Hall
@AaronHall: das geht nicht wenn schon was in der leitung ist. Außerdem wollen wir es abbrechen, nicht beenden ;-) Aber ja, im Normalfall hast du recht. Dies ist jedoch ein Sonderfall.
Mirabilos
Das Terminal kann auch Zeilen bearbeiten.
Samuel Edwin Ward
@mirabilos Um eine EOF ohne Zeilenvorschub zu senden, führen Sie einfach ^ D ^ D aus (dh drücken Sie zweimal D).
Potatoswatter
@Potatoswatter ja (lustig, das wusste ich selbst nicht), aber ich möchte hier ausdrücklich abbrechen. Beim Senden ^D^Dbekomme ich immer noch "
The
2

Haben Sie es mit der Home-Taste versucht? Ich verwende MobXterm, um eine Verbindung zur Linux-Box herzustellen und verwende sowohl die Home- als auch die End-Taste auf der Tastatur, um zum ersten oder letzten Zeichen des Befehls zu gelangen.

PAS
quelle
Sie haben Recht! Ich musste angeben, dass ich einen Mac
benutze
2

Wenn Sie in den viModus gewechselt haben, können set -o viSie mit Escund entweder Ioder AText am Anfang oder Ende der Zeile eingeben. Oder wenn Sie nur den Cursor bewegen möchten, ist es ^und $.

TankorSmash
quelle
vi Modus welcher Shell?
David Richerby
2

Im Emacs-Modus (umgeschaltet von:) set -o emacsdrücken Sie:

  • Ctrl+A und Ctrl+E
  • Home und End
  • Esc+bund Esc+f(bewegt den Cursor vor und zurück des aktuellen Wortes)

Im vi-Modus (umgeschaltet von set -o vi:) im Befehlsmodus ( Esc) durch Drücken von:

  • 0/ ^und $(bleibt im Befehlsmodus)
  • Iund A(wechselt in den Bearbeitungsmodus)

Siehe auch:

Kenorb
quelle