zsh 使用多行声明 PROMPT

zsh declare PROMPT using multiple lines

我想使用多行和注释来声明我的 ZSH 提示符,例如:

PROMPT="
    %n       # username
    @
    %m       # hostname
    \        # space
    %~       # directory
    $
    \        # space
"

(例如 perl 正则表达式的“忽略空白模式”)

我可以发誓我曾经做过这样的事情,但再也找不到那些旧文件了。我搜索了“zsh declare prompt across multiple lines”的变体,但还没有完全找到它。

我知道我可以使用 \ 来续行,但我们最终会得到换行符和空格。

编辑:也许我记错了评论 - 这是 example without comments

不完全是您要查找的内容,但您不需要在单个作业中定义 PROMPT

PROMPT="%n"    # username
PROMPT+="@%m"  # @hostname
PROMPT+=" %~"  # directory
PROMPT+="$ "

可能更接近您想要的是连接数组元素的能力:

prompt_components=(
   %n   # username
   " "  # space
   %m   # hostname
   " "  # space
   "%~"  # directory
   "$"
)
PROMPT=${(j::)prompt_components}

或者,您可以让 j 标志添加 space 分隔符,而不是将它们放在数组中:

# This is slightly different from the above, as it will put a space
# between the director and the $ (which IMO would look better).
# I leave it as an exercise to figure out how to prevent that.
prompt_components=(
 "%n@%m"  # username@hostname
 "$~"  # directory
 "$" 
)

PROMPT=${(j: :)prompt_components}