关于 Oh-My-Zsh 自动补全字母重复问题
2024-12-14 09:12:34
问题大概是这样的:
- python3 前面补全多出了一个 p,并且这个 p 怎么也删不掉。
oh-my-zsh 在我的 shell 里放 p
我从网上看了好几篇文章,大部分都是说是因为编码问题,但是尝试里面的解决方法也无效。
然后我就看到了出现这个问题的原理:
1 | 主题配置文件中 % 的用法会导致 zsh 没能准确计算 PROMPT 的长度,所以在错误的位置输出了补全后的命令。 |
于是我打开了自己主题的配置文件:
- 注:oh-my-zsh 的主题配置文件在
your-install-path/.oh-my-zsh/theme
1 | PROMPT="%(?:%{$fg_bold[green]%}%1{%}:%{$fg_bold[red]%}%1{✗%})%{$fg[cyan]%}%c %{$reset_color%}" |
发现了问题所在:
这里的%1
实际是指%n{ ... %}
中的字符长度。而我的 PROMPT 中第一个%1
后面大括号中没有字符,所以问题就很明朗了。
将第一处%1{%}`改为`%{%}
:
1 | PROMPT="%(?:%{$fg_bold[green]%}%{%}:%{$fg_bold[red]%}%1{✗%})%{$fg[cyan]%}%c %{$reset_color%}" |
问题解决。