Salvando o diretório atual da história do ZSH
Pergunta
Eu queria alcançar o mesmo que perguntado aqui Salvando o diretório atual para a história do Bash mas dentro do zsh shell. Eu não fiz nenhum truque do ZSH antes, mas até agora eu tenho:
function precmd {
hpwd=$history[$((HISTCMD-1))]
if [[ $hpwd == "cd" ]]; then
cwd=$OLDPWD
else
cwd=$PWD
fi
hpwd="${hpwd% ### *} ### $cwd"
echo "$hpwd" >>~/.hist_log
}
No momento, salvo o comando anotado com o nome do diretório em um arquivo de log. Este trabalho é bom para mim. Apenas pensei que poderia haver uma maneira de substituir o próprio buffer da história.
Solução
function _-accept-line() {
[[ -z "${BUFFER" ]] || [[ "${BUFFER}" =~ "### ${(q)PWD}\$" ]] || BUFFER="${BUFFER} ### ${PWD}"
zle .accept-line
}
zle -N accept-line _-accept-line
Adicionará ### ${PWD}
para sua linha de comando. Não é a melhor solução que você pode usar, mas funciona.
UPD: Resposta com base no comentário de @dennis williamson:
function zshaddhistory() {
print -sr "${1%%$'\n'} ### ${PWD}"
fc -p
}
Outras dicas
Em vez de armazená -lo em todos os comandos, adicionei o seguinte à construção da minha função precmd () para armazená -lo quando alterar os diretórios:
if [ "$LAST_DIR" != "$PWD" ]
then
print -s "##dir## $PWD"
LAST_DIR=$PWD
fi
Adiciona uma linha independente '## dir ## Dir Name' ao histórico cada vez que um comando é executado a partir de um novo diretório.