$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
HISTFILE
zsh 구성의 설정은 실제로 기록이 기록되는 위치로 변경되어야 합니다.그리고읽을 수 있는 곳. 어쩌면 그게 다야아 맙소사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
.