Есть ли способ сделать так, чтобы современная функция оболочки была ограничена?
Мои рабочие контексты разделены на пути в файловой системе, и шаблон действия оболочки, такой как неоднократно выполняемые команды, имеет тенденцию быть отличным для каждого «проекта». Было бы неплохо, если бы я мог использовать функцию истории для команд, выданных из текущего пути (или подпути).
shell
directory
command-history
cd-command
sohocoke
источник
источник
Не аккуратный ответ, а альтернатива, если вы используете в
bash
качестве оболочки: вы можете создать псевдоним в вашем.bashrc
.Например:
Затем, если вы введете
a
:history -w
)history -c
)/home/user/.a_history
и прочитан (history -r
)источник
HISTFILE
. Нет причин экспортировать его в другие программы, и ~ / .bashrc выполняется для каждого интерактивного процесса bash, поэтому ваш код для его установки будет запускаться в любом случае bash. В общем случае, если переменная, определенная в оболочке, не экспортируется по умолчанию, ее редко следует экспортировать.Если вы используете ZSH, взгляните на этот небольшой плагин, который я недавно написал, чтобы справиться с этим:
https://github.com/ericfreese/zsh-cwd-history
Он хранит отдельную информацию
HISTFILE
для каждого каталога, в котором вы выполняли команды, и добавляетchpwd
хук для переключения междуHISTFILE
s при смене каталогов.Он также предоставляет виджет zle, который вы можете привязать к нажатию клавиши, который переключит
HISTFILE
между вашим исходным «глобальным»HISTFILE
иHISTFILE
текущим рабочим каталогом.Первоначально он был основан на плагине для истории каталогов Джима Хестера , но с тех пор был переписан с нуля, чтобы исправить многие проблемы с этим плагином.
источник
Я написал плагин ZSH, который делает то, что вы хотите: https://github.com/tymm/zsh-directory-history
В отличие от других решений, мой плагин автоматически возвращается к мировой истории. Это означает, что вам не нужно переключаться между историей каталогов и глобальной историей.
Однако другие решения немного более легкие, я думаю.
источник