ctrlBashでは、+を押してvそのまま挿入を開始します。アキュムレータモードでEscキーを押すとbashが表示されます^[
。私はそれをファイルにリダイレクトしますesc
。
また、逐語モードでctrlキーを押すと[bashが表示されます^[
。私はそれをファイルにリダイレクトしますctrl
。
次に、2つのファイルを比較した結果、同じものが見つかりました!
$ echo '^[' > esc
$ echo '^[' > ctrl
$ diff esc ctrl
$
Ctrl+[とEsc同じコンテンツを生成するのはなぜですか?
^[
ここC0およびC1制御コード?それでは、Wikiの記事には^[
Escapeと言われていますがctrl+[もEscapeなのはなぜですか?
基本的な問題は、キーバインディングを確認して生成したいということです。
(zsh)$ bindkey -L
...
bindkey "^['" quote-line
...
だから私は入力する必要ESC+'
がありますかctrl+[+'
?
答え1
^A
これは文字コード1で、^@
NULバイトを表すために使用されるCtrl-Aと同じロジックに従うようです。ここでは^
、Ctrlを別のキーで表現する一般的な方法です。
つまり、与えられた入力文字コードは次のようになります。Ctrl-foo金持ちビット6がクリアされ、文字コードが64減少します。したがって、A
文字コード^A
1は文字コード65、0の64、27の@
ESCです。 ESC には別個のキーがありますが、制御文字も生成する Enter キーと Tab キーもあるので、それほど珍しいものではありません。^@
[
^[
もちろん、現代のシステムの仕組みは、キーマップやキーバインディングの設定方法などの他の要因によっても変わります。また、たとえば、文字コードが64未満の場合はどのように機能するのか尋ねないでください。端末で試しましたが、NULバイトが出ました。Ctrl-something^1
Ctrl-space
答え2
bashなどのテキスト端末アプリケーションでテキスト端末を使用している場合は、特殊キー(たとえば、および)EscとTab対応EnterするBackspace制御文字([IM / JH /?)を区別できません。同様に、数字列の数字と数字パッドの数字も区別できません。他のいくつかのキー(矢印、ファンクションキー、ページの上/下など)は複数の文字シーケンスを生成します。
ただし、グラフィカル環境(X11、ウェイランド)では、キーを押すとキーの押下に関連するイベントが生成されます。これは、単一の文字マップであるか複数の文字マップであるかに関係なく、文字マップとは無関係ですが、リンクされています。グラフィックアプリケーションは、選択した場合、これらのキーのほとんどを区別できます。 (場合によっては、キーにまだ区別できないマッピングがある可能性がありますが、これはまれであり、キーのマッピング方法によって異なります。)
デフォルトでは、グラフィックターミナルアプリケーションは、これらのキーとキーシーケンスを区別しないことを選択し、テキストptyを介してデフォルトのテキストアプリケーションに違いを渡す方法はありません。
たとえば、キーは伝統的にまたはBackspaceにマッピングできます。グラフィック端末には、マッピングする項目を選択する設定があります。したがって、グラフィック端末アプリケーションは違いを検出してマッピングを変更できますが、端末で実行されているテキストアプリケーションはそうではありません。Ctrl-HCtrl-?
答え3
簡単に言うと:歴史。
「理由」は、ASCIIが標準化される前の10年間にわたって下された設計決定にさかのぼります。ISO 6461967.
当時、ほとんどの端末はハードコピー印刷形式であり、キーボードには全くキーがないことが多かったですESC。誰かがASCIIコード27を送信するには、ESC
Ctrl-[;を入力します。そうするにはほとんど意味がないが。
これらの新しい「ガラステレタイプ」端末が1970年代に人気を博したとき、コード27をより広く使用していたため、ほとんど(すべてではありませんが)ESCキーがありました。
これまでのところ、唯一の用途はESC
ASCIIコード27を生成することであることを強調することが重要です。端末はこれを「次のバイトが表示内容ではなくコマンドで処理されるモードに変更する」と理解しています。
もう10年後にはさまざまなウィンドウシステムが登場し、ESCキーはまったく新しい目的を持つようになりました。現在のジョブをキャンセル。
しかし、これは適用されませんこれは、端末を使用する場合のウィンドウモード環境でも同様です。代わりに、1967 ASCIIで指定されたのと同じ動作を続けます。
Ctrlキーがこれを行う理由は、@user10489の別の答えで説明されています。