比如说,那些包含“production”一词的?
function zshaddhistory() {
emulate -L zsh
if [[ $1 != *"production"* ]] ; then
print -sr -- "${1%%$'\n'}"
fc -p
else
return 1
fi
}
.zshrc
或从.zshrc
引用的文件,就像我所做的那样)。function zshaddhistory() {
emulate -L zsh
if [[ $1 = *"production"* ]] ; then
return 1
fi
}
注意:
print -sr -- "${1%%$'\n'}"
明确地将项添加到历史记录。如果zshaddhistory
返回零退出码,则同样会由zsh隐式执行此操作,因此在没有fc -p
和setopt nohistignoredups nohistignorealldups
的情况下(这是默认状态),您将在历史记录中看到不必要的重复项。
emulate -L zsh
用于确保模拟设置不介入并更改函数体的解释。我在zsh配置中定义每个函数的开头都放置了此行。
if
条件是正确的)。但该命令仍然被记录在历史记录中。但这个可以:zshaddhistory() { [[ $1 != *production* ]] }
。 - John Bachirfc -p
与将命令添加到历史记录有关(现在不确定它在这里的作用是什么)。你的变体有效是因为根据帮助文档如果任何钩子函数返回非零值,则历史记录行将不会保存,尽管它在历史记录中保留,直到执行下一行,使您可以立即重用或编辑它。
- ZyXprint -sr
和 fc -p
。因为如果不使用 fc -p
,print
将会产生一个重复的条目(如果设置了 HIST_IGNORE_DUPS 选项,则该条目将被删除,因此大多数情况下您将看不到它)。也就是说,我的代码明确地向历史记录添加条目,删除它或用 return 0
替换它将隐式地执行相同的操作。 - ZyX${1%%$'\n'}
的原因。 - ZyX
zsh
可以选择性地排除一些以空格开头的命令/别名:https://superuser.com/q/352788/1067306 - cassepipe