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



比如那些包含"production"这个词的?

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'}"

显式地将item添加到历史记录中。但是,如果zshaddhistory返回零退出代码,zsh也会隐式地做同样的事情,因此没有fc -psetopt nohistignoredups nohistignorealldups(这是默认状态),您将在历史记录中看到不必要的重复。

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

最新更新