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
通常は^u
(Ctrl+U
)にバインドされます。参考文書。そうでない場合は、次のようにバインドできます。
bindkey '^u' kill-whole-line
その後、次のことができます。
bindkey -s '\eb' '^u/path/to/script.sh^M'
入力文字(改行文字)Alt+b
が送信される前に現在の行を終了するようにバインドします。^M