You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iTerm2环境下zsh提示符含emoji时文本不换行问题求解

问题根源

zsh计算提示符显示宽度时,会把所有未做特殊标记的字符都计入宽度,而颜色切换、加粗/取消加粗、样式重置这类控制序列本身不会在终端上占用显示宽度,就会导致终端对当前行剩余可输入空间计算错误,最终出现长文本不换行、覆盖提示符的问题。
你当前的PROMPT配置中,所有样式控制代码都没有加zsh要求的非打印字符包裹标记。

修复方案

你需要把所有非打印的控制字符都用%{和%}包裹,同时原配置中存在重复设置前景色的冗余逻辑$FG[040],可以直接删除,修改后的配置如下:

PROMPT='☕️ %{%B%F{#74A12E}%}%~%{%F{#6f4e37}%}$(git_prompt_info)%{%b $reset_color%}➜ '

额外优化建议

  • 如果修改后仍存在宽度计算异常,可以把开头的emoji用%{%G☕️%}格式包裹,强制指定emoji显示宽度为1单元格,避免部分终端对emoji宽度识别错误:
    PROMPT='%{%G☕️%} %{%B%F{#74A12E}%}%~%{%F{#6f4e37}%}$(git_prompt_info)%{%b $reset_color%}➜ '
    
  • 如果你自定义了git_prompt_info的输出格式,需要确认该函数返回内容里的所有颜色控制代码也都用%{...%}包裹,否则依旧会触发宽度计算错误。

内容的提问来源于stack exchange,提问作者just a user

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 23:36:03