zsh提示符和主机名

Zol*_*ing 8 shell zsh hostname zshrc

我在.zshrc中使用以下提示符:

PROMPT="%{$fg[magenta]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[yellow]%}%1~ %{$reset_color%}%# "
Run Code Online (Sandbox Code Playgroud)

当我打开终端时,我看到了这个提示:

zoltan@zoltan-Macbook-Pro ~ %
Run Code Online (Sandbox Code Playgroud)

是否可以在主机名中删除文本"zoltan"?我想让它看起来像这样:

zoltan@Macbook-Pro ~ %
Run Code Online (Sandbox Code Playgroud)

任何建议将不胜感激.谢谢!

che*_*ner 8

这有点乱,但你可以假装%m是一个参数并使用参数扩展来剥离zoltan主机名:

PROMPT="...${${(%):-%m}#1} ..."
Run Code Online (Sandbox Code Playgroud)

一点解释.首先,创建一个实际上没有参数名称的"参数"扩展; 它只是使用您提供的文本作为"值":

${:-%m}
Run Code Online (Sandbox Code Playgroud)

接下来,添加%扩展标志,以便处理在值中找到的任何提示转义.

${(%):-%m}
Run Code Online (Sandbox Code Playgroud)

最后,在最后一个扩展中,它使用#运算符从字符串中删除前缀:

${${(%):-%m}#zoltan-}
Run Code Online (Sandbox Code Playgroud)

你可以通过逐个构建来驯服你的提示(并使用zsh's prompt escapes来处理颜色变化,而不是显式嵌入终端控制序列).

PROMPT="%F{magenta}%n%f"  # Magenta user name
PROMPT+="@"
PROMPT+="%F{blue}${${(%):-%m}#zoltan-}%f" # Blue host name, minus zoltan
PROMPT+=" "
PROMPT+="%F{yellow}%1~ %f" # Yellow working directory
PROMPT+=" %# "
Run Code Online (Sandbox Code Playgroud)


vin*_*dgy 5

如果您使用的是OhMyZsh,则如果要在PS1 / PROMPT中使用用户名和主机名,则在.zshrc的底部添加一行。

export PROMPT='%(!.%{%F{yellow}%}.)$USER@%{$fg[white]%}%M ${ret_status} %{$fg[cyan]%}%c%{$reset_color%} $(git_prompt_info)'
Run Code Online (Sandbox Code Playgroud)

请享用 ;)