Можно ли настроить vi-режим оболочки Z так, чтобы нажатие клавиши backspace могло удалять символы?допозиция, в которой началось действие вставки?
По сути, поведение vim можно реализовать, добавив следующую строку~/.vimrc
set backspace=start
– возможно ли это сделать в режиме vi оболочки Z?
решение1
Вы можете добавить это в свою конфигурацию zsh:
bindkey -M viins '^?' backward-delete-char
bindkey -M viins '^H' backward-delete-char
Объяснение:
Vi-режимэто просто набор предварительно настроенных раскладок (вина,викмд,виопп,визуальный), которые связывают определенные клавиши с определенными виджетами. Некоторые из этих виджетов специально разработаны для поведения, близкого к тому, как ведут себявиредактор делает.
В вашем случае это vi-backward-delete-char
виджет, который по умолчанию привязан Backspaceквинарежим, имеющий особую функцию — не удалять данные после позиции, в которой был включен режим вставки.
Часто существуют немного отличающиеся версии этих виджетов, которые ведут себя более в соответствии сemacsредактор. В этом случае это будет backward-delete-char
виджет, который не ограничен текущим сеансом вставки. Хотя по умолчанию он привязан крежим emacs, нет жестких ограничений на то, какой виджет может быть использован в каком режиме. Вы можете использовать backward-delete-char
вvi-режимпросто перепривязав его Backspaceдля вызова виджета backward-delete-char
.
Причина наличия двух привязок - ^?
и ^H
- заключается в том, что от терминала зависит, какая из этих двух последовательностей клавиш будет отправлена при нажатии Backspace. По умолчанию обе привязаны к одному и тому же виджету вvi-режима такжережим emacs.