そのため、ターミナル(より正確にはターミナルエミュレーター)のエスケープシーケンスの概念と、それらがscreen bindkey
コマンドにどのように関連しているかについてはかなり混乱しています。インターネットで見つけたサンプルの.screenrc
ファイルを見ていましたが、次の構成が見られました。
# switch windows with F3 (prev) and F4 (next)
bindkey "^[OR" prev
bindkey "^[OS" next
# switch layouts with Ctrl+F3 (prev layout) and Ctrl+F4 (next)
bindkey "^[O1;5R" layout prev
bindkey "^[O1;5S" layout next
たとえば、シーケンス^[0R
がF3
を意味し、シーケンス^[01;5R
がCtrl+F3
を意味する理由がわかりません。そのようなシーケンスの表はありますか?
また、これらのシーケンスは、リセットの場合は$PS1
、フォアグラウンドブラックの場合は\[\033[0m\]
のように、ターミナルプロンプトで色を構成するために使用されるシーケンスを思い出させます(たとえば、\[\033[30m\]
env変数を使用)。これらの2つの「コードシーケンス」の間には実際に何らかの関係がありますか、それとも私の純粋な想像ですか?
良い質問。
はい、これらはANSIエスケープコードです。
VT100のANSIエスケープコードのリストはここで確認できます: http://www.braun-home.net/michael/info/misc/VT100_commands.htm しかし、より迅速な方法があります-ターミナルエミュレータプレス Control-v その後 Control-F3 たとえば、次のように表示されます。
$ ^[[1;5R
man bash
には、次のように書かれています。
quoted-insert (C-q, C-v)
Add the next character typed to the line verbatim. This
is how to insert characters like C-q, for example.
^[
自体が Escapequoted-insert
の出力で、この答えを調べることができます https://unix.stackexchange.com/a/108014/72304 この表記がどこから来ているかを学ぶことができます。
それをよりよく理解するために-すでに知っているように 色を選択するためのANSIエスケープコードEscape
キーを使用します。リテラルEscape
を入力するには、いくつかの方法があります。たとえば、Escape
がASCIIテーブル:で\ 033であることがわかっているので、8進表記を使用できます。
printf "\033[1;34mThis is a blue text.\n\033[0m"
printf
の一部の実装が理解できる\e
バックスラッシュエスケープを使用することもできます。
printf "\e[1;34mThis is a blue text.\n\e[0m"
ただし、quoted-insert
を使用してリテラルEscape
を挿入することもできます-\e
の代わりにカーソルを置き、削除して、を押します。 Control-v 次にを押します Escape。あなたはこれを得るでしょう:
printf "^[[1;34mThis is a blue text.\n^[[0m"
ターミナルエミュレータでこれを行うと、^[
は単一の文字として扱われることに注意してください。上記の行をコピーしてターミナルエミュレータに貼り付けると、1文字ではなく2文字になるため、機能しません。