キーマップを削除し、zsh でキーを完全に無効にする

キーマップを削除し、zsh でキーを完全に無効にする

zsh でキーを完全に無効にしたいInsert。このキーは実際には使用されず、誤って押したときにのみ煩わしいだけです。

バインディングを外す方法を見つけましたoverwrite-mode

bindkey -r "^[[2~"

しかし、実際に を押すとInsert、上書きモードを有効にする代わりに、~カーソル位置に印刷されます。

何もバインドされていない を押した場合にも同様のことが起こりますF12。 も出力されます~

Insertキーを完全に無効にし (F12および も)、キーを押しても zsh で何も起こらないようにするにはどうすればよいでしょうか?

Insert他のプログラムが実際にキーを便利な目的で使用する可能性があるため、キーをグローバルに無効にしたくありません。

答え1

Insertが認識しないエスケープ シーケンスを送信する特殊キー ( など) を押すとzsh、これが実行されます。zsh は、エスケープ シーケンスの個々のバイトを使用して何らかの処理を試みます。

の結果を見るとbindkey、zshにはキーにバインドできる適切な関数がないようです。無視するただし、Insert空のマクロに再バインドすることもできます。

bindkey -s '\e[2~' ''

も同様ですF12Ctrl+を押すV F12と、エスケープシーケンスが何を送信するか確認できますF12。通常は

bindkey -s '\e[24~' ''

マニュアル ページによるとzshzle、このアプローチには制限があります。

ZLEコマンドと同様に、キーシーケンスは「bindkey -s」を使用して他の文字列にバインドできます。このようなシーケンスが読み込まれると、置換文字列が入力としてプッシュバックされ、これらの偽のキーストロークを使用してコマンド読み取りプロセスが再開されます。この入力自体が他の置換文字列を呼び出すことができますが、ループを検出するために、次の場合はプロセスが停止されます。20人実際のコマンドが読み取られずにこのような置換が行われます。

私が最初に提案したように、バインドすると\a、この欠点はないようです。

bindkey -s '\e[2~' '\a'

関連情報