ショートカットキーの動作制御に関する質問

ショートカットキーの動作制御に関する質問

Ctrl-keyターミナルで組み合わせがどのように機能するのか混乱しています。 Bashのマニュアルページには、次のようなさまざまな組み合わせがあります。

  • C-e- 行末に移動
  • C-f- 一文字前に移動

など。

しかし、もう少しあります。文書化されていないショートカットの例:

  • C-j(OR C-m)は戻りキーとして使用されます。
  • C-hバックスペースキーの場合
  • C-iタブなどの場合

このショートカットが録音するのを忘れましたか?または

  • C-jはいLF
  • C-mはいCR
  • C-iはいTab

これがASCIIの「基本」動作ですか?つまり、動作ですがC-j実装されC-mません。C-i渡すbashが他のものを介して?

C-vもう一つの問題は、左矢印キーを押すと^[[D画面が表示されることです。つまり、ESC-[-d。ただし、を押すとESC-[-dカーソルが左に移動しません。その理由は何ですか?

編集する:

C-j最初は、を押すとキーボードがカーネル00001010に直接渡されると思いました。しかし、などのプログラムを使ってキー押しと表示が別のイベントでxev観察されたのでそうではないと思いました。したがって、を押すとキーボードは送信しませんが、複数のバイトを送信できます。では、これらの複数のバイトはどこで変換されますか?evtestControljC-j0000101000001010

答え1

C-m背中の動作はbashで実装されていますが、背中とC-i同じであるという事実は、端末の動作によって決まります。すべての端末は常にこのように動作しており、これがアプリケーションで期待しているので、すべての端末がこのように動作します。端末とアプリケーション間のインターフェースは、キー入力ではなく文字(実際にはバイト)に基づいているため、印刷可能文字を送信しないキー入力とキー入力の組み合わせは、いかなる方法でもエンコードする必要があります。バラよりReturnTabキーボード入力とテキスト出力はどのように機能しますか?このトピックに関する追加情報。また、見ることができますhttps://emacs.stackexchange.com/questions/1020/problems-with-keybounds-when-using-terminal

TABタブ文字ですASCIIコード、これはASCIIのCtrl + I文字と同じです。他のキーも同じです。端末は、ユーザーがを押すとTab+を押すと両方ともこの文字を送信します。 (CR)および、および(ほとんどのキーボードにはありません)、およびの場合も同様です。またどちらが送るのか、それはそれ自体の問題です。CtrlIRETC-mLFDC-jESCC-[BackSpaceC-hC-?

端末の構成(stty設定)も機能します。これはbashのいくつかの設定に影響しますが(たとえば、stty erase @bashは押しをBackSpaceとして扱います)、現在の行には影響もコミットもしません@C-mC-j

^[[DはいEsc [ D、しかし資本金が必要ですD。を押すとカーソルキーエスケープシーケンスが宣言されているので、Esc [ Dbashはキーを見るでしょう。Left用語キャップまたは用語情報データベース。デフォルトのバインディングはありませんEsc [ d(共通端末から送信されたエスケープシーケンスではありません)。

答え2

2つの質問、2つのポイント:

  • control/ J、control/ M、control/は、Iほとんどのプログラムで使用される一般的なASCIIコントロールです。 bashreadlineでアイテムを簡単に再バインドできるようにします。

  • 特殊キー(左矢印など)を許可するほとんどのプログラムは、Escキーを認識する方法を提供します。優れたその特殊キーからタイミング。文字を十分にすばやく入力できない場合があります(Emacsなどの特別な場合を除く)。いいえタイミングに注意してください)。

    すばやく入力しないため、プログラムはカーソルを動かさない個々の文字を表示します。個々の文字可能楽しいことをしてください。

とにかく(質問で無視されたタイプミスの説明を参照してください。)これは、ESC[d端末に送信されたときにカーソルを画面の一番上の行に移動する標準制御シーケンスです。

CSI Pm d  Line Position Absolute  [row] (default = [1,column]) (VPA).

~からxtermはこれを実装しますもちろん、xtermのようなふりをすることはすべて同じことをします。Linuxコンソール同じようにしてください。ただし、bash制御シーケンスは通常エコーされません。観察するアクションは、bashこれを認識しないエスケープに対して実行されるすべてのアクションです。

フォームフィード関連(コメントは質問の一部であると仮定):bashのフォームフィードの使用(例:入力する) 画面の消去一部の人々を混乱させる(PuTTY開発者を含む)は、端末がページフィードを解釈する必要があると信じています。この機能は、実際にはさまざまな印刷機能を含む端末ではほとんど見られなかったラインプリンタから来ています。関連する議論については、私のメモを参照してください。もう一度ページネーターそしてフォローアップ機能を再利用してください。

関連情報