Supprimer keymap et désactiver complètement la key dans zsh

Je veux désactiver la touche Insérer complètement dans zsh. Cette key n'a pas de véritable utilité, et ne m'ennuie que lorsque je la frappe accidentellement.

J'ai trouvé comment supprimer la binding pour le overwrite-mode d' overwrite-mode

 bindkey -r "^[[2~" 

Mais maintenant, quand j'atteins Insert , au lieu d'activer le mode overwrite, il affiche ~ sur la position du slider.

Une chose similaire se produit lorsque j'appuie sur F12 , qui n'est lié à rien. Il imprime également ~ .

Comment puis-je désactiver complètement la touche Insert (et F12 aussi), de sorte que le presser ne fait rien dans zsh?

Je ne veux pas désactiver la key d' insertion globalement, parce que d'autres programmes peuvent effectivement l'utiliser à des fins utiles.

Si vous appuyez sur une touche spéciale (comme Insert ) qui envoie une séquence d'échappement qui n'est pas reconnue par zsh , il le fera. zsh essaiera de faire quelque chose avec les différents octets de la séquence d'échappement.

En regardant le résultat de bindkey , il semble que zsh n'a pas de fonction appropriée qui puisse être liée à une key pour l' ignorer . Mais vous pouvez relier Insérer à une macro vide:

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

De même pour F12 . Appuyez sur Ctrl + V F12 pour voir quelle séquence d'échappement F12 envoie, typiquement

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

Selon la page de manuel de zshzle , il y a une limite avec cette approche:

En plus des commands ZLE, les séquences de touches peuvent être liées à d'autres strings, en utilisant `bindkey -s '. Lorsqu'une telle séquence est lue, la string de rlocation est repoussée en tant qu'input et le process de lecture de commands recommence en utilisant ces faux frappes. Cette input peut elle-même invoquer d'autres strings de rlocation, mais pour détecter les loops, le process sera arrêté s'il y a une vingtaine de ces rlocations sans qu'une véritable command soit lue.

La binding à \a comme je l'ai suggéré à l'origine ne semble pas avoir cet inconvénient, c'est-à-

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