最新のシェルの履歴機能をパス範囲に制限する方法はありますか?
私のタスクコンテキストはファイルシステムへのパスに分割され、シェルアクティビティパターン(たとえば、繰り返し実行されるコマンド)は各「プロジェクト」ごとに異なる傾向があります。履歴機能の範囲を現在のパス(またはサブパス)で実行されているコマンドに制限できればよいでしょう。
答え1
これは簡潔な答えではありませんが、シェルとして使用する場合はオプションがあります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
。
答え2
これにより、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
答え3
ZSHを使用している場合は、最近この問題を処理するために作成したこの小さなプラグインを見てください。
https://github.com/ericfreese/zsh-cwd-history
HISTFILE
chpwd
コマンドを実行するディレクトリごとに別々のディレクトリを保存し、ディレクトリを変更するときにsを切り替えるためのフックを追加します。HISTFILE
HISTFILE
また、元の「グローバル」ディレクトリHISTFILE
とHISTFILE
現在の作業ディレクトリを切り替えるキーストロークにバインドできるzleウィジェットも提供します。
もともとこれに基づいていました。Jim Hesterのディレクトリ別履歴プラグインですが、その後プラグインの多くの問題を解決するために最初から書き直されました。
答え4
必要な作業を行うZSHプラグインを作成しました。 https://github.com/tymm/zsh-directory-history
他のソリューションと比較すると、私のプラグインは自動的にグローバル履歴に戻ります。つまり、ディレクトリ履歴とグローバル履歴を切り替える必要はありません。
しかし、他の解決策がより軽いと思います。