この文字列 "\M^" は何をしますか?そして '^\M?' は zsh/ZLE で ? を意味します。

この文字列

内部にZshラインエディタのドキュメント、次のセクションがあります。

For either in-string or out-string, the following escape sequences are recognised:

\a

    bell character 
\b

    backspace 
\e, \E

    escape 
\f

    form feed 
\n

    linefeed (newline) 
\r

    carriage return 
\t

    horizontal tab 
\v

    vertical tab 
\NNN

    character code in octal 
\xNN

    character code in hexadecimal 
\uNNNN

    unicode character code in hexadecimal 
\UNNNNNNNN

    unicode character code in hexadecimal 
\M[-]X

    character with meta bit set 
\C[-]X

    control character 
^X

    control character 

In all other cases, ‘\’ escapes the following character. Delete is written as ‘^?’. Note that ‘\M^?’ and ‘^\M?’ are not the same...

最後の2つのシーケンスはどのように解釈されるべきですか?私の推測は次のとおりです

\M^?  - delete with the meta bit set?
^\M? - control + question mark with the meta bit set

そうですか?

ベストアンサー1

^?バイト127 = 0x7fで、通常はキーによって送信されますBackspace(送信に設定され、キーがに設定されていない^H場合Delete^?

\M^?または\M-^?同じですが、上位ビットが設定されています(例:255 = 0xff)。最新のシステムでは、ASCII以外の文字は次のようにエンコードされます。UTF-8。一部の古いシステムまたはASCII専用入力用に設計された一部の以前のバージョンとの互換性設定を持つ最新のシステムでは、キーを押しながらASCII文字を入力すると、上位ビットが設定された対応するMetaバイトが送信されます。端末でこれを実行して^?+をCtrl送信する場合は、++を使用して対応するバイトを入力?できます。MetaCtrl?

% bindkey '^\M?' wibble
% bindkey | grep wibble
"\M-^_" wibble

^\M?\M?つまり、メタ?設定である上位ビット(ビット7)を制御するものと解釈されます??0x3f = 0b00111111\M?で、バイト 0xcf = 0b10111111 も同様です。制御すると、?その値が0x7fに変更されることを除いて、すべての文字のビット5と6が0に設定されます。したがって、^\M?最終的には0x9f = 0b10011111になり、これは通常書かれています\M^_(高いビットセット^_)。これは有用な動作ではなく、実装時に極端なケースにすぎません。

おすすめ記事