I set my $HISTFILE env var to something custom, and my zsh is indeed writing to the new histfile.But when using up-arrow or other history-searching capabilities, it still reads from ~/.zsh_history.Ie if I open a new shell, and press up-arrow directly, I will get the last line written to ~/.zsh_history :(I use oh-my-zsh (with osx brew celery gem git-flow npm pip screen vi-mode last-working-dir docker), and here are the setopts that I use:# zsh options#Initialsetopt appendhistory autocd beep extendedglob nomatch notify#historyHISTSIZE=100000000SAVEHIST=100000000setopt HIST_IGNORE_SPACEsetopt extended_historysetopt hist_expire_dups_firstsetopt hist_ignore_dups # ignore duplication command history listsetopt hist_ignore_spacesetopt hist_verifysetopt inc_append_historysetopt share_history # share command history data#dirssetopt autopushd pushdminus pushdsilent pushdtohome pushdignoredupssetopt auto_name_dirs#appearancesetopt multiossetopt cdablevarSsetopt prompt_subst#miscsetopt long_list_jobs#correctionsetopt correct_all#completionsetopt auto_menu         # show completion menu on succesive tab presssetopt complete_in_wordsetopt completealiasessetopt always_to_end#symlsetopt chaselinks#stop pissing me off when using ! in lineunsetopt banghist    # The following lines were added by compinstallzstyle :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-linezle -N edit-command-linebindkey -M vicmd 'v' edit-command-line# create a zkbd compatible hash;# to add other keys to this hash, see: man 5 terminfotypeset -A keykey[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-charbindkey '^H' backward-delete-charbindkey -M vicmd '^H' backward-delete-charbindkey ^? backward-delete-charbindkey -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-forwardbindkey -M vicmd 'h'  backward-charbindkey -M vicmd 'l'  forward-charbindkey -M vicmd '^R' redobindkey -M vicmd 'u'  undobindkey -M vicmd 'ga' what-cursor-positionbindkey -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-finishfi
zsh HISTFILE - still read from ~/.zsh_history
shell;zsh;command history;oh my zsh
Setting HISTFILE in your zsh configuration really should change to where the history is written and from where it is read. It is likely that oh-my-zsh sets HISTFILE=~/.zsh_history before you set it, in which case the history has already been read from ~/.zsh_history.Looking at the oh-my-zsh code, there are two ways to solve this:set HISTFILE before loading oh-my-zsh. That is, it has to be set in your ~/.zshrc before the line containingsource $ZSH/oh-my-zsh.shThis would be a simple solution, if you only want to change HISTFILE.overload the history.zsh module with your own custom version. Oh-my-zsh loads all files matching $ZSH/lib/*.zsh (where $ZSH usually is ~/.oh-my-zsh) at startup, unless in ${ZSH_CUSTOM}/lib/ is a file with the same name (ZSH_CUSTOM usually is $ZSH/custom). The history settings can be found in $ZSH/lib/history.zsh and can therefore replaced by ${ZSH_CUSTOM}/lib/history.zsh.If you want to change more of the settings found in $ZSH/lib/history.zsh this is probably the way to go. Otherwise you would have to set HISTFILE before loading oh-my-zsh and everything else after.A way to change HISTFILE (temporarily) later in a shell session isfc -p /path/to/new_historyThis puts the current history on a stack, sets HISTFILE=/path/to/new_history and reads the history from that file (if it exists). Any new commands will then also be written to the new HISTFILE. You can go back to the original history with fc -P. 