Keymap löschen und Schlüssel in zsh vollständig deaktivieren

Keymap löschen und Schlüssel in zsh vollständig deaktivieren

Ich möchte Insertdie Taste in zsh vollständig deaktivieren. Diese Taste hat keinen wirklichen Nutzen und nervt mich nur, wenn ich sie versehentlich drücke.

Ich habe herausgefunden, wie man die Bindung entfernt füroverwrite-mode

bindkey -r "^[[2~"

Wenn ich jetzt jedoch tatsächlich drücke Insert, wird statt des Aktivierens des Überschreibmodus der Ausdruck ~an der Cursorposition ausgeführt.

Ähnliches passiert, wenn ich drücke F12, was an nichts gebunden ist. Es wird auch gedruckt ~.

Wie kann ich die InsertTaste (und auch) vollständig deaktivieren F12, sodass das Drücken in zsh nichts bewirkt?

Ich möchte den Schlüssel nicht global deaktivieren Insert, da ihn andere Programme möglicherweise für sinnvolle Zwecke verwenden.

Antwort1

Wenn Sie eine spezielle Taste (z. B. Insert) drücken, die eine von nicht erkannte Escape-Sequenz sendet zsh, wird dies getan. zsh wird versuchen, etwas mit den einzelnen Bytes der Escape-Sequenz zu tun.

Betrachtet man das Ergebnis von bindkey, scheint es, dass zsh keine geeignete Funktion hat, die an einen Schlüssel gebunden werden kann, umignorierenes. Sie können aber Insertein leeres Makro erneut binden:

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

Gleiches gilt für F12. Drücken Sie Ctrl+, V F12um zu sehen, welche Escape-Sequenz F12sendet, normalerweise

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

Laut der zshzleManualpage gibt es bei diesem Ansatz eine Einschränkung:

Ebenso wie ZLE-Befehle können Tastenfolgen mit `bindkey -s' an andere Zeichenfolgen gebunden werden. Wenn eine solche Folge gelesen wird, wird die Ersatzzeichenfolge als Eingabe zurückgeschoben und der Befehlslesevorgang beginnt erneut mit diesen falschen Tastenanschlägen. Diese Eingabe kann selbst weitere Ersatzzeichenfolgen aufrufen, aber um Schleifen zu erkennen, wird der Vorgang angehalten, wenn eszwanzigsolche Ersetzungen, ohne dass ein echter Befehl gelesen wird.

Die Bindung an \a, wie ich sie ursprünglich vorgeschlagen habe, scheint diesen Nachteil nicht zu haben, d. h.

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

verwandte Informationen