bashショートカットでCtrl + mとCtrl + qが使用されないのはなぜですか?


15

最近、bashのショートカットキーを確認し、tmuxのアクティベートキーに適したものを見つけようとしています。

面白いと思う ctrl + mhttps://en.wikipedia.org/wiki/Bash_(Unix_shell)ctrl + qによると、bashショートカットでは使用されておらず、です。

なぜ使用されないのですか?ctrl + mとても便利だと思います。

これらの2つの組み合わせは、DIY (define it yourself)使用目的で設計されていますか?それとも別の話がありますか?


1
使用するALT + mとさらに便利です。
ロルフ

回答:


16

Ctrl + Mは、ターミナルのEnterキーと同じ文字(RET)を送信します。プログラムにはそれらを区別する方法がないため、これらのキーを個別に構成することはできません。

Ctrl + QはすでにXONに使用されていますデフォルトでに使用されているため、Bashで使用することはできませんが、tmuxはraw入力モードを使用するため、tmuxで使用できるはずです。

GUIプログラムはキーボードから読み取ることができ、キーmは修飾キーCtrlで押され、ショートカットとしてCtrl + mを使用しますが、シェルまたは任意の端末プログラムは0から26までのASCII文字としてCtrl + Keyの組み合わせを受け取ります

Ctrl+@ = 0
Ctrl+A = 1
Ctrl+B = 2

等々。これを試して値を確認できます

cat ctrlkeys <<EOF
^A^B^C^D^E^F
EOF
od -c ctrlkeys
0000000 001 002 003 004 005 006  \n

値を入力するには、Ctrl + [af]の前にCtrl + vを押して、未解釈の値として解釈します。

ascii(7)テーブルを見ると、対応する文字@ .. Zが左側にあるテーブル内の制御コードを見ることができます。例えば

015   13    0D    CR  '\r' (carriage ret)     115   77    4D    M

または

011   9     09    HT  '\t' (horizontal tab)   111   73    49    I

bashの前に制御コードを解釈する次のレイヤーはsttyです(端末設定を変更して印刷します)

stty -a
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O;

意味についてのstty(1)を参照lnext、またはstartstop

また、bashおよび他のGNU cliプログラムが入力行を制御するためにそのライブラリを使用し、bash(1)/ READLINE(bashマニュアルページのreadlineセクション)を使用するため、readline(3)も参照してください。

注:XYZ(NUM)は、セクションNUMからの手動ページXYZを意味するため、の結果ですman NUM XYZ


1
BashにはCsのデフォルトのバインディング(XOFF)があるため、Cqにもバインドを設定できます。
ジル 'SO-悪であるのをやめる'

実際、デフォルトでは、Bashが使用するGNU ReadlineライブラリはC-q、と同じものにバインドしC-vます。quoted-insertこれは、キーとキーコンボによって生成されたエスケープコードを把握するのに役立つEmacs関数のクローンです。Readlineマニュアルの関連部分は次のとおり
php
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.