ประวัติไม่ จำกัด ใน zsh


41

ในzshฉันต้องการมีประวัติไม่ จำกัด ฉันตั้งHISTSIZE=ซึ่งใช้งานbashได้ ตอนนี้ฉันนำเข้าประวัติเก่า

mv old_history .history

ซึ่งค่อนข้างใหญ่

wc -l .history
43562 .history

ถ้าฉันปิดแล้วเริ่มzshใหม่อีกครั้งฉันจะเห็น

wc -l .history
32234 .history

ฉันมีประวัติไม่ จำกัด ได้zshหรือไม่?


zsh ดูเหมือนจะทำงานแตกต่างจาก bash wiki.gentoo.org/wiki/Zsh/Guide#Historyคู่มือนี้ควรช่วยคุณในประวัติศาสตร์ zsh
aurelien

คำตอบ:


49

มีขีด จำกัด และความเป็นไปได้ของเครื่องของคุณ

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.

จากรายชื่อผู้รับจดหมาย ZSH :

คุณควรกำหนดจำนวนหน่วยความจำที่คุณมีจำนวนหน่วยความจำที่คุณสามารถอนุญาตให้ครอบครองได้ (AFAIK จะเต็มหน่วยความจำเสมอ) และดำเนินการตามนั้น การลบขีด จำกัด นั้นไม่ฉลาดเท่าที่จะทำให้คุณมีความคิดว่าไม่มีขีด จำกัด ในขณะที่มันถูก จำกัด ด้วยทรัพยากรที่มีอยู่เสมอ

หรือถ้าคุณไม่คิดว่าคุณจะมีปัญหากับทรัพยากรหมดคุณก็สามารถตั้งค่า HISTSIZE เป็น LONG_MAX จากขีด จำกัด H: มันคือจำนวนสูงสุดของ HISTSIZE

ซึ่งอธิบายถึงวิธีแก้ปัญหาของ Gentoo:

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

ประวัติจะไม่ถูกบันทึกหากไม่มีคำสั่งต่อไปนี้:

export SAVEHIST=$HISTSIZE

เพื่อป้องกันไม่ให้ประวัติบันทึกรายการที่ซ้ำกัน (เช่น ls -l ที่ป้อนหลายครั้งระหว่างเซสชันเชลล์เดี่ยว) คุณสามารถตั้งค่าตัวเลือก hist_ignore_all_dups:

setopt hist_ignore_all_dups

เคล็ดลับที่มีประโยชน์เพื่อป้องกันไม่ให้มีการบันทึกรายการใดรายการหนึ่งลงในประวัติโดยนำหน้าด้วยช่องว่างอย่างน้อยหนึ่งช่อง

setopt hist_ignore_space

ฉันไม่เห็นวิธีการที่ตอบคำถามของฉัน ขนาดไฟล์ประวัติของฉันคือ 683 kB แน่นอนไม่ใหญ่เกินไปสำหรับหน่วยความจำของฉัน
pfnuesel

3
ผู้ใช้ $ export HISTSIZE = 99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 แอป, ผู้ใช้คอมพิวเตอร์ของคุณ คุณต้องตั้งค่าหมายเลขให้พอดีกับความต้องการและความเป็นไปได้ของคอมพิวเตอร์ของคุณ
aurelien

ฉันสามารถตั้งค่าเป็น50000แต่นั่นจะไม่แก้ไขปัญหาของฉัน
pfnuesel

1
คำถามของคุณคือฉันจะมีประวัติไม่ จำกัด ใน zsh หรือไม่? ผู้เขียน ZSH ตอบไม่แต่คุณสามารถตั้งค่าได้ตามที่คุณต้องการ Gentoo อธิบายได้อย่างถูกต้องว่าทำอย่างไร
aurelien

1
ไม่มีวิธีแก้ปัญหาเหล่านี้ใน zsh มันยังคงตัดมันหลังจากนั้นประมาณหนึ่งหรือสองสัปดาห์ ฉันได้รับการจัดการกับปัญหานี้มานานหลายปีและมันก็ไร้สาระ ในที่สุดฉันก็ใช้ logrotate เพื่อทำมัน
kristopolous

16

คุณจำเป็นต้องตั้งทั้งสองและHISTSIZE SAVEHISTพวกเขาระบุจำนวนบรรทัดของประวัติที่จะเก็บไว้ในหน่วยความจำและจำนวนบรรทัดที่จะเก็บไว้ในไฟล์ประวัติตามลำดับ

ฉันไม่คิดว่า zsh มีการตั้งค่าที่หมายถึง "ไม่มีที่สิ้นสุด" แต่สำหรับวัตถุประสงค์ในทางปฏิบัติทั้งหมดหนึ่งพันล้านไม่มีที่สิ้นสุด

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

ฉันควรจะกังวลเกี่ยวกับการเก็บสายจำนวนมากในหน่วยความจำที่ทำให้คอมพิวเตอร์ทำงานช้าลงหรือไม่?
becko

7
คุณจะไม่พิมพ์บรรทัดประวัติเพียงพอในเวลาชีวิตของคุณเพื่อชะลอพีซี 2010
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

1

ฉันมีปัญหาเกี่ยวกับประวัติที่ถูก จำกัด ที่10000จนกว่าฉันจะรู้ว่า oh-my-zsh กำลังตั้งค่าของตัวเองHISTSIZEและSAVEHISTค่านิยม TL; DR .zshrcให้แน่ใจว่าจะใส่เส้นที่ด้านล่างของคุณ


0

ปัญหาไม่ได้เกิดขึ้นกับzshฉัน.zshrcแต่มีประวัติของฉัน มีบางรายการที่ผิดปกติเช่น

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

ที่สับสนzshและทุกอย่างหลังจากรายการเหล่านี้ถูกตัดทอน ฉันไม่ทราบว่าตัวอักษรที่^@สอดคล้องกับหรือวิธีการที่รายการเหล่านี้ในประวัติศาสตร์ของฉัน แต่การลบพวกเขาแก้ไขปัญหา


คุณใช้เทอร์มินัลและโปรแกรมแก้ไขใด
aurelien

เพราะคำถามตอนนี้คือจะกลับมาอีกครั้งในภายหลังหรือไม่
aurelien

terminologyvimและ
pfnuesel

1
^@เป็นอักขระ ASCII NUL ( \0)
muru

6
อักขระ ^ @ ^ @ ^ @ ^ @ เป็นโมฆะและบ่อยครั้งที่ปรากฏเมื่อโปรแกรมสองโปรแกรมลองเขียนไปยังไฟล์เดียวกันในเวลาเดียวกันและไม่ได้ใช้การเขียนแบบอะตอม (เช่นการเขียนบัฟเฟอร์) หรือการล็อค . หรืออาจเกิดจากความเสียหายของระบบไฟล์การคืนค่าที่ไม่ดีจากการสำรองข้อมูลหรือคล้ายกัน
user222658
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.