关于 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%}"

问题解决。

Prev
2024-12-14 09:12:34
Next