我使用下面的代码片段来排除所有失败的命令(返回代码 1)保存到 zsh 历史记录:
zshaddhistory() { whence ${${(z)1}[1]} >| /dev/null || return 1 }
但如果该命令是别名lsl
(alias lsl='ls -l'),失败的命令仍将被插入到 zsh 历史记录中:
lsl whatever_folder_doesnt_exist
whatever_folder_doesnt_exist
不存在,而且我lsl whatever_folder_doesnt_exist
仍然在 zsh 历史中观察到。
这里我想排除所有返回码不是的命令0
,我该怎么做?
答案1
您可以使用插件zsh-hist
设置一个precmd
钩子,从历史记录中删除最后一项(如果它具有非零退出状态):
source path/to/zsh-hist.plugin.zsh
delete-failed-history() {
(( ? )) &&
hist -s d -1
}
autoload -Uz add-zsh-hook
add-zsh-hook precmd delete-failed-history
如果您希望它仅删除具有1
确切退出状态的命令,则更(( ? ))
改为(( ? == 1 ))
.