
zsh でキーを完全に無効にしたいInsert。このキーは実際には使用されず、誤って押したときにのみ煩わしいだけです。
バインディングを外す方法を見つけましたoverwrite-mode
bindkey -r "^[[2~"
しかし、実際に を押すとInsert、上書きモードを有効にする代わりに、~
カーソル位置に印刷されます。
何もバインドされていない を押した場合にも同様のことが起こりますF12。 も出力されます~
。
Insertキーを完全に無効にし (F12および も)、キーを押しても zsh で何も起こらないようにするにはどうすればよいでしょうか?
Insert他のプログラムが実際にキーを便利な目的で使用する可能性があるため、キーをグローバルに無効にしたくありません。
答え1
Insertが認識しないエスケープ シーケンスを送信する特殊キー ( など) を押すとzsh
、これが実行されます。zsh は、エスケープ シーケンスの個々のバイトを使用して何らかの処理を試みます。
の結果を見るとbindkey
、zshにはキーにバインドできる適切な関数がないようです。無視するただし、Insert空のマクロに再バインドすることもできます。
bindkey -s '\e[2~' ''
も同様ですF12。Ctrl+を押すV F12と、エスケープシーケンスが何を送信するか確認できますF12。通常は
bindkey -s '\e[24~' ''
マニュアル ページによるとzshzle
、このアプローチには制限があります。
ZLEコマンドと同様に、キーシーケンスは「bindkey -s」を使用して他の文字列にバインドできます。このようなシーケンスが読み込まれると、置換文字列が入力としてプッシュバックされ、これらの偽のキーストロークを使用してコマンド読み取りプロセスが再開されます。この入力自体が他の置換文字列を呼び出すことができますが、ループを検出するために、次の場合はプロセスが停止されます。20人実際のコマンドが読み取られずにこのような置換が行われます。
私が最初に提案したように、バインドすると\a
、この欠点はないようです。
bindkey -s '\e[2~' '\a'