如何让zsh从历史记录中排除某些命令?

如何让zsh从历史记录中排除某些命令?,zsh,zshrc,Zsh,Zshrc,比如说,包括“生产”这个词的那些 将上述内容放入一个将在interactive shell启动时来源的文件(到.zshrc或一个像我一样来源于.zshrc的文件) 替代形式(隐式添加到历史记录中): 。注: print -sr -- "${1%%$'\n'}" 显式地将项目添加到历史记录中。但是,如果zshaddhistory返回的退出代码为零,那么zsh也会隐式执行同样的操作,因此,如果没有fc-p和setopt nohistignoredups nohistignorealldups(默认

比如说,包括“生产”这个词的那些

将上述内容放入一个将在interactive shell启动时来源的文件(到
.zshrc
或一个像我一样来源于
.zshrc
的文件)

替代形式(隐式添加到历史记录中):

。注:

print -sr -- "${1%%$'\n'}"
显式地将项目添加到历史记录中。但是,如果
zshaddhistory
返回的退出代码为零,那么zsh也会隐式执行同样的操作,因此,如果没有
fc-p
setopt nohistignoredups nohistignorealldups
(默认状态),您将在历史中看到不需要的重复项


emulate-L zsh
用于确保仿真设置不会介入并更改函数体的解释。我把这一行放在我在zsh配置中定义的每个函数的开头。

这对我不起作用。。。我试过很多排列。我还测试了分支是否正确输入(如果条件正确,
)。但该命令仍被载入历史。但这是可行的:
zshaddhistory(){[[$1!=*production*]]}
@johnbachir我犯了一个错误:我认为
fc-p
与向历史添加命令有关(现在根本不确定它在这里做什么)。您的变体可以工作,因为根据帮助
,如果任何钩子函数返回非零值,历史记录行将不会保存,尽管在执行下一行之前它会一直保留在历史记录中,但允许您立即重用或编辑它。
。您能解释一下为什么首先需要打印
fc
?我刚刚自己测试了它,它看起来像一行(触发了
zshaddhistory
s调用)将在该函数返回0后自动添加到历史记录中。@Julian您可能需要删除这些行,或者同时使用
print-sr
fc-p
fc-p
是必需的,因为否则
print
将生成一个重复条目(如果设置了HIST_IGNORE_DUPS选项,则该条目将被删除,因此大多数时候您不会看到它)。也就是说,我的代码显式地将条目添加到历史记录中,将其删除或替换为
返回0
将隐式地执行相同的操作。@Julian我用更多的解释更新了答案。
function zshaddhistory() {
    emulate -L zsh
    if [[ $1 = *"production"* ]] ; then
        return 1
    fi
}
print -sr -- "${1%%$'\n'}"