zsh prompt and hostname
Solution 1
It's a bit of a mess, but you can pretend the %m
is a parameter and use parameter expansion to strip the zoltan
from the host name:
PROMPT="...${${(%):-%m}#1} ..."
A little explanation. First, you create a "parameter" expansion that doesn't actually have a parameter name; it just uses the text you provide as the "value":
${:-%m}
Next, add the %
expansion flag so that any prompt escapes found in the value are processed.
${(%):-%m}
Finally, next it in a final expansion that uses the #
operator to remove a prefix from the string:
${${(%):-%m}#zoltan-}
You can tame your prompt a bit by building up piece by piece (and use zsh
's prompt escapes to handle the color changes, rather than embedding terminal control sequences explicitly).
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+=" %# "
Solution 2
If you're using OhMyZsh, this is one line to add at the bottom of you .zshrc if you want the user and hostname in your PS1/PROMPT :
export PROMPT='%(!.%{%F{yellow}%}.)$USER@%{$fg[white]%}%M ${ret_status} %{$fg[cyan]%}%c%{$reset_color%} $(git_prompt_info)'
Enjoy ;)
Solution 3
I stumbled upon this question and the wonderfully informative answer from @chepner inspired me to remove the .local
from the %M
(fully qualified machine hostname) in my own universal prompt.
In their case, they did:
${${(%):-%m}#zoltan-}
In my case, I did:
${${(%):-%M}%.local}
NOTE:
In shell substring removal
-
#
means "trim from the left" -
%
means "trim from the right"
You can remember which is which because #
and %
are on the left and right of $
which is the char you use for ${parameter_substitution)
.
Solution 4
In my case, I had PS1 set in .zshrc. Look for '%m' - this corresponds to the hostname that you see in the prompt. Replace it what you want. Let me replace '%m' with CUSTOM.
OLD
autoload -U colors && colors
PS1="%{$fg[green]%}%n%{$reset_color%}@%{$fg[cyan]%}%m %{$fg[yellow]%}%~ %{$reset_color%}%% "
NEW
autoload -U colors && colors
PS1="%{$fg[green]%}%n%{$reset_color%}@%{$fg[cyan]%}CUSTOM %{$fg[yellow]%}%~ %{$reset_color%}%% "
Related videos on Youtube
Zoltan King
Updated on July 11, 2022Comments
-
Zoltan King almost 2 years
I use the following prompt in .zshrc:
PROMPT="%{$fg[magenta]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[yellow]%}%1~ %{$reset_color%}%# "
When I open terminal I see this prompt:
zoltan@zoltan-Macbook-Pro ~ %
Is it possible to drop the text "zoltan" in the hostname? I would like to make it look like this:
zoltan@Macbook-Pro ~ %
Any suggestion would be greatly appreciated. Thank you!
-
twalberg about 9 yearsPerhaps change the hostname of your system?
%m
is "The hostname up to the first '.'" An alternative might be to define another variable with the value you want, and reference that instead of%m
...
-
-
Andrew over 4 yearsThanks for colors syntaxis, I finished one line prompt: (no oh-my-zsh):
export PROMPT="%F{magenta}%n%f@%F{blue}${${(%):-%m}#zoltan-}%f %F{yellow}%1~ %F{white}"
-
Bruno Bronosky about 3 yearsI took your answer and ran with it. stackoverflow.com/a/66462684/117471 I included many links to documentation. Thanks for the inspiration! ☮️❤️🌈