zshの各ディレクトリの履歴

zshの各ディレクトリの履歴

zshしばらく幸せに使ってきましたし、以下の履歴設定にとても満足しています。

# Write to history immediately
setopt inc_append_history
# History shared among terminals
setopt share_history
# Save extended info in history
setopt extended_history
# Ignore duplicates
setopt hist_ignoredups

ただし、一部の特定のディレクトリで特定のコマンドを使用する必要があることがよくあります。たとえば、私が入るときは普通に~/my_project電話しmake target1 && ./run1ますが、私が入るときは~/second_project通常が必要ですmake target2 && cat foobar | ./run2

つまり、ディレクトリは異なりますが、コマンドは似ています。

だから私は通常cd ~/my_project何かを入力し、必要なmakeものが見つかるまで履歴を逆に検索します。しかし、偶然に仕事をすると、second_project記録の検索中に不要なコマンドが見つかります。

だから私の質問:履歴から検索すると、現在のディレクトリから呼び出されたコマンドが最初に表示されるようにzshのプラグイン/設定/何かがありますか?

理想的には、一致する他のすべての履歴コマンドがこれらのコマンドの後に表示され、オプションで優先順位要素の最大数を指定します。

私もこのようなことを書こうとしていますが、カスタムzshプラグインを書く方法、履歴を処理する方法などはまだわかりません。

答え1

必要な作業を正確に実行すると主張するプラグインがあり、名前が適切です。ディレクトリ別履歴プラグイン:

https://github.com/jimhester/oh-my-zsh/commit/baa187e4b903f39422a84b580e6e617ec3738e09

「ディレクトリごとの履歴 - ctrl-gを使用して各ディレクトリ間を動的に切り替える機能を使用して、各現在のディレクトリの以前のコマンド履歴をグローバルに追跡します。」彼らのwikiは言います。

直接テストしたことはありませんが、コメントによるとうまくいきます。

答え2

oh-my-zshの現在のバージョンにはこのプラグインが付属しています。per-directory-historyプラグインリストに追加.zshrc:

plugins=(... per-directory-history)

答え3

私は同じ問題があり、それを解決するためにZSHプラグインを書いた。 https://github.com/tymm/zsh-directory-history

私のプラグインを使用するときは、グローバル履歴とディレクトリ履歴を手動で切り替える必要はありません。

理想的には、一致する他のすべての履歴コマンドがこれらのコマンドの後に表示され、オプションで優先順位要素の最大数を指定します。

これは私のプラグインでも基本的に機能します。

答え4

私はJim Hesterプラグインのほとんどの機能を実行しましたが、他のアプローチを使用してプラグインのGitHubリポジトリに記載されている多くの問題を解決する小さなプラグインを作成しました.

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

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

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

だから私の質問:履歴から検索すると、現在のディレクトリから呼び出されたコマンドが最初に表示されるようにzshのプラグイン/設定/何かがありますか?

zsh-cwd-historyプラグインは現在この機能をサポートしていませんが、まもなくサポートを追加できることを願っています。

関連情報