【发布时间】:2022-01-12 03:28:55
【问题描述】:
目前,我的zshrc 看起来像这样
setopt prompt_subst # real time reevaluation of prompt
zmodload zsh/mathfunc # int function
function widthHelper() { echo $(( int(${COLUMNS:-80}) * ${1}/100)) } # calc $1% of prompt
outWidth='$(widthHelper 40)'
inWidth='$(widthHelper 90)'
export PROMPT="%F{cyan}%${outWidth}<◀︎<%f" # truncation based on terminal width
PROMPT+="%(l." # inner truncation group
PROMPT+="%F{cyan}%8>‣>%n%>>%f" # username truncated
PROMPT+="%-${inWidth}(l. %F{blue}%5>‣>%m%>>%f.) " # hostname truncated
PROMPT+=".)" # end truncation
PROMPT+="%F{magenta}%1~%f%<< " # pwd 1 depth
PROMPT+="%# " # privilege group
influenced by this question 和 my other question
目前正在按预期工作
- 它将主机名和用户名截断为常量值
- 它会根据
widthHelper()动态截断整个 PROMPT,这使我可以调整终端大小并动态截断 PROMPT
目前,我有这条线工作,但不是以预期的方式
PROMPT+="%-${inWidth}(l. %F{blue}%5>‣>%m%>>%f.) " # hostname truncated
我想要什么
我想让主机名的显示依赖于整个PROMPT的长度,而不只依赖于当前终端的宽度COLUMNS.
即如果我输入一个名称很长的目录在开始截断整个提示之前,我希望主机名消失。但我确实希望两者都按此顺序发生
- 主机名会消失(这种情况会发生,但不取决于
PROMPT的长度,而是取决于整个终端的宽度,COLUMNS) - 整个提示将开始在左侧截断(目前有效)
示例
如果我在 ~ 目录中,然后移动到具有长名称 ~/abcdefghijklmnopqrstuvwxyzabcd 的目录中,我希望主机名消失,但发生的情况是我的提示首先被截断。
william‣ wmbp‣ ~ %
william‣ wmbp‣ ~ % cd abcdefghijklmnopqrstuvwxyzabcd
◀︎m‣ wmbp‣ abcdefghijklmnopqrstuvwxyzabcd %
我想要什么
william‣ wmbp‣ ~ %
william‣ wmbp‣ ~ % cd abcdefghijklmnopqrstuvwxyzabcd
william‣ abcdefghijklmnopqrstuvwxyzabcd %
如果我可以让# hostname truncated 行依赖于PROMPT 长度,那么我可以解决这个问题。
tldr
如何根据我当前的PROMPT 的持续时间来删除我的PROMPT 的一部分。
【问题讨论】:
标签: linux macos terminal zshrc ps1