So wie M-.
(Meta-Punkt oder Esc-Punkt oder Alt-Punkt) die Readline-Funktion ist yank-last-arg
, ist M-C-y
(Meta-Control-Y oder Esc-Strg-Y oder Strg-Alt-Y) die Readline-Funktion yank-nth-arg
. Ohne Angabe n
wird das erste Argument des vorherigen Befehls gezogen.
Um ein Argument anzugeben, drücken Sie Escape und eine Zahl oder halten Sie Alt gedrückt und drücken Sie eine Zahl. Sie können Folgendes tun Alt: -Um mit der Angabe einer negativen Zahl zu beginnen, lassen Sie die Alt-Taste los und drücken Sie die Ziffer (dies zählt ab dem Ende der Liste der Argumente.
Beispiel:
Geben Sie den folgenden Befehl ein
$ echo a b c d e f g
a b c d e f g
Geben Sie nun bei der nächsten Eingabeaufforderung echo
(mit einem folgenden Leerzeichen) ein
Drücken Sie Alt- Ctrl- yund Sie sehen jetzt:
$ echo a
Gehen Sie Enterwie folgt vor, ohne noch zu drücken
Drücken Sie Alt- 3 Alt- Ctrl-y
Drücken Sie Alt- - 2 Alt- Ctrl-y
Jetzt werden Sie sehen:
$ echo ace
Übrigens hätten Sie das echo
in die Zeile setzen können, indem Sie das Argument 0 ausgewählt haben:
Drücken Sie Alt- 0 Alt- Ctrl-y
Bearbeiten:
So beantworten Sie die Frage, die Sie Ihrem Original hinzugefügt haben:
Sie können drücken Alt- und 0dann wiederholt drücken Alt- ., um die vorherigen Befehle zu durchlaufen (arg 0). In ähnlicher Weise können Sie Alt- -dann wiederholen Alt- .die vorherigen vorletzten Argumente durchgehen.
Wenn es in einer bestimmten Zeile in der Geschichte kein geeignetes Argument gibt, wird die Glocke geläutet.
Wenn Sie eine bestimmte Kombination häufig verwenden, können Sie ein Makro so definieren, dass es mit einem Tastendruck ausgeführt wird. In diesem Beispiel wird das zweite Argument aus früheren Befehlen durch Drücken von Alt- Shift- abgerufen Y. Sie können einen beliebigen verfügbaren Tastenanschlag anstelle dieses auswählen. Sie können wiederholt darauf drücken, um die vorherigen zu durchlaufen.
Geben Sie zum Ausprobieren das Makro an einer Bash-Eingabeaufforderung ein:
bind '"\eY": "\e2\e."'
Fügen Sie Ihrer ~/.inputrc
Datei diese Zeile hinzu, um sie dauerhaft zu machen :
"\eY": "\e2\e."
Leider scheint dies für arg 0 oder negative Argumentnummern nicht zu funktionieren.
bind -lp
suche, laufe ich gerne und schaue mir die aktuellen Bindungen an.-s
(neu in Bash 4) listet Makros auf, die mit erstellt wurden-x
.M-.
:Alt-3
Alt-Ctrl-y
Beispiel: HaltenAlt
und Tippen3.
. Wenn Sie dies3.
mehrmals eingeben, ohne es freizugebenAlt
, gehen Sie die dritten Argumente Ihrer vorherigen Befehlszeilen durch.!$
Ruft das letzte Element des vorherigen Befehlszeilenarguments ab.quelle
!:3
holt dir den dritten!!
holt dir den gesamten letzten Befehl. Nützlich, wenn Sie vergessen haben, zu verwendensudo
.!:1-2
bekommt Sie alle bis auf das letzte von 3 Argumentenecho foo{,bar} baz
, wird der Befehl als gedruckt aufgezeichnet und anschließend erweitert. Mit dem oben genannten wird die Verwendung vonecho !:1
after in aufgelöstecho foo{,bar}
und dann erweitertecho foo foobar
Um das erste Argument zu verwenden, können Sie
!^
oder verwenden!:1
Beispiel:
Da es bei Ihrer Frage um die Verwendung anderer Argumente geht, sind hier einige nützliche:
Die ersten vier Formen werden häufiger verwendet. Das Formular
!:2-
ist etwas kontraintuitiv, da es nicht das letzte Argument enthält.quelle
file3
ausmv file1 file2 file3 target/
?Ich mochte @larsmans Antwort so sehr, dass ich mehr lernen musste. Hinzufügen dieser Antwort, um anderen zu helfen, den Manpage-Bereich zu finden und zu wissen, wonach sie googeln sollen:
quelle
! ^ kann der Befehl für das erste Argument sein. Ich bin mir nicht sicher, ob es einen Weg gibt, den n-ten zu bekommen.
quelle
!:n
, aber eher vom Ende als vom Anfang zu zählen?Sie können auch Argumente von jedem Befehl in Ihrem Verlauf erhalten!
quelle
Getestet unter Ubuntu 18.04
So fügen Sie vorherige Argumente ein:
Unter Linux können Sie Befehle wiederholen, um in den Verlauf zurückzukehren
Beispiel:
Letzter Befehl ist:
mv
foo
mv foo
Allgemeine Verknüpfungen
Durchlaufen der Argumente in einem vorherigen Befehl
funktioniert nur in zsh
Führen Sie dies aus oder fügen Sie es Ihrem hinzu
~/.zshrc
Verwenden Sie nun Alt+ ., um so zurück zu gehen, wie Sie möchten, und verwenden Sie dann Alt+ :, um die Argumente zu durchlaufen
Vorausgesetzt, der letzte Befehl ist
5
4
3
2
1
echo
Quelle: https://stackoverflow.com/a/34861762/3163120
Um alle verfügbaren Verknüpfungen anzuzeigen
bind -lp
bindkey -L
Ich halte dies in dieser Übersicht https://gist.github.com/madacol/da38e42d7e45c2949a9f425cc20543e9 auf dem neuesten Stand
quelle
Alt .
auf Zsh auf Mac tippt≥
🤔bindkey -L
in zsh ausgeführt werden, um zu sehen, ob alle Verknüpfungen gebunden sind. Vielleicht hilft dies dabei, das Problem zu lokalisieren oder sogar andere nützliche Befehle zu finden. In meinem Fall zum Beispiel: Die BindungAlt .
ist definiert alsbindkey "^[." insert-last-word
.Ctrl L
(um den Bildschirm zu löschen) ->bindkey "^L" clear-screen
.Alt+Ctrl h
->bindkey "^[^H" backward-kill-word
(wieCtrl w
um das letzte Wort zu entfernen)bindkey "^[^_" copy-prev-word
Grundsätzlich hat es eine Verwendung beim Ziehen früherer (Befehls-) Argumente .
Zum Beispiel, wenn der folgende Befehl ausgegeben wird:
dann
Hello,
wird das erste Argument sein, undtoday?
das sechste , das ist das letzte; Das heißt, es kann durch Eingabe von: referenziert werden.Alt+6 gefolgt von Ctrl-Alt-6
Ctrlwird traditionell als Hut Charakter bezeichnet
^
vorangestellt Schlüssel Namen, und AltwieM-
das heißt M eta - Präfix.So kann die obige Verknüpfung neu definiert werden, um
^My
zu ziehen.Außerdem gibt es in der Befehlszeile eine Verknüpfung zum Ersetzen von Hüten :
um die erste übereinstimmende Zeichenfolge des vorherigen Befehls zu ersetzen , was bedeutet:
würde führen zu:
Lassen Sie das zweite Match (
hello
) unverändert.Das Obige ist nur eine Abkürzung für:
Die Ersetzung der ersten gefundenen (übereinstimmenden) Zeichenfolge im vorherigen Befehl auf Ereignisebene (*), während das Präfixieren des ersten Teils mit dem
g
Schalter für die gesamte Zeile g gilt :wie sie üblicherweise in anderen verwandten Befehlen durchgeführt, wie wird
sed
,vi
und inregex
(regular expression) - einen standart Weg (suchen Matchstring ).Das habe ich verstanden, indem ich es selbst verwendet und Dinge selbst ausprobiert habe, die ich aus verschiedenen Quellen gelesen habe, einschließlich Handbuchseiten, Blogs und Foren.
Ich hoffe, es gibt Aufschluss über mysteriöse Möglichkeiten
bash
der Bourne-Again-Shell (ein Spiel mit dersh
Shell, die nach dem Nachnamen des Erfinders selbst als Bourne-Shell bezeichnet wird), der Standard-Shell in vielen Distributionen, einschließlich Servern ( Server-Betriebssystemen ).quelle
! ^ bringt dir den ersten Parameter ,! $ holt dir den letzten Parameter,!: n bringt dir das n-te Element.
quelle
Die am Ende der akzeptierten Antwort beschriebene Methode funktioniert für mich auch mit dem nullten Argument. Ich habe diese Zeilen in meinem
~/.inputrc
:\e2\e.
hat den Vorteil,\e2\e\C-y
dass vorherige Befehle durchlaufen werden, wenn sie wiederholt gedrückt werden, anstatt das zweite Argument des vorherigen Befehls mehrmals einzufügen.Um den gesamten vorherigen Befehl einzufügen, können Sie Folgendes eingeben
!!\e^
.\e^
isthistory-expand-line
.quelle
Wenn Sie auf einem Mac arbeiten, erhalten Sie in der Regel erweiterte Zeichen mit Strg + Buchstabe. Ich habe meinen Optionsschlüssel für die Leertaste in meinem Terminal (iTerm2) als Meta definiert. Dies bedeutet, dass ich die Taste verwende, um nach Wörtern zu navigieren und Parameter aus vorherigen Befehlen abzurufen.
quelle