zsh 中的 Tab 补全会导致重复字符

zsh 中的 Tab 补全会导致重复字符

在相对较新的 arch 安装中,使用 ohmyzsh 在 zsh 中使用制表符完成时,前两个字符会重复出现并且无法删除。

例如,我输入yay -S terminato,然后按 Tab 键自动完成到终止符,对吗?它工作正常,我可以像往常一样通过 Tab 浏览结果,但行首不是yay -S term...而是yayay -S term...

当我按下退格键以纠正错误时,我发现我无法删除过去的内容yay,而只剩ya下开头的无法删除的。

这仅适用于单行,并且实际上不会影响任何内容,即使有两个不属于的字符,命令仍会正确执行。

我尝试过其他模拟器,但问题仍然存在,即使在基本 tty 中也是如此。

按 Enter 键或按 Ctrl C 键移动到下一行会重置新行,但旧行仍保留其悬垂字符。

要明确的是,这发生在所有带有制表符完成的命令上,而不仅仅是 yay。

答案1

这意味着已经打印了某种错误,但是由于错误消息打印的字符,命令行在错误之上重新绘制,尽管位置稍微错误。

第一个命令无法删除的原因ya是它是覆盖打印的旧命令行的一部分。它实际上不是新命令行的一部分,因此您无法编辑它。换句话说,终端中打印的字符未能被删除,而您的 shell 对它们一无所知。

要弄清此错误的根源,请执行以下操作

set -vx

然后再次尝试相同的完成,看看是否可以在输出的某处发现任何错误消息。

答案2

我也遇到了同样的问题。它确实与上面提到的区域设置有关。

我已经通过重新生成区域设置解决了这个问题。

sudo echo en_US.UTF-8 UTF-8 > /etc/locale.gen
sudo locale-gen

重新启动后它开始正常工作。

答案3

我遇到了类似的问题,表现也类似。我将问题追溯到 的值LC_ALL。我停止将 导出LC_ALL(和朋友) 为C并 导出LANG=en_US.UTF-8,问题就消失了。

我把问题分成了 Zsh、tmux、一个特定的 oh-my-zsh 主题. (robbeyrussell我认为是 oh-my-zsh 的第一位创建者,因此现在导航指向的是“官方” GitHub 组织)

也可以看看:

相关内容