Пользовательские привязки клавиш для режима оболочки vi, то есть «set -o vi»?

18

Я только что открыл для себя чудеса set -o vi, и мне любопытно, можно ли настроить этот режим оболочки vi так же, как настраивать vi или vim?

Например, создайте пользовательскую привязку ключа для сопоставления более удобной комбинации клавиш или esc?

Если это в настоящее время не поддерживается, насколько сложно будет изменить исходный код программы и жесткий код в некоторых настройках, или это будет плохой идеей?

Ион
источник
Я нашел ответ здесь < unix.stackexchange.com/questions/27699/remap-bash-vi-keys >
DinizBr

Ответы:

17

Да, вы можете изменить сопоставления клавиш (для режима, подобного vi или emacs) с помощью bindвстроенной функции. На самом деле это функция readline (так что вы можете иметь vi-подобные привязки во всех программах readline, а не только в bash).

Ключ, который вы ищете, называется vi-movement-modeи по умолчанию \e(escape). Вы могли бы дополнительно связать это (и это довольно глупо) равными вот так. Вторая строка избавляется от привязки к escape:

$ bind "=":vi-movement-mode 
$ bind -r "\e"

Запуск bind -pпокажет вам все ключи, которые вы можете связать, и их текущие привязки (если есть).

Вы можете помещать bindкоманды в свои .bashrcили редактировать, ~/.inputrcчтобы они применялись ко всем программам readline, которые вы запускаете. Документы readline содержат полную информацию.

derobert
источник
1
Это круто. Спасибо. Я смог выяснить, как связывать сочетания клавиш, как bind "Control-Space":vi-movement-mode- это прекрасно работает. Но, например, в vim я набираю два символа подряд в качестве триггера esc, т. Е. Если вы введете текст, jjвы вернетесь в нормальный режим. Это не сработало, когда я попробовал это с bind, есть ли особый способ заставить это работать?
Иона
@ Джона не то, что я знаю о фальшивке, но я недавно не читал документы readline ...
Дероберт
@chishaku вам нужно поставить префикс имени Ионы со знаком at ( @), иначе он не получит уведомление.
Дероберт
2
@ Джона Я просто пытался сделать то же самое. Вы когда-нибудь понимали это?
Чишаку
1
unix.stackexchange.com/questions/303282/… По какой-то причине вам нужны цитатыbind '"jk":vi-movement-mode'
Хильке Валинга