zsh 提示符和主机名

zsh prompt and hostname

我在.zshrc中使用如下提示:

PROMPT="%{$fg[magenta]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[yellow]%}%1~ %{$reset_color%}%# "

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

zoltan@zoltan-Macbook-Pro ~ %

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

zoltan@Macbook-Pro ~ %

如有任何建议,我们将不胜感激。谢谢!

有点乱,但是你可以假装%m是一个参数并使用参数扩展从主机名中去掉zoltan

PROMPT="...${${(%):-%m}#1} ..."

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

${:-%m}

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

${(%):-%m}

最后,接下来是使用 # 运算符从字符串中删除前缀的最终扩展:

${${(%):-%m}#zoltan-}

您可以一点一点地构建提示(并使用 zsh 的提示转义来处理颜色变化,而不是显式嵌入终端控制序列)。

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+=" %# "

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

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

尽情享受 ;)

我在自己的通用提示中偶然发现了这个问题和 from @chepner inspired me to remove the .local from the %M (fully qualified machine hostname)。

在他们的案例中,他们做了:

${${(%):-%m}#zoltan-}

就我而言,我做了:

${${(%):-%M}%.local}

注意:

在shellsubstring removal

  • # 表示“从左边开始trim”
  • % 表示“从右边开始trim”

你可以记住哪个是哪个,因为 #%$ 的左边和右边,$ 是你用于 ${parameter_substitution) 的字符。

在我的例子中,我在 .zshrc 中设置了 PS1。查找“%m”——这对应于您在提示中看到的主机名。把它换成你想要的。让我用自定义替换“%m”。


autoload -U colors && colors
PS1="%{$fg[green]%}%n%{$reset_color%}@%{$fg[cyan]%}%m %{$fg[yellow]%}%~ %{$reset_color%}%% "

autoload -U colors && colors
PS1="%{$fg[green]%}%n%{$reset_color%}@%{$fg[cyan]%}CUSTOM %{$fg[yellow]%}%~ %{$reset_color%}%% "