在不关闭shell窗口的情况下自动重新添加别名

时间:2015-01-20 13:49:59

标签: zsh

我的别名存储在~/.zsh_aliases中,并来自~/.zshrc

# Access custom aliases in the shell
[ -e "${HOME}/.zsh_aliases" ] && source "${HOME}/.zsh_aliases"

但是,在更改别名的名称时,我必须始终关闭当前的shell窗口并打开一个新窗口,以使更改生效。

Zsh可以在更改时自动重新加载别名,使其无法关闭shell窗口吗?

3 个答案:

答案 0 :(得分:5)

您实际上并不需要关闭并重新打开终端,只需运行source ~/.zsh_aliases(加载新的和更改的别名)或者exec zsh(用新的替换当前的shell)工作也是。

如果您确实想要在修改时重新提供~/.zsh_aliases,我建议您将以下内容添加到~/.zshrc

# File containing aliases; 
ALIAS_FILE="${HOME}/.zsh_aliases

reload_aliases () {
    # do nothing if there is no $ALIAS_FILE
    [[ -e ALIAS_FILE ]] || return 1
    # check if $ALIAS_FILE has been modified since last reload
    # the modifier `(:A)` resolves any symbolic links
    if [[ $LAST_ALIAS_RELOAD < $(stat -c %Y ${ALIAS_FILE}(:A)) ]]; then
        # remove all aliases; optional!
        # only do this if all of your aliases are defined in $ALIAS_FILE
        # also affects aliases defined on the command line
        unalias -m '*'
        # load aliases
        source $ALIAS_FILE
        # update date of last reload
        LAST_ALIAS_RELOAD=$(date +%s)
    fi
}

# make reload_aliases to be run before each prompt
autoload -Uz add-zsh-hook
add-zsh-hook precmd reload_aliases

请注意,任何更改只会在新提示中提供。这意味着,如果您修改~/.zsh_aliases,则需要在所有终端中至少按 Enter 一次,以使更改生效。

答案 1 :(得分:2)

我使用别名,因此: -

alias vialias='vi ~/.oh-my-zsh/custom/alias.zsh ; source ~/.oh-my-zsh/custom/alias.zsh'

当我运行vialias时,我编辑了别名,然后当我离开vi时,更改生效。

答案 2 :(得分:0)

为了简化接受的答案添加

source ~/.zsh_aliases

plugins 部分下方的 ~/.zshrc 中。

然后在 ~/.zsh_aliases添加一个别名,如下所示:

alias f="exec zsh"

要刷新 zsh 和别名,请键入 f