在不关闭 shell window 的情况下自动重新加载别名
Reload aliases on change automatically without closing the shell window
我的别名存储在 ~/.zsh_aliases
中,来源是 ~/.zshrc
:
# Access custom aliases in the shell
[ -e "${HOME}/.zsh_aliases" ] && source "${HOME}/.zsh_aliases"
但是,当更改别名时,我必须始终关闭当前的 shell window 并打开一个新的才能使更改生效。
Zsh 能否在更改时自动重新加载别名以使它们可用而无需关闭 shell window?
您实际上不需要为此关闭并重新打开您的终端,只需 运行 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 才能使更改生效。
我使用别名,因此:-
alias vialias='vi ~/.oh-my-zsh/custom/alias.zsh ; source ~/.oh-my-zsh/custom/alias.zsh'
当我 运行 vialias 时,我编辑我的别名,然后当我离开 vi 时,更改生效。
为了简化已接受的答案添加:
source ~/.zsh_aliases
在 plugins 部分下面的 ~/.zshrc
中。
然后在~/.zsh_aliases
中添加一个别名,如下所示:
alias f="exec zsh"
要刷新 zsh 和别名类型 f
我的别名存储在 ~/.zsh_aliases
中,来源是 ~/.zshrc
:
# Access custom aliases in the shell
[ -e "${HOME}/.zsh_aliases" ] && source "${HOME}/.zsh_aliases"
但是,当更改别名时,我必须始终关闭当前的 shell window 并打开一个新的才能使更改生效。
Zsh 能否在更改时自动重新加载别名以使它们可用而无需关闭 shell window?
您实际上不需要为此关闭并重新打开您的终端,只需 运行 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 才能使更改生效。
我使用别名,因此:-
alias vialias='vi ~/.oh-my-zsh/custom/alias.zsh ; source ~/.oh-my-zsh/custom/alias.zsh'
当我 运行 vialias 时,我编辑我的别名,然后当我离开 vi 时,更改生效。
为了简化已接受的答案添加:
source ~/.zsh_aliases
在 plugins 部分下面的 ~/.zshrc
中。
然后在~/.zsh_aliases
中添加一个别名,如下所示:
alias f="exec zsh"
要刷新 zsh 和别名类型 f