Letzter Parameter des letzten Befehls in der Bash im Vi-Modus

19

Ich war überzeugt (drüben bei Stack Overflow), meine geliebte Bash im vi-Modus zu verwenden. Bisher habe ich mich ziemlich gut daran gewöhnt und es gefällt mir.

Allerdings vermisse ich wirklich eine Funktion: Im Emacs-Modus können Sie den letzten Parameter des vorherigen Befehls eingeben, indem Sie "ESC" drücken. (Das heißt, drücken Sie die Escape-Taste, gefolgt von der.)

Gibt es eine Standardbindung zum Einfügen des letzten Parameters im vi-Modus? Ich konnte keinen finden und ich vermisse diesen Befehl wirklich ...

Mo.
quelle

Antworten:

9

Es gibt keine Standardeinstellung. Die Bindung für 'yank-last-arg' (wie durch 'bind -p' aufgelistet) verschwindet, wenn Sie in den vi-Modus wechseln.

bind '"\e."':yank-last-arg

gibt dir die gleiche Bindung zurück (oder such dir etwas anderes aus)

Polsy
quelle
1
Klon für zshbindkey "\e." insert-last-word
jhvaras
Ich habe es jahrelang auf zsh und jedes Mal, wenn ich gezwungen bin, bash zu verwenden (z. B. auf einem Server bei der Arbeit), vergesse ich immer wieder, dass ich nie herausgefunden habe, wie ich es auf bash einrichten soll. Nicht mehr! Dies ist in Kombination mit von history-search-backwardsunschätzbarem Wert für ernsthafte Befehlszeilenbenutzer.
Sridhar Sarnobat
11

Es gibt (vi-yank-arg), das standardmäßig "_" zugeordnet ist. Das sollte tun, was Sie wollen (im Befehlsmodus).

Mika Fischer
quelle
+1. Ich bin nicht sicher, warum diese Antwort nicht akzeptiert wurde.
Sathyam
7

Nicht genau dasselbe, aber in beiden Modi können Sie etwas eingeben !$, und es wird durch das letzte Wort des vorherigen Befehls ersetzt. Weitere solche Dinge finden Sie im Handbuch .

Legoscia
quelle
Nah genug, um ein Upvote zu erhalten, aber nicht genau dasselbe ... Ich vermisse die Möglichkeit, die Zeile vor der Ausführung zu bearbeiten. Aber trotzdem vielen Dank!
Mo.,
5

Die ~ / .inputrc- Datei kann die Tastenzuordnung konfigurieren (Sie können sie manuell generieren, wenn sie nicht gefunden werden kann). Fügen Sie den folgenden Befehl in ~ / .inputrc ein :

"\e.": yank-last-arg
"\e_": yank-last-arg

Meine ~ / .inputrc ist:

set completion-ignore-case on
set show-all-if-ambiguous on
set show-all-if-unmodified on

set editing-mode vi
set keymap vi-insert

"\C-p": previous-history
"\C-n": next-history
"\C-a.":beginning-of-line
"\C-e.":end-of-line

"\e.": yank-last-arg
"\e_": yank-last-arg

Sie können die Details finden Readline- und bind -phier: http://linux.about.com/library/cmd/blcmdl3_readline.htm

Und ein paar Informationen zu Vi-Tastatureingaben in Bash und Readline VI-Bearbeitungsmodus-Spickzettel

Marslo
quelle
3

Fügen Sie in Ihrem .bashrc Folgendes hinzu:

set -o vi
bind -m vi-command ".":insert-last-argument
bind -m vi-insert "\C-l.":clear-screen
bind -m vi-insert "\C-a.":beginning-of-line
bind -m vi-insert "\C-e.":end-of-line
bind -m vi-insert "\C-w.":backward-kill-word

Dadurch wird das Standardverhalten von nicht nur ESC-Punkt wiederhergestellt, sondern auch von Strg-A, Strg-E, Strg-W und Strg-L. Sie können also den normalen Bash-Vi-Modus genießen und trotzdem die Verknüpfungen verwenden, die Sie kennen und lieben. Wenn Sie weitere Aktionen benötigen, überprüfen Sie einfach "man bash", um den Namen der Readline-Aktion zu ermitteln, die Sie benötigen (z. B. "Bildschirm leeren", "Zeilenende" usw.).

ttsiodras
quelle
0

Mit können Sie $_auf das letzte Argument des vorherigen Befehls verweisen.

Die Nachteile sind:

  1. Sie können nicht bestätigen, bevor Sie die Eingabetaste drücken, dass das eingefügte Objekt das ist, das Sie einfügen möchten.

  2. Wenn Sie PROMPT_COMMAND oder eine DEBUG-Falle (ich bin nicht sicher, was genau das Problem verursacht; ich habe beides in meinem .bashrc) verwenden, um ausgefallene Dinge wie das Einfügen des Befehls running in den xterm-Titel zu erledigen, wird dies zu Problemen führen $_.

Marius Gedminas
quelle