Я хочу 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'