Wie speichere ich den aktuellen Befehl auf zsh?

Wie speichere ich den aktuellen Befehl auf zsh?

Ich gebe einen Befehl ein, mir fällt ein, dass ich etwas überprüfen muss. Wenn ich Ctrl+ drücke U, verschwindet der Befehl und ich kann etwas anderes eingeben, aber dann ist der Befehl, den ich eingegeben habe, nicht im Verlauf.

Gibt es eine Möglichkeit, diesen Befehl wiederherzustellen, oder eine andere Tastenkombination, mit der ich den Befehl irgendwo speichern kann?

Antwort1

Sehen Sie sich den push-lineZLE-Befehl an. Dieser Befehl schiebt den aktuellen Inhalt der Zeile in den Pufferstapel und löscht die Zeile. Sie können dann einen anderen Befehl eingeben und wenn ZLE erneut gestartet wird, wird die Zeile vom Pufferstapel in den Zeilenpuffer verschoben.

prompt@world$ cp abc /mnt/usr/bin       # The user presses Esc-q
prompt@world$                           # The line is cleared
prompt@world$ mount -v /dev/sdb1 /mnt   # And the user can enter another command
mount: /dev/sdb1 mounted on /mnt
prompt@world$ cp abc /mnt/usr/bin
# The first command is popped off of the stack
#  as soon as ZLE comes back.

Standardmäßig ist dieser Befehl im Emacs-Modus an Alt/ gebunden. Sie können diesen Befehl mit dem Befehl an eine andere Taste binden. Um ihn beispielsweise an / zu binden , fügen Sie zu Ihrem hinzu .EscqbindkeyAltEscvbindkey '^[V' push-linezshrc

Antwort2

Ctrl+ Yfügt das letzte ausgeschnittene Element ein (mit Ctrl+ U, Ctrl+ K, Ctrl+ W, usw.).

Antwort3

Sie suchen denpush-lineCtrlBefehl, der standardmäßig an + Qund gebunden ist Esc Q. Dieser Befehl löscht die Eingabe und ermöglicht Ihnen die Eingabe eines anderen Befehls. Sobald Sie diesen Befehl ausgeführt oder abgebrochen haben, wird der vorherige Befehl zur Bearbeitung wiederhergestellt.

Bei einem mehrzeiligen Befehl push-linelöscht nur die aktuelle Zeile und behält die anderen Zeilen im Eingabepuffer. Es gibt einen weiteren Befehlpush-inputDadurch wird der gesamte Eingabepuffer gelöscht, der standardmäßig an keine Taste gebunden ist.

Ich verwende einen Wrapper um diesen Befehl. Ich tippe Ctrl+ , Zum den Befehl, den ich gerade eingebe, „anzuhalten“, und tippe dann einen anderen Befehl. Nachdem ich diesen Befehl ausgeführt (oder mit Ctrl+ abgebrochen C) habe, kommt der angehaltene Befehl zur Bearbeitung zurück (und merkt sich sogar die Cursorposition). Als zusätzliche Annehmlichkeit ruft die Taste, wenn die Befehlszeile leer ist, während ich Ctrl+ eingebe Z, stattdessen die bgintegrierte Funktion auf (ein doppeltes Ctrl+ Zschickt also einen laufenden Befehl direkt in den Hintergrund).

fancy-ctrl-z () {
  emulate -LR zsh
  if [[ $#BUFFER -eq 0 ]]; then
    bg
    zle redisplay
  else
    zle push-input
  fi
}
zle -N fancy-ctrl-z
bindkey '^Z'          fancy-ctrl-z

Eine einfache Methode, die in jeder Shell funktioniert, besteht darin, #am Anfang der aktuellen Zeile ein hinzuzufügen und zu drücken Enter.

verwandte Informationen