laj*_*rre 6 shell command-history zsh oh-my-zsh
我将我的$HISTFILEenv var设置为自定义的东西,我的 zsh 确实正在写入新的 histfile。
但是当使用向上箭头或其他历史搜索功能时,它仍然从 ~/.zsh_history 读取。
即如果我打开一个新的外壳,然后直接按向上箭头,我会将最后一行写入~/.zsh_history:(
我使用 oh-my-zsh (with 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
Run Code Online (Sandbox Code Playgroud)
Ada*_*hon 11
HISTFILE您的 zsh 配置中的设置确实应该更改为写入历史记录的位置和读取历史记录的位置。它是可能的哦,我的-zsh的套HISTFILE=~/.zsh_history设置之前,在这种情况下,历史已经被读出~/.zsh_history。
查看oh-my-zsh代码,有两种方法可以解决这个问题:
HISTFILE在加载oh-my-zsh之前设置。也就是说,它必须设置在你~/.zshrc包含的行之前
source $ZSH/oh-my-zsh.sh
Run Code Online (Sandbox Code Playgroud)
如果您只想更改HISTFILE.
history.zsh使用您自己的自定义版本重载模块。Oh-my-zsh在启动时加载所有匹配的文件$ZSH/lib/*.zsh($ZSH通常是~/.oh-my-zsh),除非 in${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稍后在 shell 会话中更改(临时)的一种方法是
fc -p /path/to/new_history
Run Code Online (Sandbox Code Playgroud)
这会将当前历史记录放在堆栈上,HISTFILE=/path/to/new_history从该文件(如果存在)中设置和读取历史记录。任何新命令也将写入新的HISTFILE. 您可以使用 返回原始历史记录fc -P。
| 归档时间: |
|
| 查看次数: |
10113 次 |
| 最近记录: |