inputrcで主キーのバインドを解除する

inputrcで主キーのバインドを解除する

私がしたいのは、Chが後ろに削除文字を送信しないようにすることです。

私のinputrcファイルには何もありませんが、バインド-pに表示されます。

答え1

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

"\C-h": nop

何もしないようにしてください。

端末がChをBackSpaceキー1に送信し、C-h既存のコマンドに明示的にバインドされていない場合(したがってそうでない場合nop)、C-hこのコマンドが実行されますbackward-delete-char

より正確には、端末構成がアプリケーションにこれらの事実を通知する場合です。これはerasestty設定のキャラクターです。を実行してstty設定を表示できますstty -a

答え2

バインディングはnopキー押下を抑制しますが、キー押下リリースの前にプレフィックスを付けたい場合は役に立ちません。たとえば、「Mc Mi」シーケンスが単に長いコマンドを入力するマクロにバインドされるように、関連するマクロセットのプレフィックスとして「Mc」を使用するとしますcontrolct sensor instance。もちろん、「Mc Md」は他のものを印刷する式です。

"\ec": capitalize-word"しかし、あなたを妨げる基本的なバインディングがあります。キーシーケンス「Mc Mi」を十分に速く(具体的にはreadline変数によって設定されたミリ秒以内にkeyseq-timeout)印刷すると、目的の動作が得られます。ただし、躊躇している場合、bashはコマンド「Mc」のデフォルトバインディングのみを実行しますnop。したがって、この場合は本当に必要です。解く鍵ではないリバインド何もしないことになってしまいます。

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

"\ec":

行に一人で。これによりバインディングが消去されます。

警告時間: する「Cx Cr」を使用してファイルを再ロードするexec bash -lのではなく、bash(たとえば)を再起動してください。.inputrcreadlineはおそらくそうではありませんレポート再読み込み後にバインディング(bind -l表示されず、bind -q capitalize-word「大文字の単語はどのキーにもバインドされていません」と報告しますが、まだバインドされているかのようにタイムアウトします。nopこれは、いくつかのbashバージョンまたは行読み取りのバグです)。

答え3

バインディングを解除するには、次の方法を使用する必要がありました。私にとって理解しにくい重要な部分は、周囲の一重引用符を追加することでした。

FWIW、シェルから直接コマンドを実行するときに動作するさまざまなバリエーションがあります。ただし、これは.inputrcまたは.shファイルにコマンドを含めるときに機能する唯一の方法です。

Alt-c

'"\ec":'

Ctrl-c

'"\C-c":'

-u <readline command name>もうまくいくようです。時々

bind -u yank
bind '"\C-y":'  

関連情報