Ctrl-v で端末の文字シーケンスをダンプすると何が起こるのか理解していますか?

Ctrl-v で端末の文字シーケンスをダンプすると何が起こるのか理解していますか?

zshで関数やウィジェットにキーマッピングをバインドしたい場合、まずプロンプトでCtrl+ -を押し、次に使用したいキーシーケンスを入力し、その出力をキーバインドコマンドで使用する必要があることがわかりました。 たとえば、現在のコマンドラインの内容をエディターで開くアクションにマッピングしたい場合は、次のようにする必要があります。v
Ctrl+xCtrl+v

  • Ctrl+ - を押すvと「ダンプキーモード」に入ります
  • 打つCtrl+xCtrl+v
    • 私の場合、これは^X^E
  • を取得し^X^Eてキーバインドコマンドで使用します。例:
bindkey "^X^E" edit-command-line

なぜこれが必要なのでしょうか。また、これを行うと「舞台裏」では実際に何が起こっているのでしょうか。

答え1

Ctrl-を押すとV、シェルはキーボード割り込みを無視して起動し、押されたキーの組み合わせを入力文字として受け取ります。ASCII はすべての制御文字を保持するように設計されているため、これは簡単に可能です。

もちろん、ディスプレイ上では少しごまかして、^対応するキーの後に表示する必要があります。そうしないと、表示する必要のある文字ではなく制御文字が出力されます。

bindkeyドキュメントでは、制御文字に対して 2 つの表記法がサポートされていることが示されていることに注意してください(例についてはCtrl-を参照してくださいX)。

  • キャレット表記法は、キャレット ( ^) に続いて対応する制御文字をテキストで明示的に記述します (この質問ではCtrl-メソッドは必要ありません)。例:V^X
  • C-制御文字が続きます。例: C-x。これにより、一部のキーの組み合わせでエスケープが必要になります (使用しない場合でも)。マニュアル全体を読む必要がありscreenますbindkey

関連情報