wie man das letzte Argument in bash mit vi-Einstellung zurückruft

7

Ich benutze die set -o viEinstellung in Bash. Der Shorcut Alt+.(erinnert an das letzte Argument des vorherigen Befehls) funktioniert hier nicht wie im Emacs-Modus. Was ist also das Äquivalent für vi?

Kossak
quelle

Antworten:

4

Fügen Sie diese Zeile hinzu nach set -o vi:

bind -m vi-command ".":yank-last-argument # or insert-last-argument

Dann können Sie Alt+ .wie im Emacs-Modus verwenden.

Oder verwenden Sie die Verlaufserweiterung und arbeiten Sie in beiden Bereichen:

!$:p
cuonglm
quelle
2
Es gibt zwar den letzten Befehlsparameter aus, durchläuft jedoch nicht alle zuletzt verwendeten Befehlsparameter, wie dies im Emacs-Modus der Fall ist. Im vi-Modus erhalten Sie immer wieder den letzten Parameter. Es hilft nicht viel.
MaikoID
1
Laut Dokumentation ist der richtige Befehl yank-last-arg.
Jasonwryan
@ Jasonwryan: Sie sind synonym. Siehe: gnu.org/software/bash/manual/html_node/… .
Cuonglm
9

Es gibt verschiedene Methoden, um das letzte Argument des letzten Befehls abzurufen:

1. inputrc: insert-last-argument & yank-last-arg

Kopieren Sie den folgenden Code in Ihre ~/.inputrcDatei

set editing-mode vi
# Insert Mode
set keymap vi-insert
"\e.":yank-last-arg
"\e_": yank-last-arg

Sie können meine inputrc-Datei verwenden . Und hier das inputrc Handbuch für insert-last-argumentundyank-last-arg

2. Wortbezeichner: !!: $ &! $

Zum Beispiel:

┌─ (marslo@MarsloJiao ~) ->
└─ # echo arg1 arg2 arg3 arg4 arg5
arg1 arg2 arg3 arg4 arg5

┌─ (marslo@MarsloJiao ~) ->
└─ # echo !$
echo arg5
arg5

┌─ (marslo@MarsloJiao ~) ->
└─ # echo arg1 arg2 arg3 arg4 arg5
arg1 arg2 arg3 arg4 arg5

┌─ (marslo@MarsloJiao ~) ->
└─ # echo !!:$
echo arg5
arg5

┌─ (marslo@MarsloJiao ~) ->
└─ # echo arg1 arg2 arg3 arg4 arg5
arg1 arg2 arg3 arg4 arg5

┌─ (marslo@MarsloJiao ~) ->
└─ # echo !!:^
echo arg1
arg1

┌─ (marslo@MarsloJiao ~) ->
└─ # echo arg1 arg2 arg3 arg4 arg5
arg1 arg2 arg3 arg4 arg5

┌─ (marslo@MarsloJiao ~) ->
└─ # echo !!:2-4
echo arg2 arg3 arg4
arg2 arg3 arg4

Das Handbuch von Shell Word Designator zeigt:

!!: $

designates the last argument of the preceding command. This may be shortened to !$.

0 (Null)

The 0th word. For many applications, this is the command word.

n

The nth word.

^

The first argument; that is, word 1.

$

The last argument.

%.

The word matched by the most recent ‘?string?’ search.

xy

A range of words; ‘-y abbreviates 0-y’.

* *

Alle Wörter außer dem 0 .. Dies ist ein Synonym für '1- $'. Es ist kein Fehler, ' ' zu verwenden, wenn das Ereignis nur ein Wort enthält. In diesem Fall wird die leere Zeichenfolge zurückgegeben. x

Abbreviates x-$

x-

Abbreviates x-$ like x*’, but omits the last word.

3. Spezielle Shell-Parameter: $ _

Zum Beispiel:

┌─ (marslo@MarsloJiao ~) ->
└─ # echo very-very-very-very-very-long-argument
very-very-very-very-very-long-argument

┌─ (marslo@MarsloJiao ~) ->
└─ # echo $_
very-very-very-very-very-long-argument

┌─ (marslo@MarsloJiao ~) ->
└─ # ls /usr/local/etc/

┌─ (marslo@MarsloJiao ~) ->
└─ # cd $_

┌─ (marslo@MarsloJiao /usr/local/etc) ->
└─ #

Im Handbuch von Shell Special Parameters :

_

(Ein Unterstrich.) Setzen Sie beim Start der Shell den absoluten Pfadnamen, der zum Aufrufen der Shell oder des Shell-Skripts verwendet wird, die bzw. das in der Umgebungs- oder Argumentliste übergeben wird. Erweitert anschließend nach der Erweiterung zum letzten Argument des vorherigen Befehls. Stellen Sie außerdem den vollständigen Pfadnamen ein, der zum Aufrufen jedes ausgeführten und in die in diesen Befehl exportierte Umgebung platzierten Befehls verwendet wird. Beim Überprüfen von E-Mails enthält dieser Parameter den Namen der E-Mail-Datei.

Marslo
quelle