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

自定义zsh主题命令补全bug:按Tab后初始输入重复如何解决?

问题原因

zsh在计算提示符的实际显示宽度时,只会忽略被%{和%}包裹的非打印字符(比如颜色控制、字体格式控制的转义序列)。你的主题代码中所有颜色、粗体控制相关的转义符都没有用%{ %}包裹,zsh会错误地把这些控制字符的长度也算进提示符宽度,导致光标位置计算偏差,触发补全时输入内容重复的问题。

修复方案

修改你的.oh-my-zsh/custom/theme/leslie.zsh-theme文件,给所有非打印的控制字符加上%{和%}包裹,同时修正代码里的HTML转义字符,修改后的完整代码如下:

function get_pwd() {
  echo "${PWD/$HOME/~}"
}

function get_branch(){
  if git rev-parse --is-inside-work-tree > /dev/null 2>&1; then 
   echo -n "[$(git branch --show-current)]"
  fi
}

function put_spacing() {
  local termwidth  
  (( termwidth =  ${COLUMNS} - ${#$(get_pwd)} -11 - ${#user}  -  ${#$(get_branch)} ))
  local spacing=""
  for i in {1..$termwidth}; do
    spacing="${spacing} "
  done
  echo $spacing
}

local user=%n

PROMPT="%B%(?:%{$FG[128]%} :%{$FG[160]%} )"
PROMPT+='%{$fg[cyan]%}[$user]%b:  %{$fg[cyan]%}$(get_pwd)%{$reset_color%}$(put_spacing)%B%{$FG[128]%}$(get_branch)%b'
PROMPT+="%(?:%{$FG[128]%}:%{$FG[160]%})⮑  %{$reset_color%}"
验证方式

修改保存后执行source ~/.zshrc重新加载配置即可,再测试Tab补全就不会出现内容重复的问题。

内容的提问来源于stack exchange,提问作者leslie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:36:05