zsh は HIST_FIND_NO_DUPS を無視します

zsh は HIST_FIND_NO_DUPS を無視します

「setopt HIST_FIND_NO_DUPS」を使用して、重複した履歴エントリが表示されないように Z シェルを設定しようとしています。

HIST_FIND_NO_DUPS
When searching for history entries in the line editor, do not display duplicates of a line previously found, even if the duplicates are not contiguous.

しかし、期待通りには動作しません。次のような履歴がある場合:

    1  history
    2  cd /bin
    3  cd /bin
    4  cd /bin

UP キーを 2 回押して (「up-line-or-history」に設定)、プロンプトに「history」が表示されることを期待しています。しかし、代わりに「cd /bin」が表示されます。UP キーを 4 回押すと、「history」コマンドに移動します。これは基本的に、HIST_FIND_NO_DUPS が設定されていない場合のデフォルトの動作です。

重複したコマンドが最初から保存されないようにする他のオプション (HIST_IGNORE_ALL_DUPS など) を使用できることはわかっていますが、それは私が望む動作ではありません。

答え1

HIST_FIND_NO_DUPS

いつs̲e̲a̲r̲ch̲i̲n̲g̲行エディタの履歴エントリでは、重複が連続していなくても、以前に見つかった行の重複を表示しません。

setopt HIST_FIND_NO_DUPSこれは設計どおりに動作し、上矢印を押しただけでは結果に影響しないと思います。 を押した後に表示される検索結果に影響しますCtrl-r。次の履歴があるとします。

mvn clean package
mvn clean package
mvn clean package -DSkipTests
mvn clean package

ここで を押してCtrl-r入力すると、候補が表示されます。 をもう一度押すとmvn、が表示されます。では重複が許可されていないため、3 回目に押しても新しい候補は表示されません。シェルがなければ、再度表示されます。mvn clean packageCtrl-rmvn clean package -DSkipTestsCtrl-rHIST_FIND_NO_DUPSHIST_FIND_NO_DUPSmvn clean package

関連情報