如何解决git目录外时,不同的zsh终端提示
有人知道怎么做吗?当我不在git目录中时,我需要/想要正确的提示来显示时间,而当我在git目录中时,我希望它显示分支。
这是我使用的配置extracted from git doc:
autoload -Uz vcs_info
precmd_vcs_info() { vcs_info }
precmd_functions+=( precmd_vcs_info )
setopt prompt_subst
RPROMPT=\$vcs_info_msg_0_
zstyle ':vcs_info:git:*' formats '%b'
但是要在git dir之外使用RPROMPT="%*"
。
解决方法
一种方法是将所有内容放入自己的precmd函数中。这是一个示例(将此添加到~/.zshrc
中):
my_precmd() {
vcs_info
psvar[1]=$vcs_info_msg_0_
if [[ -z ${psvar[1]} ]]; then
psvar[1]=${(%):-%*}
fi
}
autoload -Uz vcs_info
zstyle ':vcs_info:git:*' formats '%b'
autoload -Uz add-zsh-hook
add-zsh-hook precmd my_precmd
RPROMPT=%1v
一些注意事项:
-
vcs_info
调用内置的zsh来设置$vcs_info_msg_0_
。 -
zstyle ...
配置来自vcs_info
的结果。 -
psvar[1]
psvar
数组是一组特殊变量,可以在提示(%1v
)中轻松引用。 -
if [[ -z ${psvar[1]} ]]
测试是否由vcs_info
设置了任何内容;如果结果为零长度,请改用时间。 -
${(%):-%*}
获取时间。有几段内容:(%)
表示像提示中那样替换百分比转义符,:-
用于创建替换的匿名变量,而%*
是设置转义符的提示转义符。时间。 -
add-zsh-hook ...
将my_precmd
添加到precmd挂钩中,因此它将在每个提示之前被调用。比直接设置precmd_functions
更好。 -
RPROMPT=%1v
设置右侧提示以始终显示psvar[1]
的值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。