完成后显示屏会重复命令的第一个字符

完成后显示屏会重复命令的第一个字符

Tab当我用来完成时,前两个字符被重复。在下面的屏幕截图中,cd重复了。

在此输入图像描述

我尝试过 rxvt-unicdoe、xterm、终结者。所有这些终端模拟器都有这个问题。

Zsh 版本 5.0.2,配置文件在我的 zsh 上

答案1

如果命令行上的字符有时会以偏移量显示,这通常是因为 zsh 计算了错误的提示宽度。症状是,只要您添加字符或逐个字符移动,显示看起来就很好,但当您使用其他移动光标的命令(Home、补全等)时,显示就会出现乱码(某些字符显示得比应有的更靠右)。 ) 或者当命令与第二行重叠时。

Zsh 需要知道的宽度迅速的为了知道命令的字符放置在哪里。除非另有说明,否则它假定每个字符占据一个位置。

一种可能是您的提示包含转义序列没有正确界定。更改文本的颜色或其他格式设置,或者更改窗口标题或其他效果的转义序列的宽度为零。他们需要包含在百分号大括号结构中%{…%}。更一般地说,像这样的转义序列%42{…%}告诉 zsh 假设大括号内的内容是 42 个字符宽。

因此,请检查您的提示设置(PS1PROMPT或它们引用的变量),并确保所有转义序列(例如\e[…m更改文本属性 - 请注意,它可能通过某些变量(例如 )出现$fg[red])都在 内%{…%}。由于您使用的是 oh-my-zsh,请检查您自己的设置以及您在 oh-my-zsh 中使用的定义。

bash 中也出现同样的问题。 a 中有零宽度序列迅速的需要包含在\[…\].

另一种可能性是您的提示符包含非 ASCII 字符,并且 zsh(或任何其他应用程序)和您的终端对它们的宽度有不同的想法。如果有的话,就会发生这种情况编码之间不匹配终端的编码和 shell 中声明的编码不同,这两种编码会导致某些字节序列的宽度不同。通常,当使用非 Unicode 终端但声明 Unicode 区域设置时,您可能会遇到此问题,反之亦然。

应用程序依赖环境变量来了解区域设置;相关设置为,它由环境变量、和LC_CTYPE确定(设置的第一个适用)。该命令会告诉您当前的设置。通常,避免区域设置问题的最佳方法是让终端仿真器设置,因为它知道它需要什么编码;但如果这不适合您,请务必设置.LANGUAGELC_ALLLC_CTYPELANGlocale | grep LC_CTYPELC_CTYPELC_CTYPE

当上一个命令显示一些不以换行符结尾的输出时,可能会出现相同的症状,因此提示符显示在行的中间,但 shell 没有意识到这一点。在这种情况下,这种情况只会在运行这样的命令后发生,而不是持续发生。

如果某行显示不正确,命令redisplayclear-screen(默认绑定到Ctrl+ )将修复它。L

答案2

我遇到了同样的问题,并在这里找到了我的解决方案:https://github.com/robbyrussell/oh-my-zsh/issues/5157#issuecomment-226031519。只需将以下内容放入您的~/.zshrc.

export LC_CTYPE=en_US.UTF-8

答案3

我在 macOS 上的 iTerm 2 中遇到了这个问题。我最终通过转到“首选项”->“配置文件”->“文本”并勾选“使用 Unicode 版本 9 宽度”来解决该问题。

答案4

我在使用 ubuntu lts docker image ( ) 时遇到了这个问题ubuntu:latest。我按照相应页面上提供的说明修复了它:https://hub.docker.com/_/ubuntu

apt-get update && \
apt-get install -y locales && \
rm -rf /var/lib/apt/lists/* && \
localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
echo 'export LANG=en_US.utf8' >> ~/.zshrc
zsh

相关内容