Ich weiß, dass ich damit Upfrühere Befehle durchlaufen kann. Das Ausführen des letzten Befehls umfasst einfach Up+ Enter. Ich dachte jedoch darüber nach, das Happy Hacking Keyboard zu kaufen, da ich viel Zeit damit verbringe vim
.
Diese Tastatur hat keine Pfeiltasten, und ich weiß nur, wie ich diese Art von Verhalten erreichen kann, indem ich Ctrl+ drücke Rund beginne, meinen vorherigen Befehl zu wiederholen.
Gibt es eine einfache Möglichkeit, Up+ Enterin einem UNIX-Terminal ohne die Pfeiltasten zu emulieren ?
Antworten:
Mit
csh
oder jeder Schale Umsetzungcsh
-ähnlichen Geschichte Substitution (tcsh
,bash
,zsh
):Dann Enter.
Oder alternativ :
Dann Enter.
Oder Ctrl+ P,Enter
Magischer Raum
Beachten Sie auch, dass
!!
und!-1
nicht automatisch erweitert wird, bis Sie sie ausführen (wenn es zu spät sein könnte).Wenn Sie sie verwenden
bash
, können Sie siebind Space:magic-space
in~/.bashrc
einfügen. Durch Drücken von Spaceafter the command werden sie automatisch inline erweitert, sodass Sie sie vor der Ausführung überprüfen können. Dies ist besonders nützlich für die Historienerweiterung nach einer Befehlsausführung vor einer Weile, z. B.!echo
wird die letzte Befehlsausführung beginnend mit abgerufenecho
. Mit Magic Space können Sie eine Vorschau des Befehls anzeigen, bevor er ausgeführt wird.Das ist das Äquivalent zu tun
bindkey ' ' magic-space
intcsh
oderzsh
.quelle
magic-space
Das ist eine süße Option!histverify
Option, mitshopt
der readline die Verlaufserweiterung ausführt, den Befehl jedoch nicht beim ersten Drücken der Eingabetaste ausführt. Auf diese Weise können Sie das Ergebnis bewerten und entscheiden, ob Sie es ausführen möchten.!!
die Expansion verwendet in-place . Zum Beispielsudo !!
.Die meisten Shells mit einer Befehlszeilen-Bearbeitungsfunktion unterstützen Emacs-Tastenzuordnungen. (Eine winzige Untergruppe)
Alternativ können Sie Ihre Shell so einrichten, dass sie den vi-Befehlsbearbeitungsmodus verwendet, indem Sie sie
set -o vi
zu Ihrer Shell-Startdatei hinzufügen (z~/.bashrc
. B. ). Dann können Sie zum Beispiel!!
) erneut auszuführen . Die Minustaste -funktioniert auch als Aufwärtsbefehl.!-12
).vi
Kommando - Modus, so dass Sie ein verwenden müssenvi
Bearbeitungsbefehl (zB I, A, C, R, oder einer ihrer Kleinbuchstaben) hinzuzufügen , tatsächlich auf den Befehl von der Geschichte.So ist zum Beispiel EsckisudoSpaceEntergleichbedeutend mit
sudo !!
.!-2:- !$
. (Leider scheint es keine benannten Puffer zu unterstützen.)quelle
vi
Trick war großartig !!!delete
Ctl + u in ZshMein Favorit ist CTRL+ Pdann CTRL+O
Dies funktioniert standardmäßig, es ist keine zusätzliche Konfiguration erforderlich. Mit ^ P wechseln Sie zum letzten Befehl und mit ^ O können Sie die aktuelle Zeile ausführen
Beachten Sie, dass CTRL+ Oso oft verwendet werden kann, wie Sie möchten
quelle
^J
ls
oderpwd
vorher gemacht habe.Sicher!
vi
Warum konfigurieren Sie Ihre Shell nicht so, dass sie darauf reagiert, da Sie an Tastenkombinationen gewöhnt sind? Fürbash
, geben Sie dies ein in~/.inputrc
:Das Ausführen von bash-Instanzen liest die Datei nicht erneut, melden Sie sich also ab und wieder an.
zsh
wird dies sogar für Sie erkennen: Wenn keines Ihrer Startskripte den Bearbeitungsmodus auf die eine oder andere Weise erzwingtbindkey
und$EDITOR
festgestellt wird, dass Ihre Umgebungsvariable enthältvi
, werden dievi
Tastenkombinationen automatisch aktiviert . Wenn Sie es erzwingen müssen, geben Sie Folgendes ein~/.zshrc
:Verwenden Sie danach ESCwie gewohnt, um die Befehlszeile einzugeben und sich auf kund ab jzu bewegen.
AUCH : Die Standard - Shell - Bindungen in den meisten Schalen sind die Emacs - Bindungen, also eigentlich Crtl-Pund Ctrl-Nsollen schon funktionieren , ohne dass Sie etwas ändern zu müssen.
quelle
Mit jedem POSIX - Shell die Implementierung Benutzer Portabilität Option (einschließlich
ksh
,zsh
,bash
,yash
), können Sie auch die Verwendungfc
Befehl ein :Sehen Sie sich ein Beispiel an:
Weitere Informationen unter Ausführen einer Reihe von Befehlen aus der Antwort der Historie von Jonathan Leffler.
quelle
Für alle Benutzer von Mac iterm2:
Sie können ⌘+ Ran binden
0x0C 0x10 0x0d
. Dadurch wird das Terminal gelöscht und der letzte Befehl ausgeführt.quelle
0x10 0x0d
(dh lassen Sie das0x0C
) , um es zu wiederholen .Ich finde, ich muss Befehle als Superuser oft wiederholen, also
Wiederholt den vorherigen Befehl, als hätte ich mich daran erinnert,
sudo
an erster Stelle etwas einzugeben .quelle
Die
ksh
Shell verfügt über einen Standardaliasr
, der den neuesten Befehl wiederholt. Es ist gebunden anfc -s
:Interessanterweise wird dies in der
bash
Dokumentation zumfc
Builtin (help fc
und auch im Handbuch selbst) sogar erwähnt, aber es ist kein Standardalias in dieser Shell:In
bash
, würde dies auch noch funktionieren , wenn Sie Geschichte Erweiterungen aus mit eingeschaltet habenset +H
.In der
zsh
Shell gibt es einr
eingebautes Element, von dem dokumentiert ist, dass es dasselbe ist wiefc -e -
.Das
fc
Dienstprogramm ist ein POSIX-Standarddienstprogramm .quelle
Mit
csh
oder jeder Schale Umsetzungcsh
-ähnlichen Geschichte Substitution (tcsh
,bash
,zsh
), können Sie auch die Verwendung!<beginning of command>
der letzte Befehl mit beginnen zu nennen<beginning of command>
.Zum Beispiel, wenn du gelaufen bist
!ta
ausführen würdetail file.txt
quelle
tl; dr
!!
hängt nur den letzten Befehl an den aktuellen Befehl an.<backtick>!!<backtick>
Führt den letzten Befehl aus und hängt die Ausgabe an den aktuellen Befehl an.Es gibt eigentlich 2 Varianten:
Lassen Sie mich Ihnen 2 Beispiele zeigen:
Beispiel 1
Wie Sie oben sehen, führe ich einen Befehl aus und hänge im Wesentlichen nur den letzten Befehl an.
Eine weitere Variation
Beispiel 2
quelle
vi `!!`
. Sehr nützlichWenn ich einen guten xterm-Emulator verwende, z. B. Putty, gehe ich am liebsten so vor, dass ich den Befehl einschließlich Zeilenvorschub auswähle, in die Zwischenablage kopiere und ihn dann mit der rechten Maustaste einfüge. Dies wiederholt den Befehl mit einem einzigen Klick. Dies funktioniert auch für eine Folge von Befehlen, die durch Semikolons getrennt sind.
quelle
Mit können Sie den
!n
n-ten Befehl im Terminal ausführen. Dabei steht 'n' für diehistory
Befehlszeile no .quelle
!?
bis zum letzten Befehl erweitert? Sind Sie sicher, dass Sie es nicht verwechseln!!
(was bereits in anderen Antworten behandelt wurde)?Geben Sie History ein und notieren Sie sich die Nummer vor dem Befehl, den Sie ausführen und verwenden möchten
!number
Sie können auch ! -1 verwenden (1 ist der letzte Befehl, den Sie ausführen. Ersetzen Sie ihn durch die Zählnummer, die Sie erhalten, wenn Sie dies von unten tun, und behalten Sie den zuletzt ausgeführten Befehl bei 1).
quelle
Es gibt mehrere Ebenen, in denen Sie nach dem letzten Befehl fragen können.
Zeileneditor
Der Zeileneditor (in den Sie Ihre Befehle eingeben) wird direkt von ksh, von der Bibliothek readline in bash und von der Bibliothek zle in zsh bereitgestellt. Andere Shells, z. B. Dash, verfügen möglicherweise nicht über eine Bearbeitungsbibliothek, um diese Schlüssel zu verstehen (sofern sie nicht mit
--with-libedit
aktivierter Option kompiliert wurden ).Diese Arbeit in ksh, bash, zsh:
Ctrl- P# Emacs-Modus (vorherige)
Ctrl- N# Emacs-Modus (nächste)
ESC- k # vi-Modus ESC zum Wechseln in den Befehlsmodus und k zum Hochfahren
ESC- j # vi-Modus ESC zum Wechseln in den Befehlsmodus und j zum Runterfahren
Geschichte
Das von vielen Shells bereitgestellte Verlaufssystem ermöglicht die Erweiterung einiger Verknüpfungen:
befehle
Es gibt einige Befehle, die Verlaufsbefehle abrufen können.
Wie der ziemlich ausführliche Befehl (nur zum Drucken):
oder der ältere und daher meist portablere
fc
Befehl (wird direkt neu ausgeführt):Oder vielleicht die einfachere
fc -s -1
, aber zsh akzeptiert keine solche Option für fc.Wenn Sie nur wollen, drucken Sie den Befehl verwenden:
fc -nl -1 -1
.So bearbeiten, stellen Sie
FCEDIT
in einen Texteditor (ex, ed, Emacs, vi, etc.) und verwenden fc direkt:fc -1
.quelle