Fügen Sie den :p
Modifikator hinzu , z !42:p
. B. , um anzufordern, dass der Befehl gedruckt und nicht nach dem Ersetzen des Verlaufs ausgeführt wird . Der resultierende Befehl wird auch in den Verlauf eingegeben, sodass Sie ihn durch Drücken Upvon bearbeiten können.
Wenn Sie die histverify
Option set ( shopt -s histverify
) haben, haben Sie immer die Möglichkeit, das Ergebnis von Verlaufsersetzungen zu bearbeiten.
Die integrierte fc
Funktion bietet eingeschränkten Zugriff auf die Verlaufserweiterung (keine Wortbezeichnungen ) und ermöglicht das Bearbeiten eines vorherigen Befehls in einem externen Editor.
Sie können verwenden !prefix
, um auf den letzten Befehl zu verweisen, der mit beginnt prefix
, und !?substring
um auf den letzten Befehl zu verweisen, der mit beginnt substring
. Wenn Sie wissen, wonach Sie suchen, kann dies viel Zeit sparen history | less
.
Eine andere Möglichkeit zum Durchsuchen des vorherigen Verlaufs ist die inkrementelle Suche: Drücken Sie Ctrl+ Rund geben Sie eine Teilzeichenfolge ein, nach der Sie suchen. Drücken Sie Ctrl+ R, um zum vorherigen Vorkommen des Suchbegriffs zu springen, und Ctrl+, Swenn Sie zu weit gegangen sind. Die meisten Tasten außer Ctrl+ R, Ctrl+ S, Backspaceund gewöhnliche Zeichen beenden die inkrementelle Suche und haben ihre übliche Wirkung (zB Pfeiltasten , um den Cursor in die Zeile bewegen Sie erreicht haben, Enterden Befehl auszuführen).
Gilles 'SO - hör auf böse zu sein'
quelle
stty -ixon
bevor Strg-s funktioniert.Ctrl-s
ist wichtig, sonst bleibt man stecken wie ich .Ein weiteres kleines: Alt+#
Kommentiert die aktuelle Zeile aus und verschiebt sie in den Verlaufspuffer.
Wenn Sie also eine Befehlszeile zusammenstellen und einen Zwischenbefehl eingeben müssen, um z. B. eine Datei zu finden, drücken Sie einfach Alt+ #, geben den anderen Befehl ein, gehen in den Verlauf ein, entfernen das Kommentarzeichen und fahren fort.
quelle
Esc
,#
arbeitetSie können das magische Feld verwenden, um den Verlauf zu erweitern, bevor Sie die Eingabetaste drücken. Ordnen Sie in Ihrer .inputrc den Raum dem magischen Raum zu:
Wenn Sie ein Leerzeichen nach einer Verlaufsangabe eingeben, wird es sofort erweitert - praktisch, wenn Sie es auch bearbeiten möchten!
quelle
Schauen Sie sich den
history-expand-line
Befehl an, an denAlt+^
standardmäßig gebunden ist . Dadurch wird die vorhandene Zeile erweitert, die Sie dann bearbeiten können.quelle
Mit können
Ctrl+r
Sie den Verlauf durchsuchen:Jeder gefundene Befehl kann bearbeitet werden ...
Ich denke, dass ich genau das gefunden habe, was Sie brauchen: ausführen
shopt -s histverify
und das nächste Mal, wenn Sie den!n
Befehl verwenden möchten, wird nicht ausgeführt, sondern nur in die Befehlszeile gestellt ...quelle
!n:p
funktionieren?Ich habe das oft gewollt. Als ich csh (und tcsh) benutzte, hatte ich eine Redewendung:
!:88*:p
Diese Redewendung fügt "Wort 88 bis zum letzten Wort" des vorherigen Befehls an der Stelle ein, an der Sie in die aktuelle Befehlszeile tippen. Dies ist normalerweise das Ende. In csh ist es kein Fehler, dass ein solcher Ausdruck keine Wörter produziert. Das heißt, es muss kein Wort 88 geben, noch eines, das darauf folgt. Wenn kein Wort 88 vorhanden ist, werden dem Ende des eingegebenen Befehls keine Wörter hinzugefügt, und die resultierende Befehlszeile wird ohne Ausführung in den Verlauf verschoben.
Wie Sie wahrscheinlich wissen,
*! (wie !! und! -1) ist der vorherige Befehl;
*: 88 ist Wort 88 (das erste Wort - normalerweise der Befehl - ist Null) und csh würde erfordern, dass ein solches Wort existiert, aber ...
*: 88 * sind alle Wörter, die mit Wort 88 beginnen, und dann tut csh es es ist nicht erforderlich, dass das Wort existiert;
*: p bedeutet Drucken, aber die Befehlszeile nicht ausführen.
Mit oder ohne: p wird die Befehlszeile zum Befehlsverlauf hinzugefügt.
"Warum 88?" du wunderst? Weil es derselbe Schlüssel ist wie der *, den ich brauche. Wenn Sie so lange Befehle haben, vielleicht!: 888 *: p ist das, was Sie brauchen. Entschuldigung, das funktioniert nicht mit bash AFAIK. Bash wird nur sagen
bash: :88*: bad word specifier
Unterhaltsame Tatsache: Ihr Befehl muss normalerweise nicht an erster Stelle stehen.
> /tmp/foo echo My command is word 3
ist gültig in bash und csh.
quelle
Normalerweise verwende ich Ctrl+, um rzu suchen und dann Ctrl+ e, um zum Ende der Zeile zu gelangen, ohne sie auszuführen.
quelle