Speichern von aktuellen Verzeichnis zu zsh Geschichte
Frage
Ich wollte das Gleiche erreichen wie hier gefragt Speicher aktuelles Verzeichnis bash Geschichte aber innerhalb zsh Shell. Ich habe keine zsh trickry vorher getan, aber bisher habe ich:
function precmd {
hpwd=$history[$((HISTCMD-1))]
if [[ $hpwd == "cd" ]]; then
cwd=$OLDPWD
else
cwd=$PWD
fi
hpwd="${hpwd% ### *} ### $cwd"
echo "$hpwd" >>~/.hist_log
}
Im Moment speichere ich den Befehl kommentierte mit dem Verzeichnisnamen in eine Protokolldatei. Dies funktioniert gut für mich. Ich dachte, es könnte ein Weg sein, um in der Geschichte zu machen Ersatz selbst puffern.
Lösung
function _-accept-line() {
[[ -z "${BUFFER" ]] || [[ "${BUFFER}" =~ "### ${(q)PWD}\$" ]] || BUFFER="${BUFFER} ### ${PWD}"
zle .accept-line
}
zle -N accept-line _-accept-line
Wird ### ${PWD}
auf der Kommandozeile hinzuzufügen. Nicht die beste Lösung könnte man verwenden, aber es funktioniert.
UPD: Antwort basierend auf @ Dennis Williamson Kommentar:
function zshaddhistory() {
print -sr "${1%%$'\n'} ### ${PWD}"
fc -p
}
Andere Tipps
Anstatt speichert es auf jedem Befehl hinzugefügt ich folgende zum beginging meiner precmd () Funktion zu speichern, wenn ich Verzeichnisse zu ändern:
if [ "$LAST_DIR" != "$PWD" ]
then
print -s "##dir## $PWD"
LAST_DIR=$PWD
fi
Adds a '## Richt ## dir name' eigenständige Linie auf die Geschichte jedes Mal, wenn ein Befehl von einem neuen Verzeichnis ausgeführt wird.