Cronologia dei comandi in zsh


32

Attualmente ho zsh impostato in modo tale che la cronologia dei comandi venga condivisa immediatamente tra tutte le sessioni.

Supponiamo di avere un emulatore di terminale aperto con due schede, ciascuna con una sessione zsh, A1 e A2. Se inserisco ls -la in A1, quindi vado in A2 e premo il tasto freccia su, vedrò ls -la nel prompt dei comandi.

Vorrei cambiarlo in modo che le sessioni non condividano la cronologia dei comandi tra loro, anche se quando si avvia una nuova sessione ottiene tutta la cronologia precedente da tutte le sessioni precedenti.


Lo faccio regolarmente. Ci sono tuttavia molte domande che non hanno ancora una risposta soddisfacente.
Art

Ottima domanda e risposte utili. Pensavo fosse una cosa iTerm2 in particolare. Spero che questo commento sia qualcuno in questo modo se fanno la stessa ipotesi.
Alan H.,

Risposte:


40

Probabilmente ti sei INC_APPEND_HISTORYpreparato.

L' INC_APPEND_HISTORYopzione, da man zshoptions:

Questa opzione funziona come APPEND_HISTORY, tranne per il fatto che le nuove righe della cronologia vengono aggiunte al $ HISTFILE in modo incrementale (non appena vengono immesse), piuttosto che attendere fino all'uscita della shell.

L'opzione che desideri è APPEND_HISTORY:

APPEND_HISTORY Se impostato, le sessioni zsh aggiungeranno il loro elenco cronologico al file cronologico, anziché sostituirlo. Pertanto, più sessioni zsh parallele avranno tutte le nuove voci dai loro elenchi cronologici aggiunti al file cronologico, nell'ordine in cui escono. Il file verrà comunque periodicamente riscritto per tagliarlo quando il numero di righe aumenta del 20% oltre il valore specificato da $ SAVEHIST (vedere anche l'opzione HIST SAVE BY COPY).

Puoi leggere queste opzioni nel man zshoptions, man zshallo online qui .

Per impostarli, nel tuo ~/.zshrco simili, dovresti avere:

setopt APPEND_HISTORY

Tieni presente che, se stai usando oh-my-zsh per impostazione predefinita, credo che INC_APPEND_HISTORYvenga utilizzato. Non sono sicuro al 100% in che modo vengono caricate le cose, ma se l' oh-my-zshopzione sovrascrive quella che hai impostato ~/.zshrc, puoi giocherellare con esso~/.oh-my-zsh/lib/history.zsh


echo unsetopt INC_APPEND_HISTORY >~/.oh-my-zsh/custom/history.zsh
youfu

Come si può configurare iTerm2 per ripristinare la cronologia individuale delle schede dopo un riavvio (per zsh e oh-my-zsh)?
Googol,

10

Per aggiungere alla risposta accettata, se lo usi oh-my-zsh, probabilmente hai l' SHARE_HISTORYopzione abilitata per impostazione predefinita.

Per ottenere la separazione tra shell in esecuzione + intera cronologia combinata in un terminale appena aperto, è necessario commentare o rimuovere la seguente riga:

setopt share_history # share command history data

a partire dal ~/.oh-my-zsh/lib/history.zsh


Nel mio caso, il percorso del file history.zsh è~/.antigen/repos/https-COLON--SLASH--SLASH-github.com-SLASH-robbyrussell-SLASH-oh-my-zsh.git/lib/history.zsh
suzanshakya il

3
Un altro modo per farlo è quello di inserire il unsetopt share_historytuo .zshrcdopo che oh-my-zshè caricato. Documentato qui .
Contrattazione del

grazie @counterbeing che l'ha risolto per me - dovresti fare una risposta separata, è il modo più semplice per risolverlo
jcollum
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.