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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top