Удалить раскладку и полностью отключить клавишу в zsh

Удалить раскладку и полностью отключить клавишу в zsh

Я хочу Insertполностью отключить клавишу в zsh. Эта клавиша не имеет реального применения и только раздражает меня, когда я нажимаю ее случайно.

Я нашел, как снять привязку дляoverwrite-mode

bindkey -r "^[[2~"

Но теперь, когда я нажимаю Insert, вместо активации режима перезаписи печатается ~позиция курсора.

Аналогичное происходит, когда я нажимаю F12, что ни к чему не привязано. Оно также печатает ~.

Как можно Insertполностью отключить клавишу (и F12, в том числе), чтобы ее нажатие не приводило ни к какому результату в zsh?

Я не хочу отключать Insertклавишу глобально, поскольку некоторые другие программы могут использовать ее в полезных целях.

решение1

Если вы нажмете специальную клавишу (например, Insert), которая отправляет escape-последовательность, не распознаваемую zsh, то она это сделает. zsh попытается что-то сделать с отдельными байтами escape-последовательности.

Глядя на результат bindkey, кажется, что zsh не имеет подходящей функции, которую можно было бы привязать к клавишеигнорироватьэто. Но вы можете перепривязать Insertк пустому макросу:

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

Аналогично для F12. Нажмите Ctrl+, V F12чтобы увидеть, какую последовательность escape F12отправляет, обычно

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

Согласно zshzleстранице руководства, при таком подходе существует ограничение:

Как и команды ZLE, последовательности клавиш могут быть привязаны к другим строкам с помощью `bindkey -s'. Когда такая последовательность считывается, заменяющая строка возвращается в качестве ввода, и процесс чтения команды начинается снова с использованием этих фальшивых нажатий клавиш. Этот ввод может сам по себе вызывать дополнительные заменяющие строки, но для обнаружения циклов процесс будет остановлен, если естьдвадцатьтакие замены без прочтения реальной команды.

Привязка к \aтому, что я изначально предлагал, по-видимому, не имеет этого недостатка, т.е.

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

Связанный контент