使用ZSH填充选项卡时的残余字符

时间:2013-10-10 20:11:28

标签: zsh oh-my-zsh

我在Arch linux中使用oh-my-zsh并加载了robbyrussell主题。当我尝试选项卡完成时,我最终会在提示符后附加补充字符。如果删除自动完成的字符,则不会删除剩余字符。

例如,如果我输入:

~ /etc

然后选项卡,它转到

~ /e/etc/

以下列选项。即使我删除了/etc//e仍然存在,我仍然坚持:

~ /e

我无法删除/e。我必须执行一个命令来摆脱残余角色。

知道这里发生了什么吗?

6 个答案:

答案 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