なぜ `ctrl+[` と `ESC` の両方が `^[` を生成するのですか? [コピー]

なぜ `ctrl+[` と `ESC` の両方が `^[` を生成するのですか? [コピー]

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文字コード^A1は文字コード65、0の64、27の@ESCです。 ESC には別個のキーがありますが、制御文字も生成する Enter キーと Tab キーもあるので、それほど珍しいものではありません。^@[^[

もちろん、現代のシステムの仕組みは、キーマップやキーバインディングの設定方法などの他の要因によっても変わります。また、たとえば、文字コードが64未満の場合はどのように機能するのか尋ねないでください。端末で試しましたが、NULバイトが出ました。Ctrl-something^1Ctrl-space

おすすめ記事