使用ZSH完成制表符时的剩余字符

使用ZSH完成制表符时的剩余字符,zsh,oh-my-zsh,Zsh,Oh My Zsh,我在Arch linux中使用oh my zsh,并加载robbyrussell主题。当我尝试制表符完成时,我会在提示中添加剩余字符。如果删除自动完成的字符,剩余字符不会删除 例如,如果我键入: ~ /etc 然后tab,它变成了 ~ /e/etc/ 下面是一个选项列表。即使我删除了/etc/,/e仍会保留,并且我会被以下问题困扰: ~ /e 我无法删除/e。我必须执行一个命令来清除残余字符 知道这里发生了什么吗?正如simont所建议的,您使用的提示可能使用了不可打印的字符(如颜色转义码

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

例如,如果我键入:

~ /etc
然后tab,它变成了

~ /e/etc/
下面是一个选项列表。即使我删除了
/etc/
/e
仍会保留,并且我会被以下问题困扰:

~ /e
我无法删除
/e
。我必须执行一个命令来清除残余字符


知道这里发生了什么吗?

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

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

%{%(?.%F{green}.%F{red})%}➜%{%f%}
(?…)
是一个三元代码,用于设置提示符的颜色,并已标记为零宽度。以同样的方式,
%f
重置颜色,该颜色也已标记

您可以通过更新PS1变量来测试对提示符的更改,这样您就可以尝试不同的安排,看看什么适合您


您可以用这种方式标记任何字符,因此请注意不要使提示太短

原来这是一个区域设置问题。在我删除某个配置文件并重新运行它之前,运行LocaleGen无法工作


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

我也遇到了同样的问题,因此在寻求解决方案的过程中,我遇到了这篇文章:

而且,正如所建议的,要在系统范围内启用某些区域设置,只需在
/etc/locale.gen
上取消对所需区域设置的注释,例如,在我的示例中:

en_US.UTF-8 UTF-8
保存文件上的更改后,在命令行上执行(以root用户身份):

locale-gen

重新启动,它就工作了!(至少对我来说)

似乎我在语言环境配置和非UTF8配置方面有问题

在我的案例中,解决方案是:

export LC_ALL="en_US.UTF-8"
并将其永久性地添加到.zshrc中:

echo "export LC_ALL=en_US.UTF-8" >> .zshrc

Ubuntu文档中的更多信息

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

ZLE_PROMPT_INDENT=0

我有一个类似的问题,主题是tjkirch_mod。每当我在脏git repo中工作并使用tab completion时,该行的第一个字符就会被复制。 更改指示git回购状态的字符为我解决了问题。 改变

ZSH_主题_GIT_提示符_DIRTY=“%{$fg[red]]}⚡"


ZSH_主题_GIT_提示符_DIRTY=“%{$fg[red]]}x

如果没有进一步的信息,提示中可能缺少一两个字符。例如,阅读。你在用最新的oh my zsh吗?你修改过提示吗?我可以从GitHub下载oh my zsh进行测试,并准确地表示您的设置吗?:)您可以更具体地介绍解决方案,其他用户(如我)可能无法理解您是如何解决问题的。我希望我可以更具体一些,但我最初在/etc/locale.gen中将UTF8改为拉丁文,当我将其改回UTF8时,我开始遇到问题。我删除了很多文件,但我找不到那篇文章,它告诉我到底是哪个文件帮我解决了这个问题。最后,它归结为使/etc/locale.gen正确并以root用户身份运行localegen。我已经在同一个盒子上安装了新的拱门,从那以后再也没有出现过这个问题。这应该是公认的答案。有一个被接受的反对票的答案是不幸的。非常感谢。这对我帮助很大。在默认的
.zshrc
中取消对以下行的注释似乎也能帮到我:
export LANG=en_US.UTF-8
非常感谢。这个bug非常奇怪,我需要更改文件
/etc/locale.conf
/etc/locale.gen
以添加
en_US.UTF-8
配置并运行
locale gen
。这解决了我的问题:这就是真正解决问题的答案。我查看了自定义的zsh主题,发现了这个问题(
$fg[red]
而不是
%{$fg[red]]]}
)。我添加了分隔符,现在它按预期工作。谢谢你,马修!几年后,经过数周的努力,我找到了这个答案,这正是我所需要的。非常感谢。