Salvataggio directory corrente alla storia zsh
Domanda
Ho voluto ottenere lo stesso come chiesto qui Salvataggio directory corrente alla storia bash ma all'interno shell zsh. Non ho fatto alcun trickry zsh prima, ma finora non ho:
function precmd {
hpwd=$history[$((HISTCMD-1))]
if [[ $hpwd == "cd" ]]; then
cwd=$OLDPWD
else
cwd=$PWD
fi
hpwd="${hpwd% ### *} ### $cwd"
echo "$hpwd" >>~/.hist_log
}
In questo momento risparmio il comando annotato con il nome della directory in un file di log. Questo funziona bene per me. Proprio pensato che ci potrebbe essere un modo per rendere la sostituzione nella storia buffer stesso.
Soluzione
function _-accept-line() {
[[ -z "${BUFFER" ]] || [[ "${BUFFER}" =~ "### ${(q)PWD}\$" ]] || BUFFER="${BUFFER} ### ${PWD}"
zle .accept-line
}
zle -N accept-line _-accept-line
Aggiungerà ### ${PWD}
alla riga di comando. Non è la soluzione migliore si potrebbe usare, ma funziona.
UPD: risposta in base a commento di @Dennis Williamson:
function zshaddhistory() {
print -sr "${1%%$'\n'} ### ${PWD}"
fc -p
}
Altri suggerimenti
Invece di memorizzare su ogni comando ho aggiunto quanto segue alla beginging del mio precmd () per riporlo quando cambio directory:
if [ "$LAST_DIR" != "$PWD" ]
then
print -s "##dir## $PWD"
LAST_DIR=$PWD
fi
aggiunge un '## dir ## dir nome' linea autonoma alla storia ogni volta che un comando viene eseguito da una nuova directory.