who*_*ver 6 shell zsh environment-variables
在$HOSTNAME为您设置的 Bash 中,我只需使用以下内容即可计算提示行的总长度:
PS1_length=$((${#USER}+${#HOSTNAME}+${#PWDNAME}+12+${#PS1_GIT}))
这很有用,例如在创建这样的填充线时: 
但是zsh无法$HOSTNAME正确设置,我想不出一种方法来模拟其中的类似行为 - 有什么想法吗?
zsh 提示扩展使您无需进行任何计算即可执行该提示:
PS1='%$COLUMNS>?>%F{cyan}??%F{red}[%n]%F{cyan}:%F{yellow}[%m]%F{cyan}?%F{green}[%~]%F{default}$PS1_GIT%F{cyan}${(l:COLUMNS::?:):-}%<<
???%F{default}'
Run Code Online (Sandbox Code Playgroud)
解释:
%$COLUMNS>?>: 右截断到$COLUMNS(由zsh终端宽度动态设置的变量)直到下一个%<<.%F{color}: 设置前景色%n, %m, %~: 用户名、机器名(主机名到第一个点)、当前目录和~-named-dirs。${(l:COLUMNS::?:):-}:用字符左填充空字符串 ( ${:-}) 到$COLUMNS长度?。%m就像${HOST%%.*}. 如果您需要完整的主机名 ( $HOST),请%M改用。
你应该只设置
HOSTNAME=$(hostname)
Run Code Online (Sandbox Code Playgroud)
在你的 ~/.zshrc
或者正如 Caleb 指出的那样,有一个变量 HOST 集,因此为了保持提示可移植,您还可以执行以下操作:
HOSTNAME=$HOST
Run Code Online (Sandbox Code Playgroud)