Intereting Posts
Получение Java-программ без вызова Java Как tar только файлы в нескольких каталогах, но не в каталоге? Как отобразить разрешение каталога без разрешения на их содержимое Удаленная командная строка syslog Клиент Как подключиться к беспроводной сети 802.1x через nmcli Как установить функциональный набор инструментов ARM cross-gcc в Ubuntu 18.04? Grep только в файлах, находящихся в определенных папках Системная (неявная?) Перезагрузка Как заставить ноутбук переключиться на внешний монитор HDMI при подключении? Есть ли способ заставить fh исчезать между переходами? Как я могу изучить некоторые усовершенствованные методы логротата? Как временно обходить псевдоним в tcsh? Любой способ предоставить отдельный файл vimrc всего за 1 сеанс Удалять строки из одного файла, если они содержат регулярное выражение содержимого в другом файле Remount squashfs root filessytem read-write

Сохранение истории за рабочий каталог (см. Сеанс оболочки)

Есть ли способ сделать историческую функцию современной оболочки доступной к пути?

Мои рабочие контексты разделяются как пути к файловой системе, и характер активности оболочки, такой как многократно выпущенные команды, имеет тенденцию отличаться от каждого «проекта». Было бы неплохо, если бы я мог охватить функцию истории командами, выпущенными из текущего пути (или подкаталога).

С помощью zsh вы можете:

 mkdir -p ~/.zsh/dirhist 

И добавьте в свой файл ~ / .zshrc:

 HISTSIZE=1000 SAVEHIST=10000 setopt HIST_SAVE_NO_DUPS INC_APPEND_HISTORY HISTFILE=~/.zsh/dirhist/${PWD//\//@} chpwd() { [[ $PWD = $OLDPWD ]] || fc -Pp ~/.zsh/dirhist/${PWD//\//@} } 

chpwd() вызывается всякий раз, когда изменяется текущий каталог. Там мы сбрасываем файл истории на что-то вроде ~/.zsh/dirhist/@foo@bar когда вы cd на /foo/bar .

Не аккуратный ответ, но альтернатива, если вы используете bash качестве оболочки: вы можете создать какой-то псевдоним в своем .bashrc .

Например:

 alias a='cd /tmp/A ; history -w ; history -c ; export HISTFILE=/home/user/.a_history ; history -r $HISTFILE' alias b='cd /tmp/B ; history -w ; history -c ; export HISTFILE=/home/user/.b_history ; history -r $HISTFILE' 

Затем, если вы наберете:

  1. вы будете перемещены в каталог проекта
  2. текущая история будет сохранена ( history -w )
  3. то сохраненная в памяти история будет сброшена ( history -c )
  4. файл истории проекта будет установлен в /home/user/.a_history и прочитан ( history -r )

Если вы используете ZSH, взгляните на этот небольшой плагин, который я недавно написал, чтобы справиться с этим:

https://github.com/ericfreese/zsh-cwd-history

Он хранит отдельный HISTFILE для каждого каталога, в котором вы выполняли команды, и добавляет chpwd hook для переключения между HISTFILE s при смене каталогов.

Он также предоставляет виджет zle, который вы можете привязать к HISTFILE клавиши, которое переключит HISTFILE между вашим оригинальным «глобальным» HISTFILE и HISTFILE для вашего текущего рабочего каталога.

Первоначально он был основан на плагине для истории каталогов на основе Jim Hester , но с тех пор был переписан с нуля, чтобы исправить многие проблемы с этим плагином.

Я написал плагин ZSH, который делает то, что вы хотите: https://github.com/tymm/zsh-directory-history

В отличие от других решений, мой плагин автоматически возвращается к глобальной истории. Это означает, что вам не нужно переключаться между историей каталогов и глобальной историей.

Однако другие решения немного более легкие, я думаю.