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

ima*_*lol 6 linux terminal zsh tty oh-my-zsh

当在 zsh 中使用制表符补全时,使用 ohmyzsh,在相对较新的 arch 安装中,前两个字符将重复自身并且变得不可删除。

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

当我按退格键以纠正错误时,我发现我无法删除过去的yay,从而在一开始就留下了ya我无法删除的。

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

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

按 Enter 或 ctrl c 移动到下一行会重置新行,但旧行仍保留其悬空字符。

需要明确的是,所有带有制表符补全的命令都会发生这种情况,而不仅仅是耶。

Mar*_*ert 2

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

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

要深入了解此错误,请执行以下操作

set -vx
Run Code Online (Sandbox Code Playgroud)

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