Enregistrement répertoire en cours à l'histoire zsh
Question
Je voulais obtenir le même que celui demandé ici Enregistrement répertoire en cours de l'histoire bash mais à l'intérieur shell zsh. Je ne l'ai pas fait de trickry zsh avant, mais jusqu'à présent je:
function precmd {
hpwd=$history[$((HISTCMD-1))]
if [[ $hpwd == "cd" ]]; then
cwd=$OLDPWD
else
cwd=$PWD
fi
hpwd="${hpwd% ### *} ### $cwd"
echo "$hpwd" >>~/.hist_log
}
En ce moment, je sauve la commande annotée avec le nom du répertoire dans un fichier journal. Cela fonctionne bien pour moi. Je pensais juste que il pourrait y avoir un moyen de faire remplacer dans l'histoire elle-même tampon.
La solution
function _-accept-line() {
[[ -z "${BUFFER" ]] || [[ "${BUFFER}" =~ "### ${(q)PWD}\$" ]] || BUFFER="${BUFFER} ### ${PWD}"
zle .accept-line
}
zle -N accept-line _-accept-line
Ajoutera ### ${PWD}
à votre ligne de commande. Pas la meilleure solution que vous pouvez utiliser, mais il fonctionne.
UPD: Réponse basée sur le commentaire de @Dennis Williamson:
function zshaddhistory() {
print -sr "${1%%$'\n'} ### ${PWD}"
fc -p
}
Autres conseils
Au lieu de stocker sur chaque commande j'ajouté ce qui suit à la beginging de ma fonction precmd () pour stocker quand je change les répertoires:
if [ "$LAST_DIR" != "$PWD" ]
then
print -s "##dir## $PWD"
LAST_DIR=$PWD
fi
Ajoute un « ## dir ## dir nom » ligne autonome à l'histoire à chaque fois qu'une commande est exécutée à partir d'un nouveau répertoire.