$HISTFILE
env varをカスタムに設定しましたが、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
Zsh構成でHISTFILE
を設定すると、実際には履歴が書き込まれる場所に変更されますおよび読み取り元に変更されます。 oh-my-zsh設定する前に_HISTFILE=~/.zsh_history
_を設定している可能性があります。この場合、履歴は_~/.zsh_history
_から既に読み取られています。
oh-my-zshコードを見ると、これを解決する2つの方法があります。
ロードする前にHISTFILE
を設定しますoh-my-zsh。つまり、次の行の前に_~/.zshrc
_で設定する必要があります
_source $ZSH/oh-my-zsh.sh
_
HISTFILE
のみを変更したい場合、これは簡単な解決策になります。
_history.zsh
_モジュールを独自のカスタムバージョンでオーバーロードします。 Oh-my-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
を設定する必要がありますoh-my-zshおよびその後のすべて。
シェルセッションの後半でHISTFILE
を(一時的に)変更する方法は次のとおりです。
_fc -p /path/to/new_history
_
これにより、現在の履歴がスタックに配置され、_HISTFILE=/path/to/new_history
_が設定され、そのファイルから履歴が読み取られます(存在する場合)。新しいコマンドはすべて、新しいHISTFILE
にも書き込まれます。 _fc -P
_で元の履歴に戻ることができます。