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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top