Сохранение текущего каталога в историю ZSH
Вопрос
Я хотел достичь такого же, как спросил здесь Сохранение текущего каталога для истории Bash Но в пределах ZSH Shell. Я не сделал никаких упрощенных ZSH, но до сих пор у меня есть:
function precmd {
hpwd=$history[$((HISTCMD-1))]
if [[ $hpwd == "cd" ]]; then
cwd=$OLDPWD
else
cwd=$PWD
fi
hpwd="${hpwd% ### *} ### $cwd"
echo "$hpwd" >>~/.hist_log
}
Сейчас я сохраняю команду, аннотируемую с именем каталога к файлу журнала. Это работает нормально для меня. Просто подумал, что может быть способ сделать замену в самом буфере истории.
Решение
function _-accept-line() {
[[ -z "${BUFFER" ]] || [[ "${BUFFER}" =~ "### ${(q)PWD}\$" ]] || BUFFER="${BUFFER} ### ${PWD}"
zle .accept-line
}
zle -N accept-line _-accept-line
Будет добавить ### ${PWD}
к вашей командной строке. Не лучшее решение, которое вы можете использовать, но это работает.
UPD: Ответ на основе комментариев @dennis Williamson:
function zshaddhistory() {
print -sr "${1%%$'\n'} ### ${PWD}"
fc -p
}
Другие советы
Вместо того, чтобы хранить его на каждой команде, я добавил следующее в службу поддержки My Precmd () для хранения его, когда я меняю каталоги:
if [ "$LAST_DIR" != "$PWD" ]
then
print -s "##dir## $PWD"
LAST_DIR=$PWD
fi
Добавляет наименовую линию «## DIR ## DIR» в истории каждый раз, когда команда запускается из нового каталога.