о-о-о-zsh расширение истории на пробел или вкладку, но не ввод

368
Matthew

В 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
Matthew

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

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

unsetopt HIST_VERIFY 

От man zshoptions:

HIST_VERIFY

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

Похожие вопросы