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
相关产品推荐
相关产品推荐

