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