1

В zsh с помощью oh-my-zsh вы можете ввести команду расширения истории и нажать пробел, табуляцию или ввод, и она развернется. Например:

ls /path/to/some/directory
cd !$<enter>

будет расширяться до

cd /path/to/some/directory

Но на самом деле он не выполняет команду. Он остается в приглашении для дальнейшего редактирования, и вам нужно нажать Enter еще раз, чтобы фактически запустить команду.

Вчера вечером я устанавливал arch linux и обнаружил, что в настройках zsh, в которые входит оболочка установки, есть расширение истории на вкладке и в пространстве, но нажатие клавиши enter немедленно запускает расширенную команду, не требуя от пользователя повторного нажатия клавиши ввода.

Это то, что я хочу, потому что это спасает меня от нажатия клавиш. Если я хочу редактировать расширение, я мог бы нажать Tab. Если я хочу выполнить команду немедленно, я могу нажать Enter.

Я думаю, что это связано с magic-space , и я вижу следующую строку в .oh-my-zsh/lib/key-bindings.zsh

bindkey ' ' magic-space        # [Space] - do history expansion

Но я не могу найти, где enter и tab также связаны с расширением или есть ли какая-либо опция для немедленного запуска команды при вводе.

1 ответ1

1

Это беспокоило меня в течение многих лет с тех пор, как я начал использовать zsh, но я наконец-то потратил время на то, чтобы копать, пока не понял, и это вызвано опцией HIST_VERIFY . Опция включена в .oh-my-zsh/lib/history.zsh и должна быть переопределена.

Добавление следующей строки в .zshrc исправляет поведение:

unsetopt HIST_VERIFY

От man zshoptions:

HIST_VERIFY

Всякий раз, когда пользователь вводит строку с расширением истории, не выполняйте эту строку напрямую; вместо этого выполните расширение истории и перезагрузите строку в буфер редактирования.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .