为什么 zsh 在 OS X 上错误地列出了我的提示符?

为什么 zsh 在 OS X 上错误地列出了我的提示符?

我试图找出为什么 zsh 的提示符如下所示:

zsh 提示示例

(以文字形式):

\[\]\u\[\] at \[\]\h\[\] in \[\]\w\[\]$(__git_ps1) \[\]$(git_diff)\n\[\]($(date +'1:MikesMBP.local ')) \[\]$\[\]

我希望它在调用 zsh 之前正常列出我的密码和用户名,就像在 bash 中那样。这是我的 .zshrc:

# Lines configured by zsh-newuser-install
HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000
setopt appendhistory autocd beep extendedglob nomatch notify
bindkey -v
# End of lines configured by zsh-newuser-install
# The following lines were added by compinstall
zstyle :compinstall filename '/Users/mike/.zshrc'

autoload -Uz compinit
compinit
# End of lines added by compinstall

这只是第一次启动 zsh 时创建的标准配置。我尝试过内置的 OS X zsh 和 homebrew 的 zsh,它们都会产生相同的错误。您看到会导致这种情况的原因吗?

答案1

您在上一个 shell 中导出了变量 PS1,因此 zsh 继承它并使用该变量来显示提示符。这就是为什么您不应该导出像 PS* 这样的 shell 参数,如果不导出 PS1,zsh 将使用其默认提示符,直到您在 .zshrc 中更改 PS1 或使用提示符系统。

答案2

bash 使用\[\]标记提示中非打印的部分。

zsh 使用%{%}达到相同的目的。

xterm 手册有一节提到了这一点。

相关内容