В чем разница между `set -o emacs` и `bindkey -e`?

В чем разница между `set -o emacs` и `bindkey -e`?

Из того, что я видел, оба set -o emacsи bindkey -eиспользуются для изменения поведения вашего редактора строки терминала для эмуляции, emacsтогда как set -o viи bindkey -vиспользуются для эмуляции viсочетаний клавиш. Поскольку оба set -oи, bindkeyпохоже, делают одно и то же, мне стало интересно, в чем разница между ними и есть ли она вообще.

Кажется, set -oработает для большинства оболочек, тогда как bindkeyэто zleконкретная команда. Это единственное отличие? Кроме того, они привязывают одни и те же клавиши или есть некоторые клавиши, которые set -oи bindkeyпривязывают к разным операциям?

решение1

bindkey -v/-e— это tcshсинтаксис ( bindkeyвстроенная функция была добавлена ​​в tcsh в 5.19PL2 в 1990 году), а set -o vi/emacs— синтаксис ksh (уже присутствовал в ksh85, возможно, раньше, поскольку ksh имел режим emacs/vi по крайней мере еще в 1983 году).

В zsh, bindkeyбыл добавлен в 2.0 в 1991 году, который вышел с первой версией zle (1.0 предыдущая версия использовала readlineзаимствованное из bash).

zsh, поскольку первая версия 1.0 должна была setoptустанавливать параметры (в дополнение к параметрам, передаваемым в командной строке, как в csh/Bourne), тогда как (t)cshи bashвместо этого использовали специальные переменные. В 2.0 -oпараметр (как для интерпретатора, так и для setвстроенного) был добавлен для совместимости с ksh( bashсам преобразовал свои специальные переменные в параметры, установленные с помощью нового shoptвстроенного параметра в 2.0 в 1996 году; это отдельный набор параметров от тех, которые установлены set -oтам; set -oподдержка была добавлена ​​около 1990 года).

И vi" emacsопции" не былидобавлено в zsh до 2003 годаХотя в версии 4.1.1. Парадигма «опции» не очень подходит для этого, так как при установке опции режим emacsотключается vi.

Вы заметите, что zsh -o emacsв zsh -o viнастоящее время zsh не работает должным образом, так как сообщает zsh: invalid module name `zsh/zle'о запуске (aошибка).

Большинство оболочек, включая , zshтакже выбирают режим редактирования по умолчанию на основе значений переменных окружения $EDITORи $VISUAL, чтобы попытаться сопоставить режим редактирования строки с предпочтениями редактора пользователя.

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