Alt+矢印キーを押すと、どの文字が印刷されますか?

Alt+矢印キーを押すと、どの文字が印刷されますか?

AltUpを押すとA端末画面に印刷されます。押してAltDown印刷してもB同じことが起こります。

私が知っている他のキャラクター。

AltLeft=DAltRight=C

このコマンドの目的は何ですか?

ベストアンサー1

端末の設定方法に応じて、入力はキーをAlt+Key順番に入力するのと同じであるため、ESC文字(またはまたは)の後にその文字または文字シーケンスが送信されます。EscKey\e^[\033Key

を押すと、Upほとんどの端末エミュレータはアプリケーションキーボードモードになっているかどうかに応じて3文字程度を\033[A送信します。\033OA

1つ目は、端末に出力するときにカーソルを上に移動するエスケープシーケンスに対応します。これにより:

printf '\nfoo\033[Abar\n\n'

前の行の後に書かれたものを見ることbarができます。fooこれにより:

stty -echoctl; tput rmkx; read foo

矢印キーを押すと、カーソルが動いていることがわかります。

アプリケーションが端末でその文字シーケンスを好むかzsh読み取ると、それはterminfoデータベース(関数)を介して時間内に送信されたエスケープシーケンスであることを知っているので、これを「up」操作として解釈します。vikcuu1Up

sendなどのAlt-Up一部の端末には(または)などのエスケープシーケンスがあり、他の端末では、などのキーの組み合わせで使用するときに、このタイプのキーに対して別々のエスケープシーケンスを提供または提供します。rxvteterm\033Up\033\033[A\033\033OAxtermgnome-terminalAltShiftCtrl

通常\033[1;3Aはに送信されますAlt-Up

端末に送信されると、このシーケンスもカーソルを上に移動します(2番目の引数(3)は無視されます)。該当事項はありません鍵盤Alt-Upキーなので、受信または発信時に送信されるのと同じシーケンスです。アプリケーションキーボードモード

今や\033\033[A\033[1;3A多くのアプリケーションはこれらのシーケンスの用途を知りません。これらのキーの組み合わせで送信される文字を定義する機能がないため、terminfoデータベースは役に立ちません。

彼らは順序を説明するために最善を尽くします。たとえば、エスケープシーケンスとしてbash解釈され、これについて何も知らないので、何もしません。これに続いて、既知の一致する文字シーケンスが見つからないとすぐに読み取りを停止します。エスケープシーケンスが何で始まるかわからないので、そのシーケンスをスキップして残りの部分を読み、行エディタに挿入します。\033[1;3Azsh\033[1;3A

多くのアプリケーション(たとえば、viベースのアプリケーション(使用されている修正バージョンに注意))を使用すると、任意の文字シーケンスのバインディングを追加できます。zshreadlinegdbbashbashreadline

たとえば、次のようにzshバインドできます。Alt-UpAlt-Down

bindkey '\e[1;3A' history-beginning-search-backward
bindkey '\e[1;3B' history-beginning-search-forward

これは、現在のコマンドラインから現在のカーソル位置までコマンドライン履歴を使用して前後に検索するため、前のコマンドを呼び出すのに非常に便利です。

おすすめ記事