Mantendo o histórico por diretório de trabalho (cf. por sessão de shell)

10

Existe uma maneira de fazer com que o recurso de histórico de um shell moderno seja definido como um caminho?

Meus contextos de trabalho são divididos como caminhos no sistema de arquivos, e o padrão de atividade do shell, como comandos emitidos repetidamente, tende a ser distinto para cada 'projeto'. Seria bom se eu pudesse escopo do recurso de histórico para comandos emitidos a partir do caminho atual (ou sub-caminho).

    
por sohocoke 21.05.2015 / 16:09

4 respostas

4

Com zsh , você poderia fazer:

mkdir -p ~/.zsh/dirhist

E adicione ao seu ~ / .zshrc:

HISTSIZE=1000
SAVEHIST=10000
setopt HIST_SAVE_NO_DUPS INC_APPEND_HISTORY
HISTFILE=~/.zsh/dirhist/${PWD//\//@}
chpwd() {
  [[ $PWD = $OLDPWD ]] || fc -Pp ~/.zsh/dirhist/${PWD//\//@}
}

chpwd() é chamado sempre que o diretório atual é alterado. Lá, redefinimos o arquivo de histórico para algo como ~/.zsh/dirhist/@foo@bar quando você está em cd to /foo/bar .

    
por 21.05.2015 / 22:56
9

Não é uma boa resposta, mas uma alternativa se você estiver usando bash como seu shell: você pode criar um alias em seu .bashrc .

Por exemplo:

alias a='cd /tmp/A ; history -w ; history -c ; export HISTFILE=/home/user/.a_history ; history -r $HISTFILE'
alias b='cd /tmp/B ; history -w ; history -c ; export HISTFILE=/home/user/.b_history ; history -r $HISTFILE'

Então, se você digitar a :

  1. você será movido no diretório do seu projeto
  2. o histórico atual será salvo ( history -w )
  3. o histórico mantido na memória será redefinido ( history -c )
  4. o arquivo do histórico do projeto será definido como /home/user/.a_history e lido ( history -r )
por 21.05.2015 / 17:12
1

Se você estiver usando o ZSH, dê uma olhada neste pequeno plugin que eu escrevi recentemente para lidar com isso:

link

Ele armazena um HISTFILE separado para cada diretório em que você executou comandos e adiciona um chpwd hook para alternar entre HISTFILE s quando você altera os diretórios.

Ele também fornece um widget zle que você pode ligar a um pressionamento de tecla que alternará o HISTFILE entre o seu "global" HISTFILE original e o HISTFILE do seu diretório de trabalho atual.

Originalmente, ele foi baseado no plug-in do histórico por diretório de Jim Hester , mas foi reescrito a partir do para corrigir muitos dos problemas com esse plugin.

    
por 16.02.2016 / 06:31
0

Eu escrevi um plugin ZSH que faz o que você quer: link

Em contraste com outras soluções, meu plug-in retorna ao histórico global automaticamente. Isso significa que você não precisa alternar entre o histórico do diretório e o histórico global.

No entanto, as outras soluções são um pouco mais leves, eu acho.

    
por 12.04.2016 / 05:32