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