作業ディレクトリごとに履歴を保持する(シェルセッションごとに参照)


11

最新のシェルの履歴機能をパスにスコープする方法はありますか?

私の作業コンテキストは、ファイルシステム上のパスとして分割され、繰り返し発行されるコマンドなどのシェルアクティビティのパターンは、各「プロジェクト」で異なる傾向があります。履歴機能を現在のパス(またはサブパス)から発行されたコマンドにスコープできると便利です。

回答:


5

を使用すると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


シェルの使用方法を変更する必要がないので、このアプローチが好きです。数日間のテストで、それはうまくいくようです。
2015年

10

きちんとした答えではありませんが、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

  1. プロジェクトディレクトリに移動します
  2. 現在の履歴が保存されます(history -w
  3. 次に、メモリに保持されている履歴がリセットされます(history -c
  4. プロジェクト履歴ファイルは/home/user/.a_historyhistory -r)に設定されて読み取られます

詳細が不明で申し訳ありませんが、私の質問では希望/要件が省略されていました。つまり、エイリアス/関数を使用することを覚えておく必要はありません。つまり、スコープは、私が通常シェルと対話する方法のアドオンとして機能するはずです。
sohocoke 2015年

エクスポートしないでくださいHISTFILE。それを他のプログラムにエクスポートする理由はなく、〜/ .bashrcはすべての対話型bashプロセスに対して実行されるので、それを設定するコードはとにかくすべてのbashで実行されます。一般に、シェル定義の変数がデフォルトでエクスポートされない場合は、めったにエクスポートしないでください。
クリスペイジ

1

ZSHを使用している場合は、これを処理するために最近書いたこの小さなプラグインを見てください。

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

HISTFILEコマンドを実行したディレクトリごとに個別に保存し、ディレクトリを変更したときにchpwdを切り替えるフックを追加HISTFILEします。

また、キープレスにバインドしてHISTFILE、元の「グローバル」HISTFILEHISTFILE現在の作業ディレクトリのを切り替えるzleウィジェットも提供します。

もともとはJim Hesterのディレクトリごとの履歴プラグインに基づいていましたが、それ以来、そのプラグインに関する多くの問題を修正するためにゼロから書き直されました。


リンクのみの回答はここではお勧めしません。それが何であるか/どのように機能するかの説明を追加してください。

0

私はあなたが望むことをするZSHプラグインを書きました:https : //github.com/tymm/zsh-directory-history

他のソリューションとは異なり、私のプラグインは自動的にグローバル履歴にフォールバックします。つまり、ディレクトリ履歴とグローバル履歴を切り替える必要はありません。

しかし、他のソリューションはもう少し軽量だと思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.