Dans zsh
, je veux avoir un historique illimité. J'ai mis HISTSIZE=
, qui fonctionne dans bash
. Maintenant j'importe une vieille histoire
mv old_history .history
ce qui est assez grand
wc -l .history
43562 .history
Si maintenant je ferme et recommence zsh
, je vois
wc -l .history
32234 .history
Puis-je avoir un historique illimité dans zsh
?
Il y a la limite et les possibilités de vos machines.
HISTFILE="$HOME/.zsh_history"
HISTSIZE=10000000
SAVEHIST=10000000
setopt BANG_HIST # Treat the '!' character specially during expansion.
setopt EXTENDED_HISTORY # Write the history file in the ":start:elapsed;command" format.
setopt INC_APPEND_HISTORY # Write to the history file immediately, not when the Shell exits.
setopt SHARE_HISTORY # Share history between all sessions.
setopt HIST_EXPIRE_DUPS_FIRST # Expire duplicate entries first when trimming history.
setopt HIST_IGNORE_DUPS # Don't record an entry that was just recorded again.
setopt HIST_IGNORE_ALL_DUPS # Delete old recorded entry if new entry is a duplicate.
setopt HIST_FIND_NO_DUPS # Do not display a line previously found.
setopt HIST_IGNORE_SPACE # Don't record an entry starting with a space.
setopt HIST_SAVE_NO_DUPS # Don't write duplicate entries in the history file.
setopt HIST_REDUCE_BLANKS # Remove superfluous blanks before recording entry.
setopt HIST_VERIFY # Don't execute immediately upon history expansion.
setopt HIST_BEEP # Beep when accessing nonexistent history.
Depuis la liste de diffusion ZSH :
Vous devez déterminer la quantité de mémoire dont vous disposez, la quantité de mémoire que vous pouvez laisser occuper par l'historique (AFAIK, elle est toujours entièrement chargée en mémoire) et agir en conséquence. Supprimer la limite n'est pas plus sage car cela vous laisse avec une idée qu'il n'y a pas de limite alors qu'elle est toujours limitée par les ressources disponibles.
Ou si vous ne pensez pas que vous rencontrerez un problème d'épuisement des ressources, vous pouvez simplement définir HISTSIZE sur LONG_MAX à partir de limits.h: c'est le nombre maximum que HISTSIZE peut avoir.
Ce qui explique la solution Gentoo:
export HISTSIZE=2000
export HISTFILE="$HOME/.history"
L'historique ne sera pas enregistré sans la commande suivante:
export SAVEHIST=$HISTSIZE
Pour empêcher l'historique d'enregistrer des entrées dupliquées (telles que ls -l entré plusieurs fois au cours d'une seule session Shell), vous pouvez définir l'option hist_ignore_all_dups:
setopt hist_ignore_all_dups
Une astuce utile pour empêcher des entrées particulières d'être enregistrées dans un historique en les précédant d'au moins un espace.
setopt hist_ignore_space
Vous devez définir à la fois HISTSIZE
et SAVEHIST
. Ils indiquent respectivement le nombre de lignes d'historique à conserver en mémoire et le nombre de lignes à conserver dans le fichier historique.
Je ne pense pas que zsh ait un paramètre qui signifie "infini", mais à toutes fins pratiques, un milliard est infini, tout en restant représentable par une machine sur des machines 32 bits.
HISTFILE=~/.zsh_history
HISTSIZE=999999999
SAVEHIST=$HISTSIZE
J'avais un problème avec le plafonnement de l'histoire à 10000
jusqu'à ce que je réalise que oh-my-zsh définissait ses propres valeurs HISTSIZE
et SAVEHIST
. TL; DR, assurez-vous de mettre les lignes au bas de votre .zshrc
.
Un autre problème que je rencontrais était que mon historique soit tronqué à 1024 lignes. Bien que je ne sache pas pourquoi, je l'ai résolu en procédant comme suit:
HISTFILE=$HOME/.zsh_hist
(quelque chose de différent qu'avant)HISTFILE=$HOME/.bash_history
explicitement dans ~/.bashrc
HISTSIZE=100000
et SAVEHIST=100000
Je pense que cela aurait pu être lié à l'utilisation de export
pour définir HISTFILE
, ce qui a amené bash à utiliser la même variable HISTFILE
lors du lancement interactif à partir de ZSH, ce qui la tronquerait. La définition du fichier d'historique bash n'est probablement pas nécessaire tant que vous vous assurez de ne pas export
HISTFILE
.
Le problème n'était pas avec zsh
ou mon .zshrc
, mais avec mon histoire. Il y avait des entrées bizarres comme
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@#1453692179
cela a confondu zsh
et tout ce qui se trouvait après ces entrées a été tronqué. Je ne sais pas quel personnage ^@
correspond à, ou comment ces entrées se sont retrouvées dans mon historique, mais les supprimer a résolu le problème.