回答:
を使用すると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'
次に、次のように入力した場合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
します。
また、キープレスにバインドしてHISTFILE
、元の「グローバル」HISTFILE
とHISTFILE
現在の作業ディレクトリのを切り替えるzleウィジェットも提供します。
もともとはJim Hesterのディレクトリごとの履歴プラグインに基づいていましたが、それ以来、そのプラグインに関する多くの問題を修正するためにゼロから書き直されました。
私はあなたが望むことをするZSHプラグインを書きました:https : //github.com/tymm/zsh-directory-history
他のソリューションとは異なり、私のプラグインは自動的にグローバル履歴にフォールバックします。つまり、ディレクトリ履歴とグローバル履歴を切り替える必要はありません。
しかし、他のソリューションはもう少し軽量だと思います。