Como posso fazer com que o histórico compartilhado do ZSH funcione?

4

Eu tenho setopt share_history e set opt inc_append_history definido no meu ~/.zshrc . Isso está quase funcionando.

Na sessão 1, executo um comando, ele é gravado no histórico.

Na sessão 2, o comando não fica visível quando pressiono a seta UP , até executar history . Depois de executar history , aparece.

Como faço para que o histórico apareça imediatamente quando pressiono a seta UP ?

    
por jordelver 21.11.2014 / 11:18

1 resposta

3

Quando o Z shell exibe o prompt, ele está ocioso e o IMHO não realiza nenhuma tarefa em segundo plano. Portanto, o arquivo de histórico $HISTFILE é relido somente ao renderizar um novo prompt. É por isso que é suficiente, mas também é necessário que você pressione ENTER em um terminal para reler seu histórico.

Se você quiser salvar este pressionamento de tecla adicional, poderá usar o seguinte zle widget em seu ~/.zshrc :

up-line-or-history-reread() {
        [[ -z $BUFFER ]] && fc -R $HISTFILE
        zle up-line-or-history
}
zle -N up-line-or-history-reread
bindkey '^[[A' up-line-or-history-reread

Esse novo widget, que está vinculado a UP ARROW , verifica se a linha de comando atual está vazia e, se for o caso, relerá o histórico. Depois disso, invoca o widget padrão ( up-line-or-history ).

Essa abordagem tem pelo menos essas duas falhas em comparação com o comportamento padrão:

  • Se você estiver no histórico com alguns comandos e excluir toda a linha de comando, a próxima vez que pressionar UP ARROW será iniciada novamente no final do histórico de comandos.
  • Se você usar algum outro mecanismo de histórico, como a pesquisa de histórico, ainda precisará pressionar a tecla ENTER ou criar um widget semelhante para essas finalidades também.
por 23.11.2014 / 20:31