Wir alle wissen, dass !!
dies den letzten Befehl wiederholen kann, den Sie in Bash ausführen.
Aber manchmal müssen wir eine Operation wie machen
$ python test.py
$ vim test.py
$ python test.py # here is where I need to repeat the second proximate bash command
Ich kann dazu die Aufwärtspfeiltaste verwenden, aber dazu muss ich meine rechte Hand in eine unbequeme Position bringen. Also frage ich mich, ob es einen Befehl gibt, der gerne !!
funktionieren würde?
Ctrl+P
Option im Emacs-Modus (Standard) oderk
im Vi-Modus, wenn Sie nicht nach der Aufwärts-Taste greifen möchten.vim test.py && python test.py
, um nicht mit mehreren Befehlen im Verlauf herumzuspielen, aber Sie können einfach"\ep": previous-history
Ihre Befehle einbinden,~/.inputrc
sodass Sie Alt + p anstelle der Aufwärts-Taste drücken können.Antworten:
Sie können verwenden
!-2
:Das kann in Ihrer rechten Situation nicht helfen.
Sie können auch die
!string
Verlaufssuche für diese Art von Fall verwenden:Dies kann bequemer zu bedienen sein. Es wird ausgeführt:
Auch
!p
würde einfach funktionieren. Sie können!?string
die gesamte Befehlszeile und nicht nur den Start durchsuchen.quelle
echo Hello World!
vier Zeilen im Verlauf zurück hatten und echo! -4 und dann Alt- ^ eingegeben haben, erhalten Sie die Erweiterung des!-4
sofort und sehen, dass echo Hello World erweitert und bereit wartet. Weitere Informationen zu diesen Bezeichnern und Modifikatoren finden Sie in der Manpage für Bash. Suchen Sie zunächst nach "Ereignisbezeichnern".Mehr Spaß ist vorhanden. Angenommen, Sie möchten eine Datei weiter bearbeiten (wie oben, wo Sie test.py wiederholt verwenden):
thing.py
thing.py
- das letzte Wort in der vorherigen Befehlszeilepython thing.py
thing.py
foo.py
Die Manipulation der Geschichte macht so viel Spaß. Versuchen Sie es
man history
. Beachten Sie, dass die Suche nach einer Wiederverwendung des Verlaufs dazu führen kann, dass weit mehr als der Befehl selbst eingegeben wird. Die letzte Befehlsersetzung, bei der ich thing.py durch foo.py ersetze, ist ein solches Beispiel. Weniger Zeichen, um nur den Befehl und den Namen einzugeben. :) :)Die Ersetzung des Verlaufs ist auch der Grund, warum Sie beim Versuch seltsame Nachrichten erhalten:
Das Ausrufezeichen wird als Verlaufsreferenz verwendet und kann keinen vorherigen Befehl mit einem doppelten Anführungszeichen finden.
quelle
!!:1gs/x/y/
$(echo !! | sed -e s/x/y/g)