17

bindkey私は通常、ウェブ上で (コマンドを使用して) 興味深い zsh キーバインド設定を見つけます。私の質問は、これらのエスケープされたシーケンスがマップされたものをどのように解釈するのですか? たとえば、これはoh-my-zshkey-bindings.zshのスニペットです。

bindkey "^[[H" beginning-of-line
bindkey "^[[1~" beginning-of-line
bindkey "^[[F"  end-of-line
bindkey "^[[4~" end-of-line

これらのキーマップがどのように表現されるかについての参照はありますか? また、それはzsh固有ですか、それともプラットフォーム固有ですか?

catまたはCtrl-Vを使用して、特定のキーに対応するエスケープされたシーケンスを見つけることができることを認識しています。逆の一致を見つけるためにブルートフォースを使用できることを考えると、これはキーボードに存在しないキー (Mac ラップトップの Home/End など) では機能しません。したがって、物理キーボードに関係なくキーを決定できる方法を好みます。

4

2 に答える 2

6

典型的な UNIX/Linux のイベント フローについて言えば、図はおおまかに次のようになります。

端末エミュレータ プログラムは、ボタンが押された、別のボタンが離されたなどの X イベントを受け取ります。これらのイベントは、たとえばxevユーティリティで追跡できます。ターミナル エミュレータは、これらのイベントをエスケープ シーケンスに変換します。

この翻訳は決まったものではありません。構成できます。ターミナル エミュレータが異なれば、設定も異なります。たとえば、xtermの翻訳は.Xdefaultsで次のように設定できます。

XTerm*VT100*Translations:#override \
Ctrl<Key>Left:          string(0x1B) string(OD) \n\
Ctrl<Key>Right:          string(0x1B) string(OC) \n\

ESC である 0x1B に注意してください。ESC も^[として出力されます。

現在、zsh は zle を使用しており (bash は同じ目的で readline ライブラリを使用しています)、シーケンスの一部を解釈して入力行を移動し、編集アクションを実行します。

次のテキストは、より多くの追加の詳細を提供する必要があります。

Zsh ライン エディタの説明

エスケープ シーケンスに関するウィキペディアの記事

Xterm 制御シーケンス

于 2011-03-15T16:42:07.233 に答える