web-dev-qa-db-ja.com

inputrcからデフォルトキーのバインドを解除します

私がやりたいのは、C-hがbackwards-delete-charを送信しないようにすることです

inputrcファイルには何もありませんが、bind-pに表示されます

4
Samuel

C-hはデフォルトでbackward-delete-charにバインドされています。それが気に入らない場合は、.inputrcの別のコマンドにバインドしてください。

"\C-h": nop

何もしないようにします。

お使いの端末がC-hを送信する場合は BackSpace key¹であり、C-hが既存のコマンドに明示的にバインドされていない場合(nopではない)、C-hbackward-delete-charを実行します。

¹ より正確には、端末の構成がアプリケーションにそうだと伝えている場合。これは、stty設定のerase文字です。 stty -aを実行すると、stty設定を表示できます。

nopにバインドすると、キーアクションが抑制されますが、キーを解放してプレフィックスにする場合は役に立ちません。たとえば、シーケンス「M-c M-i」が、長いコマンドcontrolct sensor instanceを入力するだけのマクロにバインドされるように、関連するマクロのセットのプレフィックスとして「M-c」を専用に設定するとします。当然、「M-cM-d」は他の何かを印刷します。

ただし、デフォルトのバインディング"\ec": capitalize-Word"があり、これが邪魔になります。キーシーケンス「M-cM-i」を十分に速く(具体的には、keyseq-timeout readline変数で設定されたミリ秒単位の時間内に)出力すると、目的の動作が得られます。しかし、長引くと、bashは「M-c」のデフォルトのバインディングのみを実行します。 e。 nopコマンド。したがって、この場合、rebindではなく、キーをunbindする必要があります。 )何もしない何かにそれ。

幸い、readlineはそれを非常に簡単にサポートしています(@ user996142はコメントで正しい構文と参照を提供しました):

"\ec":

単独で一列に並んでいます。これにより、バインディングがクリアされます。

警告時間:Doexec bash -lをリロードするだけでなく、bash(たとえば、.inputrc)を再起動します「CxCr」を含むファイル。 readlineはリロード後のバインディングをreportしない場合があります(bind -lはそれを表示せず、bind -q capitalize-Wordは喜んで "capitalize-Wordはどのキーにもバインドされていません」が、nopにバインドされているかのようにタイムアウトします。これは、bashまたはreadlineの一部のバージョンのバグです。

2
kkm