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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top