Bindkeyを使用してZSHでスクリプトを実行するには?

Bindkeyを使用してZSHでスクリプトを実行するには?

ZSHのbindkeyスクリプトにキーシーケンスをどのようにバインドするのですか?

答え1

ウィジェットは必要ないと思います。

bindkey -s '\eb' '/path/to/script.sh\n' 

~からzsh ドキュメント:

ZLEコマンドと同様に、 "bindkey -s"を使用してキーシーケンスを別の文字列にバインドできます。

答え2

スクリプトを呼び出すウィジェットを定義できます。

my-script_widget() my-script its args
zle -N my-script_widget
bindkey '\ej' my-script_widget

しかし、なぜzleから直接スクリプトを呼び出すのですか?

何も表示されるとディスプレイがめちゃくちゃになります。出力が別のウィジェットメッセージとして表示されるようにするには、次のようにします。

my-script_widget() zle -M "$(my-script its args)"

または、出力をカーソルに挿入するには、次のようにします。

my-script_widget() LBUFFER+=$(my-script its args)

答え3

拡張してください@スサイド答え:

キーシーケンスのみが送信されるため、bindkey -sプロンプトにすでに何かがあり、バインディングを使用しようとすると、プロンプトにすでに何かがある場合にのみ入力します。この問題は、kill-whole-lineコマンド/スクリプトを入力する前にクリーンアッププロンプトを送信することで解決できます。

kill-whole-line通常は^uCtrl+U)にバインドされます。参考文書。そうでない場合は、次のようにバインドできます。

bindkey '^u' kill-whole-line

その後、次のことができます。

bindkey -s '\eb' '^u/path/to/script.sh^M'

入力文字(改行文字)Alt+bが送信される前に現在の行を終了するようにバインドします。^M

関連情報