输入太多后ZSH提示消失

输入太多后ZSH提示消失

当我使用 zsh 键入太长的时间时,提示符就会消失,并且它会在与我键入的其余内容相同的行上留下一个字符,其余字符将转到其下方的新行。不知道如何判断这是一个COLUMNS问题还是完全不同的问题。

对于.zshrcroot 用户来说似乎工作得很好,一旦输入足够长,正确的提示就会消失,并且不会出现故障。我个人的似乎也可以在窗口管理器中的主/堆栈之间切换后自行修复(AwesomeWM,不确定这是否会影响它)

图片:
ROOT PS1:https://imgur.com/a/pfWZB7x

个人PS1:https://imgur.com/lJMyw4k

文件:
ROOT .zshrc:https://paste.gnome.org/pff0tkabw

个人.zshrc:https://paste.gnome.org/pxy8cfrcu

答案1

我猜您的大部分.zshrc文件都是从较旧的文件或其他人的.bashrc文件中提取的,因为其中有很多事情zshbash.

您当前的提示设置为

PS1='[${GREEN}%n${NC}@${GREEN}%m${NC}:${CYAN}%1~${NC}]%(?,,[${RED}%?${NC}])$(git_status)$ '

其中$GREEN等是由 产生的控制序列tput

这存在一个问题,即 shell 很难确定提示的宽度,因为您使用自己的转义序列进行着色,而不是使用zsh.

我建议你放弃你的$GREEN等变量,而是使用

PS1='[%F{green}%n%f@%F{green}%m%f:%F{cyan}%1~%f]%(?,,[%F{red}%?%f])$(git_status)$ '

每个都%F{colorname}将前景色设置为,colorname并且每个都%f停止使用该颜色。

为了正确使用您自己的转义序列,每个这样的序列都应该包含在 中%{...%},以便 shell 知道它不会在提示中占用空间(root 用户的初始化文件执行此操作,但以一种迂回的方式):

PS1='[%{${GREEN}%}%n%{${NC}%}@%{${GREEN}%}%m%{${NC}%}:%{${CYAN}%}%1~%{${NC}%}]%(?,,[%{${RED}%}%?%{${NC}%}])$(git_status)$ '

请注意,这也意味着包含颜色代码的 shell 函数的输出git_status需要更新。

阅读手册中标题为“提示序列的扩展”的部分zshmisc

相关内容