在相对较新的 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 组织)
也可以看看: