配置 zsh 提示符以仅显示当前目录的前 2 个字母

配置 zsh 提示符以仅显示当前目录的前 2 个字母

我想只显示当前目录的前两个字母。

我试过

PROMPT="%1d %# "

它将当前目录显示为directory1.但是,将目录的子集作为前两个字符并zsh在 MacOS 中显示为提示符是我迷失的地方。

我如何只获取前两个字符,即di而不是directory1作为zsh提示符?

答案1

您可以使用%2>...>截断运算符来截断%1~(当前工作目录的最后一个表示~形式),或者%1d如果您不需要波浪号表示形式:

$ PROMPT='before %2>>%1~%>> after%# '
before ~ after% cd /usr/local
before lo after% cd ~sys
before ~s after%

或者表明存在一些截断:

$ PROMPT='before %3>✀>%1d%>> after%# '
before ch✀ after% cd /usr/local
before lo✀ after% cd /
before / after%

答案2

尝试这个:

setopt promptsubst
PROMPT='${${(%):-%1d}[1,2]}%#'

这是一组嵌套zsh扩展,一开始阅读起来可能有点困难。部分作品:

  • setopt promptsubst- 启用此功能后,zsh将展开${..}提示中的 s。
  • PROMPT='...'- 设置提示。单引号很重要;我们不想${...}稍后评估扩展。
  • %#-#如果是root,%否则。
  • ${:-...}- 这是一种将常量字符串 ( %1d) 放入嵌套扩展中的方法。
  • ${(%)...}- 百分比序列作为提示序列进行处理。我们需要这个,因为${...}扩展使我们从“即时世界”进入“正常变量世界”。
  • %1d- 当前目录的最后一个组成部分。对于/a/b/c/ddd,这将是ddd
  • ${...[1,2]}- 字符串中的前两个字符。请注意,数组zsh以索引开头1

更多的 信息在里面zsh文档

相关内容