将函数导入 PS1 (Zsh)?

Dan*_*ark 19 zsh prompt

这适用于bashparse_git_branch是一个定义的函数)

export PS1="\$(parse_git_branch)"
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚zsh.

注意:如果我这样做

PROMPT="$(parse_git_branch)"
Run Code Online (Sandbox Code Playgroud)

它似乎有效,但实际上在我设置提示时它正在运行命令,这不是重点。

aki*_*ira 29

你必须包括

setopt PROMPT_SUBST
Run Code Online (Sandbox Code Playgroud)

在你的.zshrc,man zshallPROMPT EXPANSION部分解释它:

如果设置了 PROMPT_SUBST 选项,则提示字符串首先进行参数扩展、命令替换和算术扩展。


小智 17

实际上,您的问题不仅仅是设置PROMPT_SUBST:您在脚本中使用双引号强制在设置PROMPT变量时对函数进行评估。您只需要在计算提示时进行评估,即您必须使用单引号。


Dan*_*ark 7

正如 akira 所说,你必须使用 prompt subst。这是我的早期代码(仍在研究中):

setopt PROMPT_SUBST
PROMPT='$(parse_git_branch)'
Run Code Online (Sandbox Code Playgroud)

或更好

setopt PROMPT_SUBST
PROMPT='[$PR_MAGENTA%n$PR_NO_COLOR@$PR_GREEN%U%m%u$PR_NO_COLOR:$PR_RED%2c$PR_NO_COLOR]$(parse_git_branch) %(!.#.$)'
Run Code Online (Sandbox Code Playgroud)