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)을 결정하고 그에 따라 조치를 취해야합니다. 사용 가능한 리소스에 의해 항상 제한되는 동안 제한이 없다는 생각으로 한계를 제거하는 것이 현명하지 않습니다.

또는 리소스 소모 문제가 발생하지 않는다고 생각되면 limits.h에서 HISTSIZE를 LONG_MAX로 설정하면됩니다. HISTSIZE가 가질 수있는 최대 수입니다.

젠투 솔루션을 설명하는 것은 다음과 같습니다.

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
user $ export HISTSIZE = 99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999는 컴퓨터에서 사용할 수 없습니다. 원하는 수와 컴퓨터 가능성에 최대한 적합하도록 해당 번호를 설정해야합니다.
aurelien

로 설정할 수 50000있지만 문제가 해결되지 않습니다.
pfnuesel

1
귀하의 질문은 zsh에서 무제한 히스토리를 가질 수 없습니까? ZSH 작성자는 아니요 라고 응답 하지만 원하는대로 설정할 수 있습니다. 젠투는 정확히 어떻게 설명합니까?
aurelien

1
이러한 솔루션 중 어느 것도 zsh에서 작동하지 않습니다. 약 1-2 주 후에도 여전히 차단됩니다. 나는 수년간이 문제를 다루어 왔으며 너무 터무니 없습니다. 마침내 logrotate를 사용했습니다.
kristopolous

16

당신은 모두를 설정해야 HISTSIZE하고 SAVEHIST. 메모리에 보존 할 히스토리 행 수와 히스토리 파일에 보존 할 행 수를 각각 표시합니다.

zsh에는 "무한"을 의미하는 설정이 없다고 생각하지만 모든 실제적인 목적으로 10 억은 무한한 반면 32 비트 시스템에서는 시스템을 대표 할 수 있습니다.

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

메모리에 이렇게 많은 수의 행을 유지하면 컴퓨터 속도가 느려지는 것에 대해 걱정해야합니까?
becko

7
당신은 2010 년대 PC 속도를 늦추기 위해 당신의 인생 시간에 충분한 히스토리 라인을 입력하지 않을 것입니다.
Gilles 'SO- 악마 그만

1

10000oh-my-zsh가 자체 값 HISTSIZESAVEHIST값을 설정한다는 것을 깨달을 때까지 역사에 문제가 발생했습니다 . TL; DR, 귀하의 하단에 줄을 넣어야합니다 .zshrc.


0

문제는 zsh또는 내 문제가 아니라 .zshrc내 역사에 있습니다. 같은 이상한 항목이 있었다

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

혼란스럽고이 zsh항목 이후의 모든 내용이 잘 렸습니다. 나는 어떤 인물이 어떤 캐릭터에 ^@해당하는지, 또는이 항목들이 내 역사에서 어떻게 생겼는지 모르지만 그것들을 제거하면 문제가 해결되었습니다.


어떤 터미널과 편집기를 사용하십니까?
aurelien

이제 질문이 나중에 다시 나오나요?
aurelien

terminology그리고 vim.
pfnuesel

1
^@ASCII NUL ( \0) 문자입니다.
muru

6
^ @ ^ @ ^ @ ^ @ 문자는 null이며 두 프로그램이 동시에 동일한 파일에 쓰려고 시도하고 원자 쓰기 (예 : 버퍼 쓰기) 또는 잠금을 사용하지 않는 경우 종종 나타납니다. . 또는 파일 시스템 손상, 백업에서 잘못된 복원 또는 이와 유사한 원인으로 발생할 수 있습니다.
user222658
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.