39

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

例如,如果我输入:

~ /etc

然后选项卡,它变成

~ /e/etc/

与下面的选项列表。即使我删除/etc/了,/e我仍然坚持:

~ /e

我无法删除/e. 我必须执行一个命令来摆脱剩余的字符。

知道这里发生了什么吗?

4

6 回答 6

77

似乎我在语言环境配置和非 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

于 2014-01-07T10:20:32.703 回答
29

正如 simont 所建议的,您使用的提示很可能正在使用不可打印的字符(如颜色转义码),但并不表示这些字符是不可打印的。因此,当重新绘制提示时,终端认为提示比实际更宽。

%{您使用and%}分隔符指示 zsh 提示符中的字符序列宽度为零。例如我的提示是:

%{%(?.%F{green}.%F{red})%}➜%{%f%}

(?...)是一个设置提示颜色的三元组,它已被标记为表示它是零宽度。以同样的方式%f重置颜色并且也已标记。

您可以通过更新 PS1 变量来测试对提示的更改,这样您就可以尝试不同的安排,看看哪些对您有用。

你可以用这种方式标记任何字符,所以要小心不要让你的提示太短!

于 2013-11-01T16:51:24.307 回答
7

我遇到了同样的问题,所以在寻求解决方案时我遇到了这篇文章: https ://wiki.archlinux.org/index.php/Locale

而且,正如建议的那样,要在系统范围内启用某些语言环境,您只需取消注释所需的语言环境/etc/locale.gen,例如,在我的情况下:

en_US.UTF-8 UTF-8

保存对文件的更改后,在命令行上执行(以 root 身份):

locale-gen

重新启动,它的工作原理!(至少对我来说)

于 2014-01-06T15:54:31.200 回答
1

我有一个类似的问题,虽然不是 oh-my-zsh 而是 promptline;对我来说,解决方案是从我的配置中删除:

ZLE_PROMPT_INDENT=0
于 2016-02-12T00:46:39.617 回答
0

我有一个类似的问题,虽然主题是 tjkirch_mod。每当我在肮脏的 git 存储库中工作并使用制表符完成时,该行的第一个字符都会重复。更改指示 git repo 状态的字符为我解决了这个问题。改变了

ZSH_THEME_GIT_PROMPT_DIRTY=" %{$fg[red]%}⚡"

ZSH_THEME_GIT_PROMPT_DIRTY=" %{$fg[红色]%} x "

于 2019-01-24T10:45:43.560 回答
-1

原来这是一个语言环境问题。直到我在某处删除了一些配置文件并重新运行它之后,运行 locale-gen 才起作用。

不过,您的建议对提示很有帮助。谢谢你。

于 2013-11-12T00:06:01.957 回答