zsh で現在のコマンドを保存するにはどうすればいいですか?

zsh で現在のコマンドを保存するにはどうすればいいですか?

コマンドを入力しているときに、何か確認する必要があることを思い出しました。Ctrl+を押すとUコマンドが消えて別のコマンドを入力できますが、入力していたコマンドは履歴に残りません。

そのコマンドを回復する方法、またはコマンドをどこかに保存するために押すことができる別のショートカットはありますか?

答え1

ZLE コマンドを見てみましょうpush-line。このコマンドは、行の現在の内容をバッファ スタックにプッシュし、行をクリアします。その後、別のコマンドを入力すると、ZLE が再起動し、行がバッファ スタックから行バッファにポップされます。

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.

デフォルトでは、このコマンドはemacs モードのAlt/にバインドされていますEscq。 コマンドを使用して、このコマンドを別のキーにバインドできます。たとえば、 /bindkeyにバインドするには、に を追加します。AltEscvbindkey '^[V' push-linezshrc

答え2

Ctrl+ はY、最後に切り取った項目 ( Ctrl+ UCtrl+ KCtrl+Wなど) を貼り付けます。

答え3

あなたが探しているのはpush-lineコマンドは、デフォルトで + にバインドされています。Ctrlこのコマンドは入力をクリアし、別のコマンドを入力できるようにします。このコマンドを実行またはキャンセルすると、前のコマンドが編集用に戻されます。QEsc Q

複数行コマンドでは、push-line現在の行のみをクリアし、他の行は入力バッファに保持します。別のコマンドもあります。push-inputデフォルトではどのキーにもバインドされていない入力バッファ全体をクリアします。

私はこのコマンドのラッパーを使用しています。Ctrl+とZ入力すると、入力中のコマンドが「一時停止」され、別のコマンドを入力します。そのコマンドを実行した後 (またはCtrl+で中止した後C)、一時停止されたコマンドが編集用に戻ってきます (カーソルの位置も記憶されています)。さらに便利なことに、Ctrl+と入力したときにコマンド ラインが空の場合Z、キーはbg代わりに組み込みキーを呼び出します (つまり、Ctrl+を 2 回押すとZ、実行中のコマンドが直接バックグラウンドに送られます)。

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

どのシェルでも機能するローテクな方法は、#現在の行の先頭に を追加して を押すことですEnter

関連情報