入力が空の場合にのみ、Zsh でダブルタップ キーをバインドするにはどうすればよいですか?

入力が空の場合にのみ、Zsh でダブルタップ キーをバインドするにはどうすればよいですか?

clearzsh シェルでターミナルの入力が空の場合にのみ、ダブルタブをコマンドにバインドしようとしています。

ここまでに私が達成したことは、常にダブルタブで削除することですが、可能であれば条件を追加し、.zshrc に以下を追加します。

bindkey -s '\t\t' 'clear^M'

おそらく、入力が空かどうかを確認するために、キーバインディングを使用してカスタム関数を呼び出す必要があるのでしょうか?

これを解決するアイデアはありますか?

ありがとう!

答え1

この動作は次のコードで実現できます:

if ! typeset -f magic-double-tab-cmd >/dev/null; then
function magic-double-tab-cmd {
    echo 'clear'
}
fi

function magic-double-tab {
    # Only run magic-double-tab commands when the command line is empty and
    # when on the first line (PS1)
if ! (( $#BUFFER )) && [[ "$CONTEXT" == start ]]; then
    BUFFER=$(magic-double-tab-cmd)
    zle accept-line -w
fi
}
zle -N magic-double-tab
bindkey '\t\t' magic-double-tab

から抜粋マジックエンターリポジトリ。

これは、magic-enter プラグインが行うアプローチに似ていますが、代わりにタブを使用します。

関連情報