web-dev-qa-db-fra.com

Comment effacer l'histoire dans zsh

Je cherche l'équivalent zsh de la commande bash history -c, en d'autres termes, effacez l'historique de la session en cours. Dans zsh history -c renvoie 1 avec un message d'erreur history: bad option: -c.

Juste pour clarifier, je ne cherche pas un moyen de supprimer le contenu de $HISTFILE, Je veux juste une commande pour réinitialiser l'historique au même état qu'il était lorsque j'ai ouvert le terminal. Suppression du contenu de $HISTFILE fait le contraire de ce que je veux: il supprime l'historique que je veux conserver et préserve l'historique que je veux supprimer (puisque l'historique de la session en cours y serait ajouté, que son contenu ait été préalablement effacé ou non).

Il existe une solution de contournement que j'utilise pour l'instant, mais elle est évidemment loin d'être idéale: dans la session en cours, j'ai défini HISTFILE=/dev/null et fermez et rouvrez le terminal. Cela provoque que l'historique de la session fermée ne soit pas ajouté à $HISTFILE. Cependant, j'aimerais vraiment quelque chose comme history -c depuis bash, ce qui est beaucoup plus élégant que de devoir fermer et redémarrer le terminal.

4
Kresimir

Pour obtenir un historique vide, définissez temporairement HISTSIZE sur zéro.

function erase_history { local HISTSIZE=0; }
erase_history

Si vous souhaitez effacer le nouvel historique de cette instance du Shell mais conserver l'ancien historique chargé initialement, videz l'historique comme ci-dessus puis rechargez l'historique enregistré fc -R ensuite.

Si vous ne voulez pas que le erase_history appel à enregistrer dans l'historique, vous pouvez le filtrer dans le zshaddhistory hook .

function zshaddhistory_erase_history {
  [[ $1 != [[:space:]]#erase_history[[:space:]]# ]]
}
zshaddhistory_functions+=(zshaddhistory_erase_history)

Suppression d'un élément historique spécifique (history -d NUM in bash) est une autre affaire. Je ne pense pas qu'il y ait d'autre moyen que:

  1. Sauvegardez l'historique: fc -AI pour ajouter au fichier historique, ou fc -WI pour remplacer le fichier d'historique, selon vos préférences de partage d'historique.
  2. Modifiez le fichier d'historique ($HISTFILE).
  3. Rechargez le fichier historique: fc -R.