Недавно я перешел на zsh, используяробирасселoh-my-zsh
До этого я использовал bash со множеством дополнительных функций, и мне не хватает только одной вещи, потому что zsh пытается быть «слишком умным»:
Если я набираю git commit
и затем ↑zsh проходит по всем последним git
командам. Но что я действительно хочу, так это пройти по всем командам, которые начинаются с git commit
(а не только git
).
Как мне добиться такого поведения в (о-боже-)zsh?
решение1
Я нашел решение своей проблемы вДокументация ЗШ. 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
решение2
Мне хотелось такого же поведения для zsh с oh-my-zsh
установленным и найденным плагином history-substring-search
.
Я добился того же поведения, что и описанное выше, добавив плагин в свой файл ~/.zshrc
:
plugins=(git brew npm history-substring-search)
Я думаю, что этот плагин не существовал тогда, когда этот вопрос был поднят. Просто альтернативный способ добиться того же самого.