Я с удовольствием пользуюсь zsh
уже некоторое время, и меня вполне устраивают мои настройки истории:
# Write to history immediately
setopt inc_append_history
# History shared among terminals
setopt share_history
# Save extended info in history
setopt extended_history
# Ignore duplicates
setopt hist_ignoredups
Но часто случается так, что мне нужно использовать определенные команды внутри определенных каталогов. Например, когда я нахожусь, ~/my_project
я обычно вызываю make target1 && ./run1
, но когда я нахожусь, ~/second_project
я обычно нуждаюсь make target2 && cat foobar | ./run2
.
То есть: разные каталоги, но похожие команды.
Итак, я обычно cd ~/my_project
и печатаю, make
а затем ищу в истории, пока не найду то, что мне нужно. Но если случится, что я работал second_project
, при поиске в истории я найду некоторые команды, которые мне не нужны.
Итак, мой вопрос: существует ли для zsh плагин / настройка / что-то такое, что при поиске в истории команды, вызываемые в текущем каталоге, отображаются первыми?
В идеале после каждой команды будет отображаться любая другая команда истории совпадений, в которой можно указать максимальное количество приоритетных элементов.
Я бы попытался написать что-то подобное самостоятельно, но я все еще не знаю, как писать собственные плагины zsh, как обращаться с историей и так далее.
источник
ctrl-g
(а не по приоритету, как я просил). Тем не менее, я все еще нахожу это чрезвычайно полезным и хорошим ответом на мой вопрос, так что, спасибо :)Я только что написал небольшой плагин, который делает большую часть того, что делает плагин Джима Хестера, но использует другой подход, который устраняет многие проблемы, перечисленные в репозитории GitHub этого плагина:
https://github.com/ericfreese/zsh-cwd-history
Он хранит отдельную информацию
HISTFILE
для каждого каталога, в котором вы выполняли команды, и добавляетchpwd
хук для переключения междуHISTFILE
s при смене каталогов.Он также предоставляет виджет zle, который вы можете привязать к нажатию клавиши, который переключит
HISTFILE
между вашим исходным «глобальным»HISTFILE
иHISTFILE
текущим рабочим каталогом.Плагин zsh-cwd-history в настоящее время не поддерживает это, но я надеюсь добавить поддержку для него в ближайшее время.
источник
У меня была точно такая же проблема, и я написал плагин ZSH, который решает ее: https://github.com/tymm/zsh-directory-history
Вам не нужно вручную переключаться между глобальной и историей каталогов при использовании моего плагина.
Это также работает из коробки с моим плагином.
источник