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

时间:2011-08-03 23:34:21

标签: zsh zshrc

比如那些包含“生产”这个词的那些?

1 个答案:

答案 0 :(得分:4)

function zshaddhistory() {
    emulate -L zsh
    if [[ $1 != *"production"* ]] ; then
        print -sr -- "${1%%$'\n'}"
        fc -p
    else
        return 1
    fi
}

将上述内容放在交互式shell启动时(.zshrc或来自.zshrc的文件)的源文件中。

替代形式(隐含的历史补充):

function zshaddhistory() {
    emulate -L zsh
    if [[ $1 = *"production"* ]] ; then
        return 1
    fi
}

。注意:

print -sr -- "${1%%$'\n'}"

明确地将项目添加到历史记录中。但是,如果zshaddhistory返回零退出代码,则zsh隐含地执行zsh,因此如果没有fc -psetopt nohistignoredups nohistignorealldups(这是默认状态),您将在历史记录中看到不需要的重复项。

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