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

