ZSHでグローバルキーバインディングを作成する

ZSHでグローバルキーバインディングを作成する

次の簡単なウィジェットを作成しました。

function my_widget() { ... }

zle -N my_widget

bindkey '^P' my_widget

問題は、このキーバインディングが常に機能していないことです。たとえば、スクリプトがパスreadまたは入力を待っている間はvaredウィジェットを呼び出すことはできません。いつでも呼び出すことができるようにしたい(たとえば、^Uまたは^W)。

すべてのキーマップにキーバインディングを追加してみました(書き込み.safe禁止になっているので除く)。

ZLEウィジェットでなくても、どこからでもショートカットを使用できるようにしたいです。

私が達成したいことを達成できますか?

ベストアンサー1

zle/はbindkey現在シェルを構成するzShine Ditorですle

対話型シェルまたはそのコマンドを使用してvaredコマンドラインをed編集するには、zleを呼び出しますvar。どちらの場合も、zleは1行に限定されず、すべてのテキストを編集できます。

readラインエディタを使用する代わりに、読む-dstdin(または他の行記述子)から単一の行(または他の種類のレコード)を取得し、端末デバイスである必要はなく、そのレコード-uの単語を指定された変数に保存します。

ユーザーがスクリプトにいくつかのテキストを入力してzleを使用して編集できるようにするには、以下を使用する必要がありますvared

var=; vared var

代わりにIFS= read -r var、stdinがその端末ではない場合でも、入力は常に端末のユーザーから読み取られることに注意してください。

zshインスタンスの行エディタがデフォルト値とは異なるキーバインディングを持つようにスクリプトを解釈し始めるには、zshインスタンスでこれらのコマンドを実行し、コマンドを使用してこれらのウィジェットを定義してzleバインドbindkeyする必要があります。

これらのウィジェットを に追加して~/.zshenvすべてzsh

^Wとの場合、^Uzlezshウィジェットがありますが、そのウィジェットを模倣(および強化)します。小さな部品ラインエディタ(and)の端末デバイスラインルール(カーネルのttyデバイスドライバにあります)erasekillラインエディタ(アプリケーションが独自のラインエディタを実装せずに端末から読み取るときに使用されます)は非常に基本的であり、コマンドを使用してバインドできるいくつかのウィジェット(、、、、... kill)しかありません。より構成可能です。eraseeoleofstty

おすすめ記事