Histórico de comandos no zsh

31

Atualmente, eu tenho o zsh configurado de forma que o histórico de comandos seja compartilhado entre todas as sessões imediatamente.

Digamos que eu tenha um emulador de terminal aberto com duas guias, cada uma com uma sessão zsh, A1 e A2. Se eu inserir ls -la em A1 e, em seguida, for para A2 e pressionar a tecla de seta para cima, verei ls -la no prompt de comando.

Gostaria de alterá-lo para que as sessões não compartilhem o histórico de comandos, embora, quando você inicia uma nova sessão, obtenha todo o histórico anterior de todas as sessões anteriores.

Arte
fonte
Eu faço isso regularmente. No entanto, existem muitas perguntas que ainda não têm resposta satisfatória.
Art
Ótima pergunta e respostas úteis. Eu pensei que isso era uma coisa do iTerm2 especificamente. Espero que esse comentário seja assim, se alguém fizer a mesma suposição.
Alan H.

Respostas:

39

Você provavelmente já está INC_APPEND_HISTORYpronto.

A INC_APPEND_HISTORYopção, de man zshoptions:

Essas opções funcionam como APPEND_HISTORY, exceto que novas linhas de histórico são adicionadas ao $ HISTFILE de forma incremental (assim que são inseridas), em vez de aguardar até que o shell saia.

A opção que você deseja é APPEND_HISTORY:

APPEND_HISTORY Se isso estiver definido, as sessões zsh anexarão sua lista de histórico ao arquivo de histórico, em vez de substituí-lo. Assim, várias sessões zsh paralelas terão todas as novas entradas de suas listas de histórico adicionadas ao arquivo de histórico, na ordem em que elas saem. O arquivo ainda será reescrito periodicamente para apará-lo quando o número de linhas aumentar 20% além do valor especificado por $ SAVEHIST (consulte também a opção HIST SAVE BY COPY).

Você pode ler sobre essas opções em man zshoptions, man zshallou online aqui .

Para defini-los, no seu ~/.zshrcou similar, você deve ter:

setopt APPEND_HISTORY

Esteja ciente de que, se você estiver usando oh-my-zsh, por padrão, acredito, INC_APPEND_HISTORYserá usado. Não tenho 100% de certeza de como as coisas são carregadas, mas se a oh-my-zshopção substituir a que você definiu ~/.zshrc, você pode mexer com ela~/.oh-my-zsh/lib/history.zsh

simont
fonte
echo unsetopt INC_APPEND_HISTORY >~/.oh-my-zsh/custom/history.zsh
youfu 28/02
Como o iTerm2 pode ser configurado para restaurar o histórico individual de guias após uma reinicialização (para zsh e oh-my-zsh)?
Googol 22/02
9

Para adicionar à resposta aceita, se você usar oh-my-zsh, provavelmente tem a SHARE_HISTORYopção ativada por padrão.

Para obter a separação entre os shells em execução + todo o histórico combinado em um terminal recém-aberto, é necessário comentar ou remover a seguinte linha:

setopt share_history # share command history data

de ~/.oh-my-zsh/lib/history.zsh

siergiej
fonte
No meu caso, o caminho do arquivo history.zsh é~/.antigen/repos/https-COLON--SLASH--SLASH-github.com-SLASH-robbyrussell-SLASH-oh-my-zsh.git/lib/history.zsh
suzanshakya
3
Outra maneira de fazer isso é colocar o unsetopt share_historyseu .zshrcdepois de oh-my-zshcarregado. Documentado aqui .
counterbeing
graças @counterbeing que fixa-lo para mim - você deve fazer que uma resposta em separado, que é a maneira mais fácil de corrigir isso
jcollum