a história não é preservada no zsh

16

Sempre que abro uma nova instância de um terminal, o histórico fica vazio. Por que é que? Preciso configurar algo? No bash, porém, não há necessidade disso.

Gilles 'SO- parar de ser mau'
fonte
Não tenho certeza zsh, mas, por padrão, bashgrava nos arquivos de histórico ao sair , o que significa que, se você não o tiver usado antes e abrir alguns shells, todos eles mostrarão o histórico agora até que pelo menos um faça logout, desse modo gravando seu arquivo de histórico.
DopeGhoti 01/09

Respostas:

24

Bash e zsh têm padrões diferentes. O Zsh não salva o histórico em um arquivo por padrão.

Quando você executa o zsh sem um arquivo de configuração, ele exibe uma interface de configuração. Nesta interface de configuração, selecione

(1)  Configure settings for history, i.e. command lines remembered
     and saved by the shell.  (Recommended.)

revise as configurações propostas e selecione

# (0)  Remember edits and return to main menu (does not save file yet)

Repita para os outros submenus para (2) conclusão, (3) combinações de teclas e (4) opções e selecione

(0)  Exit, saving the new settings.  They will take effect immediately.

no menu principal.

As configurações recomendadas relacionadas ao histórico são

HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000
setopt appendhistory

Eu usaria um nome diferente para o arquivo de histórico, para indicar que é o arquivo de histórico do zsh. E 1000 linhas podem ser aumentadas em um sistema moderno.

HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt appendhistory

Essas linhas entram ~/.zshrc, a propósito.

Gilles 'SO- parar de ser mau'
fonte
8

Embora a resposta existente esteja correta, pensei que valeria a pena acrescentar que existe uma opção melhor do que appendhistorysalvar seu histórico e é isso SHARE_HISTORY.

Nos documentos SHARE_HISTORY"ambos importam novos comandos do arquivo de histórico e também fazem com que seus comandos digitados sejam anexados ao arquivo de histórico". Isso significa que os reservatórios também conhecem a história um do outro, sem precisar fechar o atual ou abrir um novo.

Então, todos juntos, você definiria assim:

HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=1000
setopt SHARE_HISTORY
bert
fonte
1
+1 e seja bem-vindo ao U / L, mas pessoalmente eu prefiro INC_APPEND_HISTORY_TIME, que grava no histórico de todos os terminais como acima, mas esse histórico "não estará disponível imediatamente em outras instâncias do shell que estão usando o mesmo arquivo de histórico". Isso faz mais sentido para mim, porque então eu posso percorrer o histórico de cada terminal independentemente, mas ainda está tudo registrado.
Sparhawk
2
Obrigado! Sim, isso é justo o suficiente e eu posso entender totalmente por que INC_APPEND_HISTORY_TIMEpode fazer mais sentido lógico. Eu provavelmente não deveria ter dito "melhor", acho que é apenas uma questão de preferência pessoal neste momento!
bert
0

Quando você passa do bash para o zsh pela primeira vez, seu histórico do bash não será transferido. Portanto, todo o histórico que você tinha no bash ainda está no arquivo de histórico do bash. O zsh começa a capturar o histórico a partir do momento em que você começa a usá-lo como seu shell.

Se você não o configurou para capturar o histórico, é possível executar novamente o assistente de configuração e informar ao zsh quanto histórico salvar. Altere o nome de ~ / .zshrc ou exclua-o para obter uma nova chance do assistente.

LocoCoyote
fonte
0

Se não estiver funcionando, e você já tiver tudo isso em prática, tente:

fc -W

Isso grava o histórico atual no arquivo de histórico. E se você receber:

zsh: locking failed for /home/username/.zsh_history: permission denied

é hora de verificar as permissões no arquivo e no diretório pai.

Chris Snyder
fonte