web-dev-qa-db-ja.com

.inputrcの制御文字を理解する

リモートマシンのLinuxアカウントには、事前定義された_.inputrc_が付属しています

_"\e[1~": beginning-of-line
"\e[4~": end-of-line
“\e[5~”: history-search-backward
“\e[6~”: history-search-forward
"\e[3~": delete-char
"\e[2~": quoted-insert
"\e[5C": forward-Word
"\e[5D": backward-Word
"\e\e[C": forward-Word
"\e\e[D": backward-Word

set completion-ignore-case on
set bell-style visible
set expand-tilde on
set convert-meta off
set input-meta on
set output-meta on
set show-all-if-ambiguous on
set visible-stats on
_

GNU bashドキュメント トピックについて を読んでいますが、文字シーケンスが何であるかを説明するセクションが見つかりませんでした_\e[1~_、_\e[5C_、_\e\e[D_などは意味します。

_\e_が_meta character_(キーボードではAltだと思う)を意味することをどこかで読んだと思いますが、他の制御文字_[_がわからない_~_、_5D_などは意味します。

誰かがこのトピックに関する良い参考文献を知っていますか?

22

これらは ANSI制御コードエスケープシーケンス で、「ターミナル」キーボードで英数字以外のさまざまなキーが押されたときに送信されます。

\ eは、ASCII "ESCAPE"文字(8進数033 hex 1B 10進数27)を意味します。これはコマンドシーケンス導入(CSI)の一部です。

Escape [ 2 ~は、 VT220(またはそれ以降)端末 で「挿入」というラベルの付いたキーを押したときに送信される文字シーケンスです。

これらの規則の多くは、xtermやLinuxコンソール/シェルなどのソフトウェアで採用されています。

bashのREADLINE関数でのこれらのシーケンスの使用については、 manページ for readlineで説明されています。

 2番目の形式 "keyseq":function-nameまたはmacroでは、keyseqは上記のkeynameとは異なり
、キーシーケンス全体を示す文字列はシーケンスを配置することで指定できます
二重引用符で囲みます。次の例のように、一部のGNU 
 Emacsスタイルのキーエスケープを使用できますが、
シンボリック文字名は認識されません。 universal-argument 
 "\ Cx\Cr":re-read-init-file 
 "\ e [11〜": "Function Key 1" 
 

どのエスケープシーケンスがどのキーボードキーに対応するかのリストを取得するには、infocmp -L -1infocmp -L -1 xtermなどのコマンドを使用できます。

21
RedGrittyBrick