なぜ私は思ったんだけど Shift+ Arrow Keyの1になりA、B、CまたはD文字。
なぜ他の手紙ではないのですか?なんで手紙なんですか?
Shift + Arrow Keysでは何もしません。
なぜ私は思ったんだけど Shift+ Arrow Keyの1になりA、B、CまたはD文字。
なぜ他の手紙ではないのですか?なんで手紙なんですか?
Shift + Arrow Keysでは何もしません。
回答:
gnome-terminal(Ubuntuの「ターミナル」)などのターミナルエミュレーターは、コンピューターの唯一のディスプレイである古いターミナルの動作を再現するため、「エミュレーター」xtermとurxvtも呼ばれます。このような端末は、テキストベースのプロトコルでコンピューターと通信し、最初はテキストのみを受信するように設計されていました。すぐに、より多くの制御が必要でした:行を消去する方法?色を使う?または、カーソルの位置を変更しますか?
出典:Art of Unix Usability-Command-Line Interfaces
エスケープシーケンスは、すべての端末がそのようなことを行うために設計されました。ASCIIエスケープコードで始まるため、これらはescapeという名前です33。そのような文字を直接印刷する方法はないため、このようなシーケンスに適しています。まだこの文字を表示したい場合は^[[、を使用します。これは、説明で使用するものです。
端末がを受け取ったとき^[[A、それは「print ^ [[A」ではなく、「ユーザーが上矢印キーを押した」ことを意味していました。ここでの「A」は完全にarbitrary意的です。たまたまみんなが同意した手紙です。なぜなら、それがDEC VT-52とその人気の後継機であるVT-100ターミナルが使用したものだからです。

出典:DEC VT-52メンテナンスマニュアル1976
これは今日でも端末エミュレータの動作方法です。$TERM変数に応じて、指定されたデータベースterminfoがシェルに送信するコード(bash、sh、zsh ...)を指定します。彼らへ。
さて、Shift+ のコードはupたまたま^[[1;2A:ターミナルエミュレータはこのコードをシェルに送信します。シェルは解釈を試みますが、^[[1;2エスケープシーケンスを知らないため何も表示しません。しかしA、残されて表示されます。
^[[Aプロセスがターミナルで実行されているときに矢印キーをクリックすると、これらすべてが意味をなします。
cat >/dev/nullから入力し、完了したらCtrl + C(またはEnterを押してからCtrl + D)を押すこともできます。