我想只显示当前目录的前两个字母。
我试过
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
。