web-dev-qa-db-ja.com

現在のコマンドをzshに保存する方法は?

コマンドを入力しているときに、何かをチェックする必要があることを覚えています。 Ctrl+U コマンドが消えて他の何かを入力できますが、入力していたコマンドは履歴にありません。

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

11
michelpm

Ctrl+Y 最後にカットしたアイテムを貼り付けます( Ctrl+U、 Ctrl+K、 Ctrl+Wなど)。

12
Kevin

Push-lineZLEコマンドを見てください。このコマンドは、行の現在の内容をバッファスタックにプッシュし、行をクリアします。次に別のコマンドを入力すると、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.

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

10
user26112

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

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

このコマンドのラッパーを使用します。私はタイプする Ctrl+Z 入力しているコマンドを「中断」して、別のコマンドを入力します。そのコマンドを実行した後(またはで中止した後) Ctrl+C)、中断されたコマンドが編集のために戻ってきます(カーソル位置を覚えていても)。追加の利便性として、入力時にコマンドラインが空の場合 Ctrl+Z、キーは代わりにbgビルトインを呼び出します(したがって、double Ctrl+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