zsh HISTFILE - ~/.zsh_history에서 아직 읽는 중

zsh HISTFILE - ~/.zsh_history에서 아직 읽는 중

$HISTFILE환경 변수를 사용자 정의 값으로 설정했고 zsh가 실제로 새 histfile을 작성하고 있습니다 .

그러나 위쪽 화살표나 기타 기록 검색 기능을 사용하는 경우여전히 ~/.zsh_history에서 읽습니다..

즉, 새 셸을 열고 위쪽 화살표를 누르면 마지막 줄을 쓰게 됩니다.~/.zsh_history:(

나는 oh-my-zsh (와 함께 osx brew celery gem git-flow npm pip screen vi-mode last-working-dir docker)를 사용하며 다음은 내가 사용하는 setopts입니다.

# zsh options
#Initial
setopt appendhistory autocd beep extendedglob nomatch notify
#history
HISTSIZE=100000000
SAVEHIST=100000000
setopt HIST_IGNORE_SPACE
setopt extended_history
setopt hist_expire_dups_first
setopt hist_ignore_dups # ignore duplication command history list
setopt hist_ignore_space
setopt hist_verify
setopt inc_append_history
setopt share_history # share command history data
#dirs
setopt autopushd pushdminus pushdsilent pushdtohome pushdignoredups
setopt auto_name_dirs
#appearance
setopt multios
setopt cdablevarS
setopt prompt_subst
#misc
setopt long_list_jobs
#correction
setopt correct_all
#completion
setopt auto_menu         # show completion menu on succesive tab press
setopt complete_in_word
setopt completealiases
setopt always_to_end
#syml
setopt chaselinks
#stop pissing me off when using ! in line
unsetopt banghist    

# The following lines were added by compinstall
zstyle :compinstall filename '/Users/alex/.zshrc'

# Already in ohmyzsh
#autoload -Uz compinit
#compinit
# End of lines added by compinstall

########
# Key bindings, vi, etc.
autoload -U edit-command-line
zle -N edit-command-line
bindkey -M vicmd 'v' edit-command-line

# create a zkbd compatible hash;
# to add other keys to this hash, see: man 5 terminfo
typeset -A key

key[Home]=${terminfo[khome]}
key[BackSpace]=${terminfo[kbs]}
key[End]=${terminfo[kend]}
key[Insert]=${terminfo[kich1]}
key[Delete]=${terminfo[kdch1]}
key[Up]=${terminfo[kcuu1]}
key[Down]=${terminfo[kcud1]}
key[Left]=${terminfo[kcub1]}
key[Right]=${terminfo[kcuf1]}
key[PageUp]=${terminfo[kpp]}
key[PageDown]=${terminfo[knp]}

# setup key accordingly
[[ -n "${key[Home]}"    ]]  && bindkey  "${key[Home]}"    beginning-of-line
[[ -n "${key[BackSpace]}" ]]  &&  bindkey "${key[BackSpace]}" backward-delete-char
[[ -n "${key[BackSpace]}" ]] &&  bindkey -M vicmd "${key[BackSpace]}" backward-delete-char
bindkey '^H' backward-delete-char
bindkey -M vicmd '^H' backward-delete-char
bindkey "^?" backward-delete-char
bindkey -M vicmd "^?" backward-delete-char
[[ -n "${key[End]}"     ]]  && bindkey  "${key[End]}"     end-of-line
[[ -n "${key[Insert]}"  ]]  && bindkey  "${key[Insert]}"  overwrite-mode
[[ -n "${key[Delete]}"  ]]  && bindkey  "${key[Delete]}"  delete-char
[[ -n "${key[Delete]}"  ]]  && bindkey -M vicmd "${key[Delete]}"  delete-char

[[ -n "${key[Left]}"    ]]  && bindkey  "${key[Left]}"    backward-char
[[ -n "${key[Right]}"   ]]  && bindkey  "${key[Right]}"   forward-char

[[ -n "${key[Up]}"   ]]  && bindkey  "${key[Up]}"    history-beginning-search-backward && bindkey -M vicmd "${key[Up]}"    history-beginning-search-backward
[[ -n "${key[Down]}" ]]  && bindkey  "${key[Down]}"  history-beginning-search-forward && bindkey -M vicmd "${key[Down]}"  history-beginning-search-forward

bindkey -M vicmd 'h'  backward-char
bindkey -M vicmd 'l'  forward-char
bindkey -M vicmd '^R' redo
bindkey -M vicmd 'u'  undo
bindkey -M vicmd 'ga' what-cursor-position
bindkey -M vicmd 'v'  edit-command-line


# Finally, make sure the terminal is in application mode, when zle is
# active. Only then are the values from $terminfo valid.
if (( ${+terminfo[smkx]} )) && (( ${+terminfo[rmkx]} )); then
    function zle-line-init () {
        printf '%s' "${terminfo[smkx]}"
    }
    function zle-line-finish () {
        printf '%s' "${terminfo[rmkx]}"
    }
    zle -N zle-line-init
    zle -N zle-line-finish
fi

답변1

HISTFILEzsh 구성의 설정은 실제로 기록이 기록되는 위치로 변경되어야 합니다.그리고읽을 수 있는 곳. 어쩌면 그게 다야아 맙소사HISTFILE=~/.zsh_history설정하기 전에 설정합니다. 이 경우 이력은 에서 읽혀집니다 ~/.zsh_history.

보고 있다아 맙소사코드에는 이 문제를 해결하는 두 가지 방법이 있습니다.

  • HISTFILE로딩 전 설정아 맙소사. 즉, 다음을 ~/.zshrc포함하는 줄 앞에 설정해야 합니다.

    source $ZSH/oh-my-zsh.sh
    

    단지 변경하고 싶다면 HISTFILE이것이 쉬운 해결책이 될 것입니다.

  • history.zsh자신만의 사용자 정의 버전으로 모듈을 오버로드하세요.아 맙소사일반적으로 같은 이름의 파일이 아닌 경우 시작 시(일반적으로) 일치하는 모든 파일을 로드 $ZSH/lib/*.zsh합니다 $ZSH. 기록 설정은 에서 찾을 수 있으므로 로 바꿀 수 있습니다.~/.oh-my-zsh${ZSH_CUSTOM}/lib/ZSH_CUSTOM$ZSH/custom$ZSH/lib/history.zsh${ZSH_CUSTOM}/lib/history.zsh

    내부에 있는 더 많은 설정을 변경하려면 이것이 $ZSH/lib/history.zsh올바른 선택일 수 있습니다. 그렇지 않으면 HISTFILE로드하기 전에 설정 해야 합니다.아 맙소사그리고 그 이후의 모든 것.


HISTFILE나중에 쉘 세션에서 이를 (일시적으로) 변경하는 방법은 다음과 같습니다.

fc -p /path/to/new_history

그러면 현재 기록이 스택에 배치되고 HISTFILE=/path/to/new_history해당 파일이 있는 경우 해당 파일의 기록을 설정하고 읽습니다. 새로운 명령도 새로 작성됩니다 HISTFILE. 를 통해 원래 기록으로 돌아갈 수 있습니다 fc -P.

관련 정보