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
HISTFILE
chpwd
コマンドを実行するディレクトリごとに別々のディレクトリを保存し、ディレクトリを変更するときにsを切り替えるためのフックを追加します。HISTFILE
HISTFILE
また、元の「グローバル」ディレクトリHISTFILE
とHISTFILE
現在の作業ディレクトリを切り替えるキーストロークにバインドできるzleウィジェットも提供します。
だから私の質問:履歴から検索すると、現在のディレクトリから呼び出されたコマンドが最初に表示されるようにzshのプラグイン/設定/何かがありますか?
zsh-cwd-historyプラグインは現在この機能をサポートしていませんが、まもなくサポートを追加できることを願っています。