我在加载了 robbyrussell 主题的 Arch linux 中使用 oh-my-zsh。当我尝试使用制表符完成时,我最终会在提示中附加剩余字符。如果我删除自动完成的字符,剩余的字符不会删除。
例如,如果我输入:
~ /etc
然后选项卡,它变成
~ /e/etc/
与下面的选项列表。即使我删除/etc/
了,/e
我仍然坚持:
~ /e
我无法删除/e
. 我必须执行一个命令来摆脱剩余的字符。
知道这里发生了什么吗?
似乎我在语言环境配置和非 UTF8 配置方面遇到了问题
在我的情况下,修复是:
export LC_ALL="en_US.UTF-8"
并将其永久添加到 .zshrc:
echo "export LC_ALL=en_US.UTF-8" >> .zshrc
更多信息在 Ubuntu 文档https://help.ubuntu.com/community/Locale
正如 simont 所建议的,您使用的提示很可能正在使用不可打印的字符(如颜色转义码),但并不表示这些字符是不可打印的。因此,当重新绘制提示时,终端认为提示比实际更宽。
%{
您使用and%}
分隔符指示 zsh 提示符中的字符序列宽度为零。例如我的提示是:
%{%(?.%F{green}.%F{red})%}➜%{%f%}
这(?...)
是一个设置提示颜色的三元组,它已被标记为表示它是零宽度。以同样的方式%f
重置颜色并且也已标记。
您可以通过更新 PS1 变量来测试对提示的更改,这样您就可以尝试不同的安排,看看哪些对您有用。
你可以用这种方式标记任何字符,所以要小心不要让你的提示太短!
我遇到了同样的问题,所以在寻求解决方案时我遇到了这篇文章: https ://wiki.archlinux.org/index.php/Locale
而且,正如建议的那样,要在系统范围内启用某些语言环境,您只需取消注释所需的语言环境/etc/locale.gen
,例如,在我的情况下:
en_US.UTF-8 UTF-8
保存对文件的更改后,在命令行上执行(以 root 身份):
locale-gen
重新启动,它的工作原理!(至少对我来说)
我有一个类似的问题,虽然不是 oh-my-zsh 而是 promptline;对我来说,解决方案是从我的配置中删除:
ZLE_PROMPT_INDENT=0
我有一个类似的问题,虽然主题是 tjkirch_mod。每当我在肮脏的 git 存储库中工作并使用制表符完成时,该行的第一个字符都会重复。更改指示 git repo 状态的字符为我解决了这个问题。改变了
ZSH_THEME_GIT_PROMPT_DIRTY=" %{$fg[red]%}⚡"
到
ZSH_THEME_GIT_PROMPT_DIRTY=" %{$fg[红色]%} x "
原来这是一个语言环境问题。直到我在某处删除了一些配置文件并重新运行它之后,运行 locale-gen 才起作用。
不过,您的建议对提示很有帮助。谢谢你。