例如,如果我输入:
~ /etc
然后按Tab键,它就会转变为
~ /e/etc/
下面列出了一些选项。即使我删除了 /etc/
,/e
仍然存在,我就卡住了:
~ /e
我无法删除/e
。我必须执行一个命令来消除残留字符。
你对这里发生的事情有任何想法吗?
~ /etc
然后按Tab键,它就会转变为
~ /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
.zshrc
文件中取消以下行的注释似乎对我也有用:
export LANG=en_US.UTF-8
- skube/etc/locale.conf
和/etc/locale.gen
以添加en_US.UTF-8
配置并运行locale-gen
。这样可以解决我的问题:https://wiki.archlinux.org/index.php/Locale_(Espa%C3%B1ol) - Victor正如simont所建议的那样,您正在使用的提示符可能使用了不可打印字符(例如颜色转义代码),但没有指示这些字符是不可打印的。因此,在重新绘制提示符时,终端会认为提示符比实际宽度要宽。
您可以使用%{
和%}
分隔符来指示zsh提示符中的字符序列具有零宽度。例如,我的提示符是:
%{%(?.%F{green}.%F{red})%}➜%{%f%}
(?...)
是一个三元运算符,用于设置提示符的颜色,并且已经标记为零宽度。同样地,%f
重置颜色并且也被标记了起来。
你可以通过更新PS1变量来测试对提示符所做的更改,这样你就可以尝试不同的排列方式,看看哪种方式适合你。
你可以用这种方式标记任何字符,所以要小心,不要让你的提示符太短!
$fg[red]
而不是%{$fg[red]%}
)。我添加了定界符,现在它按预期工作。谢谢Matthew! - michalvalasek我遇到了同样的问题,于是在寻求解决方案的过程中发现了这篇文章: https://wiki.archlinux.org/index.php/Locale
正如建议的那样,要在整个系统范围内启用某些语言环境,只需取消注释/etc/locale.gen
上所需的语言环境即可,例如,在我的情况下:
en_US.UTF-8 UTF-8
在保存文件更改后,在命令行上执行以下命令(作为root用户):
locale-gen
我遇到了类似的问题,不过是和promptline有关,解决方法是从我的配置中删除以下内容:
ZLE_PROMPT_INDENT=0
ZSH_THEME_GIT_PROMPT_DIRTY=" %{$fg[red]%}⚡"
更改为
ZSH_THEME_GIT_PROMPT_DIRTY=" %{$fg[red]%}x"
export ZSH_THEME_GIT_PROMPT_DIRTY=" %{$fg[red]%}!"
(在末尾很重要)。问题只出现在我的IDE IntelliJ IDEA Ultimate中,而不是在iTerm2中。我个人更喜欢“!”而不是“x”。我还必须设置:“export LANG=en_US.UTF-8”,如https://dev59.com/XWIk5IYBdhLWcg3wadcD#20969082所述。 - flohall