ZSH で前のコマンドから引数を取得できない

ZSH で前のコマンドから引数を取得できない

Alt+.bash には、やなど、前のコマンドの引数を取得するためのよく知られたショートカットがあります。$!これらはどれも私の zsh では機能しません。私はいくつかの zprezto モジュールを使用しています。zprezto モジュールによってこれが変更されることに関しては何も見つけられませんでした。これは私が見逃している、または設定した可能性のある ZSH 設定が原因で、この動作が無効になっている可能性がありますか?

答え1

ALT.私の知る限り、あまり知られていません。これは、bash の起動時にロードしたものによって定義されていると想定しています。(これは何をするのでしょうか?)

$!最も最近開始された子プロセスのプロセスIDです。これはない入力しようとした内容です。:)

!$(短縮された)歴史の展開であり、すべきデフォルトでは、前のコマンドの最後の引数に展開されます。zshの履歴展開は詳細に文書化されています。zshマニュアル

履歴拡張は通常 で始まります!が、 の値を設定することでこれを変更できます$HISTCHARS。 の最初の文字は、$HISTCHARS履歴拡張を開始する文字として使用されます。デフォルトでは、$HISTCHARSは の値に設定されています!^#。システム上の値は次のように確認できます。

echo $HISTCHARS

もしこれがないで始まる!場合、zsh の起動時に何か異なる値が設定されており、 や などの標準のよく知られた履歴拡張は!!機能!$しません。

アップデート:

結局、上で書いた最初の段落は完全に間違っていました。 について知らなかったかもしれませんALT.が、それは私が「常に」vi モードを有効にして zsh を使用していたためかもしれません。実際、ALT.(およびALT_同じことを行う ) は、zsh のデフォルトの emacs キーバインディングで有効になっています。これらは、あなたが説明したことを実行する ZLE ウィジェット にバインドされていますinsert-last-word

デフォルトの emacs キーバインディングで zsh を使用していて、ALT.うまく動作しない場合は、シェルの起動時に読み込んでいる何かがそれを上書きしています。次のコマンドでデフォルトのキーバインディングを再設定できます。

bindkey -M emacs "^[." insert-last-word \
                 "^[_" insert-last-word

関連情報