Zsh'da sınırsız tarih


41

İçinde zshsınırsız bir tarihe sahip olmak istiyorum. Ben HISTSIZE=işe yarayanı ayarladım bash. Şimdi eski bir tarihi içe aktarıyorum

mv old_history .history

hangi oldukça büyük

wc -l .history
43562 .history

Şimdi kapatıp zshtekrar başlatırsam , görürüm

wc -l .history
32234 .history

Sınırsız bir geçmişim olamaz zshmı?


zsh bash'tan farklı çalışıyor gibi görünüyor wiki.gentoo.org/wiki/Zsh/Guide#History bu kılavuz, zsh tarihinde size yardımcı olmalıdır.
Aurelien

Yanıtlar:


49

Makinelerinizin sınırı ve olanakları var.

HISTFILE="$HOME/.zsh_history"
HISTSIZE=10000000
SAVEHIST=10000000
setopt BANG_HIST                 # Treat the '!' character specially during expansion.
setopt EXTENDED_HISTORY          # Write the history file in the ":start:elapsed;command" format.
setopt INC_APPEND_HISTORY        # Write to the history file immediately, not when the shell exits.
setopt SHARE_HISTORY             # Share history between all sessions.
setopt HIST_EXPIRE_DUPS_FIRST    # Expire duplicate entries first when trimming history.
setopt HIST_IGNORE_DUPS          # Don't record an entry that was just recorded again.
setopt HIST_IGNORE_ALL_DUPS      # Delete old recorded entry if new entry is a duplicate.
setopt HIST_FIND_NO_DUPS         # Do not display a line previously found.
setopt HIST_IGNORE_SPACE         # Don't record an entry starting with a space.
setopt HIST_SAVE_NO_DUPS         # Don't write duplicate entries in the history file.
setopt HIST_REDUCE_BLANKS        # Remove superfluous blanks before recording entry.
setopt HIST_VERIFY               # Don't execute immediately upon history expansion.
setopt HIST_BEEP                 # Beep when accessing nonexistent history.

Gönderen ZSH Posta listesi :

Ne kadar hafızaya sahip olduğunuzu, ne kadarının tarih tarafından işgal edilmesine izin verebileceğinizi (AFAIK her zaman tam olarak belleğe yüklenir) belirlemeli ve buna göre davranmalısınız. Sınırı kaldırmak, her zaman kullanılabilir kaynaklar tarafından sınırlandırılırken sınırın olmadığı fikrini bıraktığı için akıllıca olmaz.

Veya kaynak tükenmesi ile ilgili bir sorunla karşılaşacağınızı düşünmüyorsanız, yalnızca HISTSIZE öğesini LONG_MAX olarak limit.h olarak ayarlayabilirsiniz.

Gentoo çözümünü açıklayan:

export HISTSIZE=2000
export HISTFILE="$HOME/.history"

Aşağıdaki komut olmadan tarih kaydedilmeyecek:

export SAVEHIST=$HISTSIZE

Geçmişin yinelenen girişleri kaydetmesini önlemek için (tekli kabuk oturumu sırasında birçok kez girilen ls -l gibi), hist_ignore_all_dups seçeneğini ayarlayabilirsiniz:

setopt hist_ignore_all_dups

Belirli girişlerin tarihe en az bir boşluk bırakılarak kaydedilmesini önleyen kullanışlı bir püf noktası.

setopt hist_ignore_space

Bunun sorumu nasıl cevapladığını anlamıyorum. Geçmiş dosyamın boyutu 683 kB, kesinlikle hafızam için fazla büyük değil mi?
pfnuesel

3
user $ export HISTSIZE = 999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 bilgisayarınızın olanakları dışında olacak. Bu sayıyı dileğinize ve bilgisayar olanaklarınıza en iyi şekilde uyacak şekilde ayarlamanız gerekir.
Aurelien

Bunu ayarlayabilirim 50000, ama bu benim sorunumu çözmez.
pfnuesel

1
Sorunuz zsh'da sınırsız bir geçmişim olamaz mı? ZSH yazarının cevabı Hayır, ancak dilediğiniz gibi ayarlayabilirsiniz. Gentoo nasıl doğru bir şekilde açıklıyor.
Aurelien

1
bu çözümlerin hiçbiri zsh'de çalışmıyor. Hala yaklaşık bir veya iki hafta sonra keser. Bu sorunla yıllardır uğraşıyorum ve bu çok saçma. Sonunda bunu yapmak için logrotate kullandım.
kristopolous

16

Her iki ayarlamanız gerekir HISTSIZEve SAVEHIST. Geçmiş dosyasında kaç tarih satırının hafızasında tutulacağını ve kaç satır tarih geçmiş dosyasında tutulacağını belirtir.

Zsh'ın “sonsuz” anlamına gelen bir ayara sahip olduğunu sanmıyorum, ancak tüm pratik amaçlar için, bir milyar sonsuz, 32 bit makinelerde makine tarafından temsil edilebilir halde kalır.

HISTFILE=~/.zsh_history
HISTSIZE=999999999
SAVEHIST=$HISTSIZE

Hafızamdaki bu kadar çok çizgiyi tutmam konusunda endişelenmeli miyim? Bilgisayarımı yavaşlatıyor mu?
becko

7
2010’daki bir bilgisayarı yavaşlatmak için yaşamınızda yeterli tarih çizgisi yazmayacaksınız.
Gilles 'SO- kötülük'

1

Ben geçmişi olan bir sorun değil kapaklanan geçirdiğini 10000oh-my-zsh kendi batıyordu fark edene kadar HISTSIZEve SAVEHISTdeğerler. TL; DR, çizgileri altına koyduğunuzdan emin olun .zshrc.


0

Sorun zshbenimle ya da benimle .zshrcdeğil, tarihimle oldu. Gibi bazı garip girişler vardı

^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@#1453692179

Bu karışık zshve bu girişlerden sonra her şey kesildi. Hangi karakterin hangi karaktere ^@karşılık geldiğini veya bu girişlerin geçmişimde nasıl bittiğini bilmiyorum , ancak bunları kaldırmak sorunu çözdü.


hangi terminali ve editörü kullanıyorsunuz
aurelien

Çünkü şimdi soru şu ki, bu bir kez daha geri gelecek mi?
aurelien

terminologyve vim.
pfnuesel

1
^@ASCII NUL ( \0) karakteridir.
muru

6
^ @ ^ @ ^ @ ^ @ Karakterleri boştur ve iki program aynı dosyaya aynı anda yazmayı denediğinde sık sık gösterilir ve atomik yazma kullanmaz (örn. Arabelleğe alınmış yazma) veya kilitleme yapmazlar. . Veya dosya sistemindeki bozulma, yedekten kötü restorasyon veya benzeri durumlardan kaynaklanabilir.
user222658
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.