应检查并清除shell配置文件中冲突的prompt/ps1定义,启用starship的hostname模块并设ssh_only=true,禁用username模块,确保starship init语句位于.zshrc末尾且无插件干扰。

如果您在使用Starship终端提示符时发现用户名和主机名显示异常,例如本应禁用却仍持续出现 username@hostname 前缀,或希望精细控制其显示逻辑(如仅SSH连接时显示主机名、隐藏用户名等),则问题通常不源于Starship模块本身配置失效,而是受底层shell提示符变量(如Zsh的PROMPT)干扰。以下是解决此问题的具体步骤:
一、检查并清除shell配置文件中的冲突提示符定义
Starship通过接管shell的提示符渲染机制工作,但若您的.zshrc、.bashrc等配置文件中仍保留了原始的PROMPT或PS1赋值语句,将强制覆盖Starship的输出,导致用户名和主机名重复或错误显示。
1、打开对应shell配置文件:执行code ~/.zshrc(Zsh)或code ~/.bashrc(Bash)。
2、搜索包含PROMPT=、PS1=、%n@%m、\u@\h等模式的行。
3、将所有匹配的提示符赋值行注释掉或删除,例如将PROMPT="%{$fg[white]%}%n@%{$fg[green]%}%m%{$reset_color%} ${PROMPT}"整行前添加#。
4、保存文件后,在终端中执行source ~/.zshrc(或source ~/.bashrc)重载配置。
二、启用并精确配置Starship的hostname模块
Starship的hostname模块专用于控制主机名显示行为,支持SSH感知、别名映射与域名截断,是替代原始shell主机名显示的核心方案。
1、确保~/.config/starship.toml文件存在;若不存在,运行starship init zsh > ~/.config/starship.toml生成基础配置。
2、在文件末尾添加或修改[hostname]区块:
3、设置ssh_only = true使主机名仅在SSH会话中显示。
4、指定format = "$ssh_symbol$hostname "以自定义前缀符号(如?)与主机名组合方式。
5、通过aliases映射长主机名,例如"prod-server-01.example.com" = "prod-01"。
6、添加trim_at = ".local"自动截断本地网络域名后缀。
三、禁用Starship的username模块并验证生效条件
Starship默认启用username模块,但该模块具备智能触发逻辑:仅当当前用户与登录用户不一致(如使用sudo或su切换)时才显示用户名,避免常规会话冗余。若需彻底隐藏,必须显式禁用。
1、在~/.config/starship.toml中定位或新增[username]区块。
2、设置disabled = true关闭该模块。
3、确认未在其他位置(如[custom]模块中)意外复现用户名输出逻辑。
4、执行starship explain命令查看当前提示符各组件来源,验证username模块状态为disabled。
四、强制刷新Shell初始化链并排除缓存干扰
某些shell环境(尤其是Zsh + Oh My Zsh组合)可能因插件加载顺序或缓存机制导致Starship初始化未完全生效,需手动干预初始化流程以确保模块配置被正确读取。
1、在.zshrc中,确认eval "$(starship init zsh)"位于文件末尾且无其他提示符相关代码在其后执行。
2、若使用Oh My Zsh,检查~/.oh-my-zsh/custom/themes/下是否存在自定义主题文件,并确认其中未硬编码%n@%m等变量。
3、临时禁用所有Zsh插件:将plugins=()置空后重启终端,观察用户名/主机名是否消失。
4、若此时显示正常,则逐个启用插件,定位引发冲突的具体插件(常见为git、osx等含提示符修改逻辑的插件)。










