Необмежена історія в zsh


42

В 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

Відповіді:


50

Є межа і можливості ваших машин.

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 кБ, напевно, не надто великий для моєї пам'яті?
pfnuesel

3
user $ export HISTSIZE = 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 буде поза можливостями вашого комп'ютера. Ви повинні встановити це число, щоб максимально відповідати вашим побажанням та можливостям комп’ютера.
aurelien

Я можу його встановити 50000, але це не виправить мою проблему.
pfnuesel

1
Ваше питання: Чи не можу я мати необмежену історію в zsh? Автор ZSH відповідає Ні, але ви можете встановити його за своїм бажанням. Gentoo просто правильно поясніть, як це зробити.
aurelien

1
жодне з цих рішень не працює в zsh. Це все одно відрізає його приблизно через тиждень-два. Я багато років займався цією проблемою, і це так абсурдно. Нарешті я використав логротат для цього.
kristopolous

17

Вам потрібно встановити і те, HISTSIZEі SAVEHIST. Вони вказують, скільки рядків історії зберігати в пам’яті та скільки рядків зберігати відповідно у файлі історії.

Я не думаю, що zsh має налаштування, яке означає "нескінченне", але для всіх практичних цілей мільярд - це нескінченність, залишаючись машинно-репрезентабельним на 32-бітних машинах.

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

Чи варто мені турбуватися про збереження такої великої кількості ліній у пам'яті, сповільнюючи роботу мого комп'ютера?
беско

7
Ви не збираєтеся вводити достатньо рядків історії у своєму житті, щоб сповільнити ПК 2010 року.
Жиль "ТАК - перестань бути злим"

1

У мене виникли проблеми з обмеженням історії, 10000поки я не зрозумів, що о-мі-zsh встановлює свої власні HISTSIZEта SAVEHISTцінності. TL; DR, переконайтеся, що розміщуєте лінії внизу .zshrc.


0

Проблема була не з zshмоєю чи моєю .zshrc, а з моєю історією. Були такі дивні записи, як

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

що заплутався zshі все після цих записів урізався. Я не знаю, що ^@відповідає персонажу , або як ці записи опинилися в моїй історії, але видалення їх вирішило проблему.


яким терміналом та редактором ви користуєтесь?
Aurelien

тому що питання зараз, чи це повернеться ще раз пізніше?
aurelien

terminologyі vim.
pfnuesel

1
^@- \0символ ASCII NUL ( ).
муру

6
Символи ^ @ ^ @ ^ @ ^ @ є нульовими, і вони часто з’являються, коли дві програми намагаються записати в один і той же файл одночасно, і не використовують атомні записи (наприклад, вони записують у буфер) або блокують . Або це може бути викликано пошкодженням файлової системи, поганим відновленням із резервного копіювання чи подібним.
користувач222658
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.