43

Я недавно переключился на zsh, используя oh-my-zsh robbyrussell. До этого я использовал bash со множеством пользовательских вещей, и мне не хватает только одного, потому что zsh пытается быть «слишком умным»:

Если я git commit а затем sh zsh выполнит все последние команды git . Хотя я действительно хочу пройти через все команды, которые начинаются с git commit (не только git).

Как я могу добиться такого поведения в (о-о-) Zsh?

2 ответа2

64

Я нашел решение моей проблемы в документации ZSH. Oh-my-zsh, кажется, отображает клавиши и на что-то вроде

bindkey '\e[A' history-search-backward
bindkey '\e[B' history-search-forward

Что дает точное поведение, которое я описал выше. Документация ZSH описывает поведение history-search-backward по истории назад как

Поиск в истории назад для строки, начинающейся с первого слова в буфере.



Вместо этого я хотел следующее отображение, которое я вставил в мой ~/.zshrc:

bindkey '\e[A' history-beginning-search-backward
bindkey '\e[B' history-beginning-search-forward

Поведение history-beginning-search-backward выглядит следующим образом:

Поиск вперед в истории для строки, начинающейся с текущей строки до курсора. Это оставляет курсор в исходном положении.

Кроме того, если \e[A не работает для стрелок вверх или вниз, нажмите <ctrl-v><KEY (e.g., up arrow)> в другом терминале, который дает ^[OA . Тогда вы можете использовать это вместо \e[A Процесс описан здесь: http://zshwiki.org/home/zle/bindkeys

12

Я хотел того же поведения для zsh с установленным oh-my-zsh и нашел плагин history-substring-search .

Я достиг того же поведения, описанного выше, добавив плагин в мой ~/.zshrc:

plugins=(git brew npm history-substring-search)

Я думаю, что этот плагин не существовал еще тогда, когда этот вопрос был поднят. Просто альтернативный способ добиться того же.

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