キーバインディングの問題を理解する

キーバインディングの問題を理解する

設定とzshセッションがあります

~ bindkey | grep help    
"^[H" run-help
"^[h" run-help

「Control + [+ h」を押すとカーソルの下の単語が削除され、何も起こりませんが、「Alt + h」を押すとマニュアルページが正しく開くのはなぜですか?

ベストアンサー1

Control+を押し[てからすぐに押しますh

ターミナルはキーストロークをシェルに直接送信しません(たとえば、Control押し/手を離す)。代わりに、端末は押されたキーに従って一連の文字を送信します。順序に従ってキーを同時に押すのではなく、順番に押す必要があります。最大の例外は、ControlキーとAlt特定のシーケンスを生成するために他のキーと同時に押すキーです。

すでに知っている/知っているように、-keyの記号^として使用されますが、次の文字と組み合わせて使用​​される場合にのみこの意味を持ちます。 +または+を表し、大文字と小文字の組み合わせのキーシーケンスは同じです(これが端末がシェル関連のショートカットではなく、独自のショートカットとして++を頻繁に使用する理由です)。Control^AControlaControlAControlControlShiftSOMEKEY

^[文字通りControl+を意味します[。さんも送りましたEscape。したがって、+の後に(小文字!)が続く^[aことを意味します。また、-key は押されたキーが続くシーケンスも送信します。したがって、+も送信されます。Control[aAlt^[Alta^[aAltShifta^[A


したがって、たとえば、次のいずれかを押すことができます(「+」は「同時に」を意味し、「、」は「順番に」を意味します)。

  • ~のため^[h
    • Alt+h
    • Escapeh
    • Control+ [h
  • ~のため^[H
    • Control+ [Shift+h
    • Alt+ Shift+h
    • EscapeShift+h

PgUp、または同じ特殊キーもキーシーケンスを送信しますBackspace。これは通常、端末エミュレータによって異なります。あるいは、ウィジェットを使用してキーシーケンスを表示することもできます。デフォルトではそのモードにバインドされています。したがって、+を押してから関連キーの組み合わせを押すと、使用可能な順序が表示されます。マイコンピュータでは、次のようになります。ReturnKP_Enterquoted-insertvi-quoted-insert^VControlvbindkeytermite

  • PgUp:、、^[[5~さらにControl+ [、、、、または[、、、、または+ 5、、、​​​​~Escape[5~Alt[5~
  • Backspace^?、、これもControl+?
  • Return^M、、これもControl+m
  • KP_Enter^[OM、、さらにControl+ [Shift+ oShift+ 、mまたはAlt++ 、Shift+oShiftm

理論的には、キーシーケンスはランダムに長く複雑です。たとえば、

bindkey '^[xfooba^r' run-help

Alt+ x、、、、、、、+はウィジェットをf実行しoますobaControlrrun-help

zsh複数の文字シーケンスを許可する前に、特定の時間だけ他の文字を待つという点でいくつかの制限があります。このタイムアウトはパラメータで設定可能で、KEYTIMEOUT100分の1秒単位で測定されます。デフォルト値は400.4秒です。

おすすめ記事