web-dev-qa-db-ja.com

Ctrl + arrows / backspace / delをReadlineコマンドにバインドする方法

~/.inputrcで次のバインディングを作成しようとしています。

(Ctrl+Del): kill-Word
(Ctrl+Backspace): backward-kill-Word
(Ctrl+forward arrow): forward-Word
(Ctrl+back arrow): backward-Word
(Home): beginning-of-line
(End): end-of-line

それらにはどのような実際のキーシーケンス表記を使用する必要がありますか?

3
1234ru

このようなもの:

"\e[1;5C": forward-Word
"\e[1;5D": backward-Word
"\e[H": beginning-of-line
"\e[F": end-of-line
"\eOH": beginning-of-line
"\eOF": end-of-line
"\e[1~": beginning-of-line
"\e[4~": end-of-line

端末の設定と、screenを使用しているかどうかに応じて、xtermはそれらのバリエーションを Home そして End、 Control 変更されたカーソルキーは一貫した値を送信します。あなたはそれを変えることができます(xtermで:他の端末は一般的にそうではありません)。

Delが、6キー編集キーパッドの左下キーを意味しない限り、control/Delおよびcontrol/backspaceはおそらく機能しません。 xtermの場合、"\e[3;5~"を送信します。

PuTTYでは、control-modifierを使用してnormalモードとapplicationモードを切り替えるため、「ctrlarrows」の選択肢はほとんどありません。カーソルキーの。つまり、「\ e [C」(通常)と「\ eOC」(アプリケーション)を切り替えます。また、ホーム/エンドを(PuTTYの開発者が「rxvt」と呼んだものに)変更して、上記の「\ e [H」を取得することもできます。

参考文献:

2
Thomas Dickey

機能キーとカーソルキーは、ESC(エスケープ)文字で始まるエスケープシーケンスを送信します。押す Ctrl+V 次に、キーまたはキーコード。これにより、ESC文字が文字通り挿入され、その後にエスケープシーケンスの残りの文字が挿入されます。

たとえば、を押したとします Ctrl+VCtrl+Left^[O5Dを挿入します。 ^[はエスケープ文字です。次に、.inputrcでバインドします

"\eO5D": backward-Word

特定のキーのエスケープシーケンスは端末によって異なるため、使用する端末とその構成方法によっては、複数のエスケープシーケンスを同じ関数にバインドすることになります。幸いなことに、概して、さまざまな端末のさまざまなキーに対応するエスケープシーケンスはありません。

多くの端末は、すべてのキーコードに対して個別のエスケープシーケンスを送信するわけではありません。たとえば、あなたはそれを見つけるかもしれません Ctrl+Left そして Ctrl+Shift+Left 同じエスケープシーケンスを送信します。ターミナル構成でこれを修正する方法がある場合とない場合があります。 Emacs指向の議論については、 この投稿 を参照してください。参照 GNU-screenの「コマンド文字」を定義するための包括的な可能性のセットを作成する方法? および キーボード入力およびテキスト出力はどのように機能しますか? および 方法トピックの背景について、GNU-screenの「コマンド文字」を定義するための包括的な可能性のセットを作成するには?